C - Candies

Time Limit: 2 sec / Memory Limit: 256 MB

配点 : 300

問題文

2 \times N のマス目があります。上から i 行目、左から j 列目 (1 \leq i \leq 2, 1 \leq j \leq N) のマスをマス (i, j) と表すことにします。

あなたははじめ、左上のマス (1, 1) にいます。 あなたは、右方向または下方向への移動を繰り返し、右下のマス (2, N) に移動しようとしています。

マス (i, j) には A_{i, j} 個のアメが置かれています。 あなたは移動中に通ったマスに置いてあるアメをすべて回収します。 左上および右下のマスにもアメが置かれており、あなたはこれらのマスに置かれているアメも回収します。

移動方法をうまく選んだとき、最大で何個のアメを回収できるでしょうか。

制約

  • 1 \leq N \leq 100
  • 1 \leq A_{i, j} \leq 100 (1 \leq i \leq 2, 1 \leq j \leq N)

入力

入力は以下の形式で標準入力から与えられる。

N
A_{1, 1} A_{1, 2} ... A_{1, N}
A_{2, 1} A_{2, 2} ... A_{2, N}

出力

回収できるアメの個数の最大値を出力せよ。


入力例 1

5
3 2 2 4 1
1 2 2 2 1

出力例 1

14

以下のように移動するとき、回収できるアメの個数が最大となります。

  • まず右に 3 回移動する。その後下に 1 回移動し、さらに右に 1 回移動する。

入力例 2

4
1 1 1 1
1 1 1 1

出力例 2

5

どのように移動しても回収できるアメの個数は同じになります。


入力例 3

7
3 3 4 5 4 5 3
5 3 4 4 2 3 2

出力例 3

29

入力例 4

1
2
3

出力例 4

5

Score : 300 points

Problem Statement

We have a 2 \times N grid. We will denote the square at the i-th row and j-th column (1 \leq i \leq 2, 1 \leq j \leq N) as (i, j).

You are initially in the top-left square, (1, 1). You will travel to the bottom-right square, (2, N), by repeatedly moving right or down.

The square (i, j) contains A_{i, j} candies. You will collect all the candies you visit during the travel. The top-left and bottom-right squares also contain candies, and you will also collect them.

At most how many candies can you collect when you choose the best way to travel?

Constraints

  • 1 \leq N \leq 100
  • 1 \leq A_{i, j} \leq 100 (1 \leq i \leq 2, 1 \leq j \leq N)

Input

Input is given from Standard Input in the following format:

N
A_{1, 1} A_{1, 2} ... A_{1, N}
A_{2, 1} A_{2, 2} ... A_{2, N}

Output

Print the maximum number of candies that can be collected.


Sample Input 1

5
3 2 2 4 1
1 2 2 2 1

Sample Output 1

14

The number of collected candies will be maximized when you:

  • move right three times, then move down once, then move right once.

Sample Input 2

4
1 1 1 1
1 1 1 1

Sample Output 2

5

You will always collect the same number of candies, regardless of how you travel.


Sample Input 3

7
3 3 4 5 4 5 3
5 3 4 4 2 3 2

Sample Output 3

29

Sample Input 4

1
2
3

Sample Output 4

5
D - People on a Line

Time Limit: 2 sec / Memory Limit: 256 MB

配点 : 400

問題文

x 軸上に N 人の人が立っています。 人 i の位置を x_i とします。 任意の i に対して、x_i0 以上 10^9 以下の整数です。 同じ位置に複数の人が立っていることもありえます。

これらの人の位置に関する情報が M 個与えられます。 このうち i 個めの情報は (L_i, R_i, D_i) という形をしています。 この情報は、人 R_i は人 L_i よりも距離 D_i だけ右にいること、 すなわち、x_{R_i} - x_{L_i} = D_i が成り立つことを表します。

これら M 個の情報のうちのいくつかに誤りがある可能性があることがわかりました。 与えられる M 個すべての情報と矛盾しないような値の組 (x_1, x_2, ..., x_N) が存在するかどうか判定してください。

制約

  • 1 \leq N \leq 100,000
  • 0 \leq M \leq 200,000
  • 1 \leq L_i, R_i \leq N (1 \leq i \leq M)
  • 0 \leq D_i \leq 10,000 (1 \leq i \leq M)
  • L_i \neq R_i (1 \leq i \leq M)
  • i \neq j のとき、(L_i, R_i) \neq (L_j, R_j) かつ (L_i, R_i) \neq (R_j, L_j)
  • D_i は整数である

入力

入力は以下の形式で標準入力から与えられる。

N M
L_1 R_1 D_1
L_2 R_2 D_2
:
L_M R_M D_M

出力

与えられるすべての情報と矛盾しない値の組 (x_1, x_2, ..., x_N) が存在するときは Yes と、存在しないときは No と出力せよ。


入力例 1

3 3
1 2 1
2 3 1
1 3 2

出力例 1

Yes

値の組 (x_1, x_2, x_3) として、(0, 1, 2)(101, 102, 103) などが考えられます。


入力例 2

3 3
1 2 1
2 3 1
1 3 5

出力例 2

No

はじめの 2 つの情報が正しいとすると、x_3 - x_1 = 2 が成り立つことが分かります。 これは最後の情報に矛盾します。


入力例 3

4 3
2 1 1
2 3 5
3 4 2

出力例 3

Yes

入力例 4

10 3
8 7 100
7 9 100
9 8 100

出力例 4

No

入力例 5

100 0

出力例 5

Yes

Score : 400 points

Problem Statement

There are N people standing on the x-axis. Let the coordinate of Person i be x_i. For every i, x_i is an integer between 0 and 10^9 (inclusive). It is possible that more than one person is standing at the same coordinate.

You will given M pieces of information regarding the positions of these people. The i-th piece of information has the form (L_i, R_i, D_i). This means that Person R_i is to the right of Person L_i by D_i units of distance, that is, x_{R_i} - x_{L_i} = D_i holds.

It turns out that some of these M pieces of information may be incorrect. Determine if there exists a set of values (x_1, x_2, ..., x_N) that is consistent with the given pieces of information.

Constraints

  • 1 \leq N \leq 100 000
  • 0 \leq M \leq 200 000
  • 1 \leq L_i, R_i \leq N (1 \leq i \leq M)
  • 0 \leq D_i \leq 10 000 (1 \leq i \leq M)
  • L_i \neq R_i (1 \leq i \leq M)
  • If i \neq j, then (L_i, R_i) \neq (L_j, R_j) and (L_i, R_i) \neq (R_j, L_j).
  • D_i are integers.

Input

Input is given from Standard Input in the following format:

N M
L_1 R_1 D_1
L_2 R_2 D_2
:
L_M R_M D_M

Output

If there exists a set of values (x_1, x_2, ..., x_N) that is consistent with all given pieces of information, print Yes; if it does not exist, print No.


Sample Input 1

3 3
1 2 1
2 3 1
1 3 2

Sample Output 1

Yes

Some possible sets of values (x_1, x_2, x_3) are (0, 1, 2) and (101, 102, 103).


Sample Input 2

3 3
1 2 1
2 3 1
1 3 5

Sample Output 2

No

If the first two pieces of information are correct, x_3 - x_1 = 2 holds, which is contradictory to the last piece of information.


Sample Input 3

4 3
2 1 1
2 3 5
3 4 2

Sample Output 3

Yes

Sample Input 4

10 3
8 7 100
7 9 100
9 8 100

Sample Output 4

No

Sample Input 5

100 0

Sample Output 5

Yes
E - Avoiding Collision

Time Limit: 2 sec / Memory Limit: 256 MB

配点 : 700

問題文

N 頂点 M 辺からなるグラフがあり、このグラフの上に高橋くんと青木くんがいます。

グラフの i 番目の辺は頂点 U_i と頂点 V_i を結んでいます。 この辺を通るのにかかる時間は、通る人 (高橋くんまたは青木くん) によらず、また通る方向によらず、D_i 分です。

高橋くんは頂点 S を、青木くんは頂点 T を同時に出発し、それぞれ頂点 T および頂点 S へ最短の時間で移動します。 二人の最短路の選び方の組であって、移動の途中で二人が (辺または頂点上で) 出会うことのないようなものの個数を 10^9 + 7 で割ったあまりを求めてください。

制約

  • 1 \leq N \leq 100,000
  • 1 \leq M \leq 200,000
  • 1 \leq S, T \leq N
  • S \neq T
  • 1 \leq U_i, V_i \leq N (1 \leq i \leq M)
  • 1 \leq D_i \leq 10^9 (1 \leq i \leq M)
  • i \neq j のとき、(U_i, V_i) \neq (U_j, V_j) かつ (U_i, V_i) \neq (V_j, U_j)
  • U_i \neq V_i (1 \leq i \leq M)
  • D_i は整数である
  • 与えられるグラフは連結である

入力

入力は以下の形式で標準入力から与えられる。

N M
S T
U_1 V_1 D_1
U_2 V_2 D_2
:
U_M V_M D_M

出力

答えを出力せよ。


入力例 1

4 4
1 3
1 2 1
2 3 1
3 4 1
4 1 1

出力例 1

2

条件を満たす最短路の選び方は以下の 2 通りあります。

  • 高橋くんが頂点 1 \rightarrow 2 \rightarrow 3 という経路で、青木くんが頂点 3 \rightarrow 4 \rightarrow 1 という経路で移動する。
  • 高橋くんが頂点 1 \rightarrow 4 \rightarrow 3 という経路で、青木くんが頂点 3 \rightarrow 2 \rightarrow 1 という経路で移動する。

入力例 2

3 3
1 3
1 2 1
2 3 1
3 1 2

出力例 2

2

入力例 3

3 3
1 3
1 2 1
2 3 1
3 1 2

出力例 3

2

入力例 4

8 13
4 2
7 3 9
6 2 3
1 6 4
7 6 9
3 8 9
1 2 2
2 8 12
8 6 9
2 5 5
4 2 18
5 3 7
5 1 515371567
4 8 6

出力例 4

6

Score : 700 points

Problem Statement

We have a graph with N vertices and M edges, and there are two people on the graph: Takahashi and Aoki.

The i-th edge connects Vertex U_i and Vertex V_i. The time it takes to traverse this edge is D_i minutes, regardless of direction and who traverses the edge (Takahashi or Aoki).

Takahashi departs Vertex S and Aoki departs Vertex T at the same time. Takahashi travels to Vertex T and Aoki travels to Vertex S, both in the shortest time possible. Find the number of the pairs of ways for Takahashi and Aoki to choose their shortest paths such that they never meet (at a vertex or on an edge) during the travel, modulo 10^9 + 7.

Constraints

  • 1 \leq N \leq 100 000
  • 1 \leq M \leq 200 000
  • 1 \leq S, T \leq N
  • S \neq T
  • 1 \leq U_i, V_i \leq N (1 \leq i \leq M)
  • 1 \leq D_i \leq 10^9 (1 \leq i \leq M)
  • If i \neq j, then (U_i, V_i) \neq (U_j, V_j) and (U_i, V_i) \neq (V_j, U_j).
  • U_i \neq V_i (1 \leq i \leq M)
  • D_i are integers.
  • The given graph is connected.

Input

Input is given from Standard Input in the following format:

N M
S T
U_1 V_1 D_1
U_2 V_2 D_2
:
U_M V_M D_M

Output

Print the answer.


Sample Input 1

4 4
1 3
1 2 1
2 3 1
3 4 1
4 1 1

Sample Output 1

2

There are two ways to choose shortest paths that satisfies the condition:

  • Takahashi chooses the path 1 \rightarrow 2 \rightarrow 3, and Aoki chooses the path 3 \rightarrow 4 \rightarrow 1.
  • Takahashi chooses the path 1 \rightarrow 4 \rightarrow 3, and Aoki chooses the path 3 \rightarrow 2 \rightarrow 1.

Sample Input 2

3 3
1 3
1 2 1
2 3 1
3 1 2

Sample Output 2

2

Sample Input 3

3 3
1 3
1 2 1
2 3 1
3 1 2

Sample Output 3

2

Sample Input 4

8 13
4 2
7 3 9
6 2 3
1 6 4
7 6 9
3 8 9
1 2 2
2 8 12
8 6 9
2 5 5
4 2 18
5 3 7
5 1 515371567
4 8 6

Sample Output 4

6
F - Number of Digits

Time Limit: 2 sec / Memory Limit: 256 MB

配点 : 900

問題文

正の整数 n に対し、f(n)n10 進法での桁数と定めます。

整数 S が与えられます。 正の整数の組 (l, r) (l \leq r) であって、f(l) + f(l + 1) + ... + f(r) = S を満たすものの個数を 10^9 + 7 で割ったあまりを求めてください。

制約

  • 1 \leq S \leq 10^8

入力

入力は以下の形式で標準入力から与えられる。

S

出力

答えを出力せよ。


入力例 1

1

出力例 1

9

条件を満たす (l, r) の組は (1, 1), (2, 2), ..., (9, 9)9 個あります。


入力例 2

2

出力例 2

98

条件を満たす (l, r) の組は (1, 2)(33, 33) など 98 個あります。


入力例 3

123

出力例 3

460191684

入力例 4

36018

出力例 4

966522825

入力例 5

1000

出力例 5

184984484

Score : 900 points

Problem Statement

For a positive integer n, let us define f(n) as the number of digits in base 10.

You are given an integer S. Count the number of the pairs of positive integers (l, r) (l \leq r) such that f(l) + f(l + 1) + ... + f(r) = S, and find the count modulo 10^9 + 7.

Constraints

  • 1 \leq S \leq 10^8

Input

Input is given from Standard Input in the following format:

S

Output

Print the answer.


Sample Input 1

1

Sample Output 1

9

There are nine pairs (l, r) that satisfies the condition: (1, 1), (2, 2), ..., (9, 9).


Sample Input 2

2

Sample Output 2

98

There are 98 pairs (l, r) that satisfies the condition, such as (1, 2) and (33, 33).


Sample Input 3

123

Sample Output 3

460191684

Sample Input 4

36018

Sample Output 4

966522825

Sample Input 5

1000

Sample Output 5

184984484