Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 100 点
問題文
初項が A、末項が B、公差が D であるような等差数列を出力してください。
なお、そのような等差数列が存在する入力のみが与えられます。
制約
- 1 \leq A \leq B \leq 100
- 1\leq D \leq 100
- 初項が A、末項が B、公差が D であるような等差数列が存在する
- 入力は全て整数
入力
入力は以下の形式で標準入力から与えられる。
A B D
出力
初項が A、末項が B、公差が D であるような等差数列の項を順に空白区切りで出力せよ。
入力例 1
3 9 2
出力例 1
3 5 7 9
初項が 3、末項が 9、公差が 2 であるような等差数列は (3,5,7,9) です。
入力例 2
10 10 1
出力例 2
10
初項が 10、末項が 10、公差が 1 であるような等差数列は (10) です。
Score: 100 points
Problem Statement
Print an arithmetic sequence with first term A, last term B, and common difference D.
You are only given inputs for which such an arithmetic sequence exists.
Constraints
- 1 \leq A \leq B \leq 100
- 1 \leq D \leq 100
- There is an arithmetic sequence with first term A, last term B, and common difference D.
- All input values are integers.
Input
The input is given from Standard Input in the following format:
A B D
Output
Print the terms of the arithmetic sequence with first term A, last term B, and common difference D, in order, separated by spaces.
Sample Input 1
3 9 2
Sample Output 1
3 5 7 9
The arithmetic sequence with first term 3, last term 9, and common difference 2 is (3,5,7,9).
Sample Input 2
10 10 1
Sample Output 2
10
The arithmetic sequence with first term 10, last term 10, and common difference 1 is (10).
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 100 点
問題文
3 種類の文字 .
|
*
からなる、長さ N の文字列 S が与えられます。
S には |
がちょうど 2 つ、*
がちょうど 1 つ含まれます。
2 つの |
で囲まれた部分の中に *
が含まれるか判定してください。
含まれている場合 in
と、含まれていない場合 out
と出力してください。
より厳密には、*
より前にある文字のいずれかが |
であり、かつ、*
より後ろにある文字のいずれかが |
であるか判定してください。
制約
- 3\leq N\leq 100
- N は整数
- S は
.
|
*
からなる長さ N の文字列 - S に
|
はちょうど 2 個含まれる - S に
*
はちょうど 1 個含まれる
入力
入力は以下の形式で標準入力から与えられる。
N S
出力
2 つの |
に囲まれた部分の中に *
が含まれている場合 in
と、含まれていない場合 out
と 1 行に出力せよ。
入力例 1
10 .|..*...|.
出力例 1
in
2 つの |
に囲まれた部分は |..*...|
です。
この中に *
が含まれているため、in
と出力してください。
入力例 2
10 .|..|.*...
出力例 2
out
2 つの |
に囲まれた部分は |..|
です。
この中に *
は含まれていないため、out
と出力してください。
入力例 3
3 |*|
出力例 3
in
Score : 100 points
Problem Statement
You are given a string S of length N consisting of three kinds of characters: .
, |
, and *
.
S contains exactly two |
and exactly one *
.
Determine whether the *
is between the two |
, and if so, print in
; otherwise, print out
.
More formally, determine whether one of the characters before the *
is |
and one of the characters after the *
is |
.
Constraints
- 3\leq N\leq 100
- N is an integer.
- S is a string of length N consisting of
.
,|
, and*
. - S contains exactly two
|
. - S contains exactly one
*
.
Input
The input is given from Standard Input in the following format:
N S
Output
Print a single line containing in
if the *
is between the two |
, and out
otherwise.
Sample Input 1
10 .|..*...|.
Sample Output 1
in
Between the two |
, we have |..*...|
, which contains *
, so you should print in
.
Sample Input 2
10 .|..|.*...
Sample Output 2
out
Between the two |
, we have |..|
, which does not contain *
, so you should print out
.
Sample Input 3
3 |*|
Sample Output 3
in
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 200 点
問題文
拡張 A 文字列、拡張 B 文字列、拡張 C 文字列および拡張 ABC 文字列を以下のように定義します。
- 文字列 S が拡張 A 文字列であるとは、S のすべての文字が
A
であることをいいます。 - 文字列 S が拡張 B 文字列であるとは、S のすべての文字が
B
であることをいいます。 - 文字列 S が拡張 C 文字列であるとは、S のすべての文字が
C
であることをいいます。 - 文字列 S が拡張 ABC 文字列であるとは、ある拡張 A 文字列 S _ A 、拡張 B 文字列 S _ B 、拡張 C 文字列 S _ C が存在して、S _ A,S _ B,S _ C をこの順に連結した文字列が S と等しいことをいいます。
例えば、ABC
や A
、AAABBBCCCCCCC
などは拡張 ABC 文字列ですが、ABBAAAC
、BBBCCCCCCCAAA
などは拡張 ABC 文字列ではありません。
空文字列は拡張 A 文字列でも拡張 B 文字列でも拡張 C 文字列でもあることに注意してください。
A
, B
, C
からなる文字列 S が与えられます。
S が拡張 ABC 文字列ならば Yes
を、そうでなければ No
を出力してください。
制約
- S は
A
,B
,C
からなる文字列 - 1\leq|S|\leq 100\ (|S| は文字列 S の長さ)
入力
入力は以下の形式で標準入力から与えられる。
S
出力
S が拡張 ABC 文字列ならば Yes
を、そうでなければ No
を出力せよ。
入力例 1
AAABBBCCCCCCC
出力例 1
Yes
AAABBBCCCCCCC
は長さ 3 の拡張 A 文字列 AAA
、長さ 3 の拡張 B 文字列 BBB
、長さ 7 の拡張 C 文字列 CCCCCCC
をこの順に連結した文字列なので、拡張 ABC 文字列です。
よって、Yes
を出力してください。
入力例 2
ACABABCBC
出力例 2
No
どのような拡張 A 文字列 S _ A, 拡張 B 文字列 S _ B, 拡張 C 文字列 S _ C についても、S _ A,S _ B,S _ C をこの順に連結した文字列が ACABABCBC
と等しくなることはありません。
よって、No
を出力してください。
入力例 3
A
出力例 3
Yes
入力例 4
ABBBBBBBBBBBBBCCCCCC
出力例 4
Yes
Score: 200 points
Problem Statement
We define Extended A strings, Extended B strings, Extended C strings, and Extended ABC strings as follows:
- A string S is an Extended A string if all characters in S are
A
. - A string S is an Extended B string if all characters in S are
B
. - A string S is an Extended C string if all characters in S are
C
. - A string S is an Extended ABC string if there is an Extended A string S_A, an Extended B string S_B, and an Extended C string S_C such that the string obtained by concatenating S_A, S_B, S_C in this order equals S.
For example, ABC
, A
, and AAABBBCCCCCCC
are Extended ABC strings, but ABBAAAC
and BBBCCCCCCCAAA
are not.
Note that the empty string is an Extended A string, an Extended B string, and an Extended C string.
You are given a string S consisting of A
, B
, and C
.
If S is an Extended ABC string, print Yes
; otherwise, print No
.
Constraints
- S is a string consisting of
A
,B
, andC
. - 1\leq|S|\leq 100 (|S| is the length of the string S.)
Input
The input is given from Standard Input in the following format:
S
Output
If S is an Extended ABC string, print Yes
; otherwise, print No
.
Sample Input 1
AAABBBCCCCCCC
Sample Output 1
Yes
AAABBBCCCCCCC
is an Extended ABC string because it is a concatenation of an Extended A string of length 3, AAA
, an Extended B string of length 3, BBB
, and an Extended C string of length 7, CCCCCCC
, in this order.
Thus, print Yes
.
Sample Input 2
ACABABCBC
Sample Output 2
No
There is no triple of Extended A string S_A, Extended B string S_B, and Extended C string S_C such that the string obtained by concatenating S_A, S_B, and S_C in this order equals ACABABCBC
.
Therefore, print No
.
Sample Input 3
A
Sample Output 3
Yes
Sample Input 4
ABBBBBBBBBBBBBCCCCCC
Sample Output 4
Yes
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 200 点
問題文
縦 R 行横 C 列の盤面があります。上から i 行目、左から j 列目のマスを (i,j) と表します。
(i,j) の現在の状態が文字 B_{i,j} として与えられます。
.
は空きマス、#
は壁があるマスを表し、
1
, 2
,\dots, 9
はそれぞれ威力 1,2,\dots,9 の爆弾があるマスを表します。
次の瞬間に、全ての爆弾が同時に爆発します。 爆弾が爆発すると、爆弾があるマスからのマンハッタン距離がその爆弾の威力以下であるような全てのマス(その爆弾があるマス自体を含む)が空きマスに変わります。 ここで、(r_1,c_1) から (r_2,c_2) までのマンハッタン距離は |r_1-r_2|+|c_1-c_2| です。
爆発後の盤面を出力してください。
制約
- 1\leq R,C \leq 20
- R,C は整数
- B_{i,j} は
.
,#
,1
,2
,\dots,9
のいずれかである
入力
入力は以下の形式で標準入力から与えられる。
R C B_{1,1}B_{1,2}\dots B_{1,C} \vdots B_{R,1}B_{R,2}\dots B_{R,C}
出力
爆発後の盤面を R 行で出力せよ。盤面の表し方は入力と同じ形式を用いること (R と C を出力する必要はない)。
入力例 1
4 4 .1.# ###. .#2. #.##
出力例 1
...# #... .... #...
- (1,2) にある爆弾の爆発によって、上図の青いマスと紫のマスが空きマスに変わります。
- (3,3) にある爆弾の爆発によって、上図の赤いマスと紫のマスが空きマスに変わります。
この例のように、爆弾が効果を及ぼす範囲に被りがあることもあります。
入力例 2
2 5 ..#.# ###.#
出力例 2
..#.# ###.#
爆弾が 1 つもないこともあります。
入力例 3
2 3 11# ###
出力例 3
... ..#
入力例 4
4 6 #.#3#. ###.#. ##.### #1..#.
出力例 4
...... #..... #....# ....#.
Score : 200 points
Problem Statement
We have a board with R rows running horizontally and C columns running vertically. Let (i,j) denote the square at the i-th row from the top and j-th column from the left.
You are given characters B_{i,j} representing the current states of (i,j).
.
represents an empty square; #
represents a square with a wall; 1
, 2
,\dots, 9
represent a square with a bomb of power 1,2,\dots,9, respectively.
At the next moment, all bombs will explode simultaneously. When a bomb explodes, every square whose Manhattan distance from the square with the bomb is not greater than the power of the bomb will turn into an empty square. Here, the Manhattan distance from (r_1,c_1) to (r_2,c_2) is |r_1-r_2|+|c_1-c_2|.
Print the board after the explosions.
Constraints
- 1\leq R,C \leq 20
- R and C are integers.
- Each B_{i,j} is one of
.
,#
,1
,2
, \dots,9
.
Input
The input is given from Standard Input in the following format:
R C B_{1,1}B_{1,2}\dots B_{1,C} \vdots B_{R,1}B_{R,2}\dots B_{R,C}
Output
Print R lines representing the board after the explosions. Use the format used in the input (do not print R or C).
Sample Input 1
4 4 .1.# ###. .#2. #.##
Sample Output 1
...# #... .... #...
- The explosion of the bomb at (1,2) will turn the blue squares and purple squares in the above figure into empty squares.
- The explosion of the bomb at (3,3) will turn the red squares and purple squares in the above figure into empty squares.
As seen in this sample, the explosion ranges of bombs may overlap.
Sample Input 2
2 5 ..#.# ###.#
Sample Output 2
..#.# ###.#
There may be no bombs.
Sample Input 3
2 3 11# ###
Sample Output 3
... ..#
Sample Input 4
4 6 #.#3#. ###.#. ##.### #1..#.
Sample Output 4
...... #..... #....# ....#.
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 300 点
問題文
2 次元座標平面があります。x 軸正方向を右向き、y 軸正方向を上向きとします。
この平面上に自己交差のない四角形があります。
4 つの頂点の座標は反時計回りに (A_x,A_y),(B_x,B_y),(C_x,C_y),(D_x,D_y) です。
この四角形が凸であるか判定してください。
なお、四角形の 4 つの内角が全て 180 度未満であるとき、かつ、その時に限り、その四角形は凸であるといいます。
制約
- -100 \leq A_x,A_y,B_x,B_y,C_x,C_y,D_x,D_y \leq 100
- 入力に含まれる値は全て整数である
- 与えられる 4 点は四角形の 4 頂点を反時計回りに並べたものである
- 与えられる 4 点のなす四角形は自己交差がなく退化していない。すなわち
- どの 2 頂点も同じ座標にない
- どの 3 頂点も同一直線上にない
- 隣接しない 2 辺は共有点を持たない
入力
入力は以下の形式で標準入力から与えられる。
A_x A_y B_x B_y C_x C_y D_x D_y
出力
与えられる四角形が凸なら Yes
、凸でないなら No
を出力せよ。
入力例 1
0 0 1 0 1 1 0 1
出力例 1
Yes
与えられた四角形は正方形であり、4 つの内角は全て 90 度です。したがって、この四角形は凸です。
入力例 2
0 0 1 1 -1 0 1 -1
出力例 2
No
角 A が 270 度です。したがって、この四角形は凸ではありません。
Score : 300 points
Problem Statement
Consider a two-dimensional coordinate plane, where the x-axis is oriented to the right, and the y-axis is oriented upward.
In this plane, there is a quadrilateral without self-intersection.
The coordinates of the four vertices are (A_x,A_y), (B_x,B_y), (C_x,C_y), and (D_x,D_y), in counter-clockwise order.
Determine whether this quadrilateral is convex.
Here, a quadrilateral is convex if and only if all four interior angles are less than 180 degrees.
Constraints
- -100 \leq A_x,A_y,B_x,B_y,C_x,C_y,D_x,D_y \leq 100
- All values in input are integers.
- The given four points are the four vertices of a quadrilateral in counter-clockwise order.
- The quadrilateral formed by the given four points has no self-intersection and is non-degenerate. That is,
- no two vertices are at the same coordinates;
- no three vertices are colinear; and
- no two edges that are not adjacent have a common point.
Input
Input is given from Standard Input in the following format:
A_x A_y B_x B_y C_x C_y D_x D_y
Output
If the given quadrilateral is convex, print Yes
; otherwise, print No
.
Sample Input 1
0 0 1 0 1 1 0 1
Sample Output 1
Yes
The given quadrilateral is a square, whose four interior angles are all 90 degrees. Thus, this quadrilateral is convex.
Sample Input 2
0 0 1 1 -1 0 1 -1
Sample Output 2
No
The angle A is 270 degrees. Thus, this quadrilateral is not convex.
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 250 点
問題文
N 人のプレイヤーが参加するプログラミングコンテスト World Tour Finals が行われており、競技時間の半分が過ぎました。 このコンテストでは M 問の問題が出題されており、問題 i の点数 A_i は 500 以上 2500 以下の 100 の倍数です。
各 i = 1, \ldots, N について、プレイヤー i がどの問題を既に解いたかを表す文字列 S_i が与えられます。
S_i は o
, x
からなる長さ M の文字列で、S_i の j 文字目が o
のときプレイヤー i は問題 j を既に解いており、x
のときまだ解いていません。
ただし、どのプレイヤーもまだ全ての問題を解いてはいません。
プレイヤー i の総合得点は、解いた問題の点数の合計に、ボーナス点 i 点を加えた点数として計算されます。
さて、各 i = 1, \ldots, N について以下の質問に答えてください。
- プレイヤー i がまだ解いていない問題を少なくとも何問解くことで、プレイヤー i の総合得点が他のプレイヤー全員の現在の総合得点を上回ることができますか?
なお、問題文中の条件と制約から、プレイヤー i が全ての問題を解くことで、他のプレイヤー全員の現在の総合得点を上回ることができることが証明できます。 このことから、答えは常に定義されることに注意してください。
制約
- 2\leq N\leq 100
- 1\leq M\leq 100
- 500\leq A_i\leq 2500
- A_i は 100 の倍数
- S_i は
o
,x
からなる長さ M の文字列 - S_i には
x
が一個以上含まれる - 入力される数値は全て整数
入力
入力は以下の形式で標準入力から与えられる。
N M A_1 A_2 \ldots A_M S_1 S_2 \vdots S_N
出力
N 行出力せよ。 i 行目にはプレイヤー i に関する質問の答えを出力せよ。
入力例 1
3 4 1000 500 700 2000 xxxo ooxx oxox
出力例 1
0 1 1
競技時間の半分の経過時の各プレイヤーの総合得点は、プレイヤー 1 が 2001 点、プレイヤー 2 が 1502 点、プレイヤー 3 が 1703 点です。
プレイヤー 1 は 1 問も解かずとも、他のプレイヤー全員の総合得点を上回っています。
プレイヤー 2 は、例えば問題 4 を解けば総合得点が 3502 点となり、他のプレイヤー全員の総合得点を上回ります。
プレイヤー 3 も、例えば問題 4 を解けば総合得点が 3703 点となり、他のプレイヤー全員の総合得点を上回ります。
入力例 2
5 5 1000 1500 2000 2000 2500 xxxxx oxxxx xxxxx oxxxx oxxxx
出力例 2
1 1 1 1 0
入力例 3
7 8 500 500 500 500 500 500 500 500 xxxxxxxx oxxxxxxx ooxxxxxx oooxxxxx ooooxxxx oooooxxx ooooooxx
出力例 3
7 6 5 4 3 2 0
Score : 250 points
Problem Statement
The programming contest World Tour Finals is underway, where N players are participating, and half of the competition time has passed. There are M problems in this contest, and the score A_i of problem i is a multiple of 100 between 500 and 2500, inclusive.
For each i = 1, \ldots, N, you are given a string S_i that indicates which problems player i has already solved.
S_i is a string of length M consisting of o
and x
, where the j-th character of S_i is o
if player i has already solved problem j, and x
if they have not yet solved it.
Here, none of the players have solved all the problems yet.
The total score of player i is calculated as the sum of the scores of the problems they have solved, plus a bonus score of i points.
For each i = 1, \ldots, N, answer the following question.
- At least how many of the problems that player i has not yet solved must player i solve to exceed all other players' current total scores?
Note that under the conditions in this statement and the constraints, it can be proved that player i can exceed all other players' current total scores by solving all the problems, so the answer is always defined.
Constraints
- 2\leq N\leq 100
- 1\leq M\leq 100
- 500\leq A_i\leq 2500
- A_i is a multiple of 100.
- S_i is a string of length M consisting of
o
andx
. - S_i contains at least one
x
. - All numeric values in the input are integers.
Input
The input is given from Standard Input in the following format:
N M A_1 A_2 \ldots A_M S_1 S_2 \vdots S_N
Output
Print N lines. The i-th line should contain the answer to the question for player i.
Sample Input 1
3 4 1000 500 700 2000 xxxo ooxx oxox
Sample Output 1
0 1 1
The players' total scores at the halfway point of the competition time are 2001 points for player 1, 1502 points for player 2, and 1703 points for player 3.
Player 1 is already ahead of all other players' total scores without solving any more problems.
Player 2 can, for example, solve problem 4 to have a total score of 3502 points, which would exceed all other players' total scores.
Player 3 can also, for example, solve problem 4 to have a total score of 3703 points, which would exceed all other players' total scores.
Sample Input 2
5 5 1000 1500 2000 2000 2500 xxxxx oxxxx xxxxx oxxxx oxxxx
Sample Output 2
1 1 1 1 0
Sample Input 3
7 8 500 500 500 500 500 500 500 500 xxxxxxxx oxxxxxxx ooxxxxxx oooxxxxx ooooxxxx oooooxxx ooooooxx
Sample Output 3
7 6 5 4 3 2 0
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 400 点
問題文
1 から N の番号がついた N 人を横一列に並べる方法のうち、以下の形式の M 個の条件全てを満たすものが存在するか判定してください。
- 条件:人 A_i と人 B_i は隣り合っている
制約
- 2 \leq N \leq 10^5
- 0 \leq M \leq 10^5
- 1\leq A_i < B_i \leq N
- (A_i,B_i) は相異なる
入力
入力は以下の形式で標準入力から与えられる。
N M A_1 B_1 \vdots A_M B_M
出力
条件を満たす並べ方が存在するなら Yes
、存在しないなら No
と出力せよ。
入力例 1
4 2 1 3 2 3
出力例 1
Yes
例えば 4,1,3,2 の順に並べることで全ての条件を満たすことができます。
入力例 2
4 3 1 4 2 4 3 4
出力例 2
No
どのように並べても全ての条件を満たすことはできません。
Score : 400 points
Problem Statement
Determine whether there is a way to line up N people, numbered 1 to N, in a row side by side to satisfy all of the M conditions in the following format.
- Condition: Person A_i and Person B_i are adjacent.
Constraints
- 2 \leq N \leq 10^5
- 0 \leq M \leq 10^5
- 1\leq A_i < B_i \leq N
- All pairs (A_i,B_i) are distinct.
Input
Input is given from Standard Input in the following format:
N M A_1 B_1 \vdots A_M B_M
Output
If there is a way to line up people to satisfy the conditions, print Yes
; if not, print No
.
Sample Input 1
4 2 1 3 2 3
Sample Output 1
Yes
One way to satisfy all the conditions is to line them up in the order 4,1,3,2.
Sample Input 2
4 3 1 4 2 4 3 4
Sample Output 2
No
There is no way to line them up to satisfy all the conditions.
Time Limit: 3 sec / Memory Limit: 1024 MiB
配点 : 500 点
問題文
N 個の都市があり、いくつかの相異なる都市の間は一方通行の直行便によって移動することができます。
どの直行便が存在するかは N 個の長さ N の文字列 S_1,S_2,\ldots,S_N によって表され、
S_i の j 文字目が Y
のとき都市 i から都市 j へ向かう直行便が存在することを、
N
のとき存在しないことを示します。
また、各都市ではお土産が 1 つずつ売られており、都市 i では価値 A_i のお土産が売られています。
次のような問題を考えます。
高橋君は今都市 S におり、いくつかの直行便を乗り継いで(S とは異なる)都市 T に向かおうとしています。
さらに、高橋君は移動する途中で訪れた都市(S,T を含む)において 1 つずつお土産を購入します。
都市 S から都市 T へ向かう経路が複数存在する時、高橋君は次のような経路で移動することを考えています。
- 都市 S から 都市 T に向かう経路のうち、使う直行便の数が最小である。
- さらにそのような経路のうち、購入するお土産の価値の総和が最大である。
高橋君が都市 S から T に直行便を乗り継いで移動することが可能か判定し、 可能な時は高橋君が上の条件をみたすように経路を選んだ時の「使用する直行便の本数」と「お土産の価値の総和」を求めよ。
相異なる都市の組 (U_i,V_i) が Q 個与えられます。
各 1\leq i\leq Q について、S=U_i, T=V_i とした時の上記の問題の答えを出力してください。
制約
- 2 \leq N \leq 300
- 1\leq A_i\leq 10^9
- S_i は
Y
とN
のみからなる長さ N の文字列 - S_i の i 文字目は
N
- 1\leq Q\leq N(N-1)
- 1\leq U_i,V_i\leq N
- U_i\neq V_i
- i\neq j ならば (U_i,V_i)\neq (U_j,V_J)
- N,A_i,Q,U_i,V_i は全て整数
入力
入力は以下の形式で標準入力から与えられる。
N A_1 A_2 \ldots A_N S_1 S_2 \vdots S_N Q U_1 V_1 U_2 V_2 \vdots U_Q V_Q
出力
Q 行出力せよ。
i (1\leq i\leq Q) 行目には、
都市 U_i から都市 V_i に移動することが不可能な時は Impossible
を、
可能な時は上記のように経路を選んだ時の「使用する直行便の本数」と「お土産の価値の総和」をこの順に空白区切りで出力せよ。
入力例 1
5 30 50 70 20 60 NYYNN NNYNN NNNYY YNNNN YNNNN 3 1 3 3 1 4 5
出力例 1
1 100 2 160 3 180
(S,T)=(U_1,V_1)=(1,3) の時について、都市 1 から都市 3 への直行便が存在するため、 使用する直行便としてあり得る最小の値はその直行便を使用した時の 1 本となります。 この時、お土産の価値の総和は A_1+A_3=30+70=100 となります。
(S,T)=(U_2,V_2)=(3,1) の時について、使用する直行便としてあり得る最小の値は 2 本で、 最小値を達成する経路としては都市 3\to 4\to 1 と都市 3\to 5\to 1 の 2 通りが考えられます。 それぞれの経路の時のお土産の価値の総和は 70+20+30=120, 70+60+30=160 なので、 高橋君は後者の経路を選び、この時お土産の価値の総和は 160 となります。
(S,T)=(U_3,V_3)=(4,5) の時について、都市 4\to 1\to 3\to 5 と進んだ時に使用する直行便の本数は最小となり、 この時お土産の価値の総和は 20+30+70+60=180 となります。
入力例 2
2 100 100 NN NN 1 1 2
出力例 2
Impossible
直行便が全く存在しないこともあります。
Score : 500 points
Problem Statement
There are N cities. There are also one-way direct flights that connect different cities.
The availability of direct flights is represented by N strings S_1,S_2,\ldots,S_N of length N each.
If the j-th character of S_i is Y
, there is a direct flight from city i to city j;
if it is N
, there is not.
Each city sells a souvenir; city i sells a souvenir of value A_i.
Consider the following problem:
Takahashi is currently at city S and wants to get to city T (that is different from city S) using some direct flights.
Every time he visits a city (including S and T), he buys a souvenir there.
If there are multiple routes from city S to city T, Takahashi decides the route as follows:
- He tries to minimize the number of direct flights in the route from city S to city T.
- Then he tries to maximize the total value of the souvenirs he buys.
Determine if he can travel from city S to city T using the direct flights. If he can, find the "number of direct flights" and "total value of souvenirs" in the route that satisfies the conditions above.
You are given Q pairs (U_i,V_i) of distinct cities.
For each 1\leq i\leq Q, print the answer to the problem above when S=U_i and T=V_i.
Constraints
- 2 \leq N \leq 300
- 1\leq A_i\leq 10^9
- S_i is a string of length N consisting of
Y
andN
. - The i-th character of S_i is
N
. - 1\leq Q\leq N(N-1)
- 1\leq U_i,V_i\leq N
- U_i\neq V_i
- If i \neq j, then (U_i,V_i)\neq (U_j,V_J).
- N,A_i,Q,U_i, and V_i are all integers.
Input
The input is given from Standard Input in the following format:
N A_1 A_2 \ldots A_N S_1 S_2 \vdots S_N Q U_1 V_1 U_2 V_2 \vdots U_Q V_Q
Output
Print Q lines.
The i-th (1\leq i\leq Q) line should contain
Impossible
if he cannot travel from city U_i to city V_i;
if he can, the line should contain "the number of direct flights" and "the total value of souvenirs" in the route chosen as described above, in this order, separated by a space.
Sample Input 1
5 30 50 70 20 60 NYYNN NNYNN NNNYY YNNNN YNNNN 3 1 3 3 1 4 5
Sample Output 1
1 100 2 160 3 180
For (S,T)=(U_1,V_1)=(1,3), there is a direct flight from city 1 to city 3, so the minimum possible number of direct flights is 1, which is achieved when he uses that direct flight. In this case, the total value of the souvenirs is A_1+A_3=30+70=100.
For (S,T)=(U_2,V_2)=(3,1), the minimum possible number of direct flights is 2. The following two routes achieve the minimum: cities 3\to 4\to 1, and cities 3\to 5\to 1. Since the total value of souvenirs in the two routes are 70+20+30=120 and 70+60+30=160, respectively, so he chooses the latter route, and the total value of the souvenirs is 160.
For (S,T)=(U_3,V_3)=(4,5), the number of direct flights is minimum when he travels cities 4\to 1\to 3\to 5, where the total value of the souvenirs is 20+30+70+60=180.
Sample Input 2
2 100 100 NN NN 1 1 2
Sample Output 2
Impossible
There may be no direct flight at all.
Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 500 点
問題文
H 行 W 列のグリッド型のスケート場があります。上から i 行目、左から j 行目のマスを (i,j) で表します。
スケート場には N 個の障害物があり、i 個目の障害物は (X_i,Y_i) に置かれています。
高橋君は 1 回の移動において、上下左右いずれかの方向を選んで、障害物に当たるまで進み続けます。
障害物に当たるとその 1 つ手前のマスで停止します。
なお、スケート場の周りは崖になっており、障害物に当たらないような移動は禁止とします。
高橋君ははじめ (s_x,s_y) にいて、何回か移動することで (g_x,g_y) で停止したいと考えています。
(g_x,g_y) へ辿り着くには最小で何回の移動が必要ですか?辿り着けないときはその旨を伝えてください。
制約
- 1\leq H \leq 10^9
- 1\leq W \leq 10^9
- 1\leq N \leq 10^5
- 1\leq s_x,g_x\leq H
- 1\leq s_y,g_y\leq W
- 1\leq X_i \leq H
- 1\leq Y_i \leq W
- (s_x,s_y)\neq (g_x,g_y)
- (s_x,s_y)\neq (X_i,Y_i)
- (g_x,g_y)\neq (X_i,Y_i)
- i\neq j ならば、(X_i,Y_i)\neq (X_j,Y_j)
- 入力は全て整数である
入力
入力は以下の形式で標準入力から与えられる。
H W N s_x s_y g_x g_y X_1 Y_1 X_2 Y_2 \vdots X_N Y_N
出力
(g_x,g_y) へ辿り着くには最小で何回の移動が必要か出力せよ。
ただし、辿り着けないならば -1
と出力せよ。
入力例 1
7 8 7 3 4 5 6 1 4 2 1 2 8 4 5 5 7 6 2 6 6
出力例 1
4
図は、(s_x,s_y) を S
で、(g_x,g_y) を G
で表しています。
(3,4)\rightarrow(2,4) \rightarrow(2,2) \rightarrow(5,2) \rightarrow(5,6) と移動すると、4 回の移動で (g_x,g_y) に辿り着くことができます。
入力例 2
4 6 2 3 2 3 5 4 5 2 5
出力例 2
-1
(g_x,g_y) で停止する必要があります。
通過しただけでは (g_x,g_y) へ辿り着いたとみなされないことに注意してください。
入力例 3
1 10 1 1 5 1 1 1 7
出力例 3
-1
左を選んで進むと、高橋君は (g_x,g_y) を通過したのちに崖に落ちてしまいます。
スケート場の周りは崖になっており、障害物に当たらないような移動は禁止されていることに注意してください。
Score : 500 points
Problem Statement
There is a skating rink represented by a grid with H horizontal rows and W vertical columns. Let (i, j) denote the square at the i-th row from the top and j-th column from the left.
The skating rink has N obstacles. The i-th obstacle is placed at (X_i,Y_i).
In a single move, Takahashi chooses one of the four directions, up, down, left, or right, and keeps moving until he hits an obstacle.
When he hits an obstacle, he stops at the square right before the obstacle.
Since the skating rink is surrounded by cliffs, it is prohibited to start a move in which he will never hit an obstacle.
Takahashi is initially at (s_x,s_y). He wants to make some number of moves to stop at (g_x,g_y).
Find the minimum number of moves required to end up at (g_x, g_y). If it is not possible, report the fact.
Constraints
- 1\leq H \leq 10^9
- 1\leq W \leq 10^9
- 1\leq N \leq 10^5
- 1\leq s_x,g_x\leq H
- 1\leq s_y,g_y\leq W
- 1\leq X_i \leq H
- 1\leq Y_i \leq W
- (s_x,s_y)\neq (g_x,g_y)
- (s_x,s_y)\neq (X_i,Y_i)
- (g_x,g_y)\neq (X_i,Y_i)
- If i\neq j, then (X_i,Y_i)\neq (X_j,Y_j).
- All values in input are integers.
Input
Input is given from Standard Input in the following format:
H W N s_x s_y g_x g_y X_1 Y_1 X_2 Y_2 \vdots X_N Y_N
Output
Print the minimum number of moves required to end up at (g_x,g_y).
If it is impossible to end up there, print -1
.
Sample Input 1
7 8 7 3 4 5 6 1 4 2 1 2 8 4 5 5 7 6 2 6 6
Sample Output 1
4
In the figure, (s_x,s_y) is denoted by S
and (g_x,g_y) is denoted by G
.
By moving as (3,4)\rightarrow(2,4) \rightarrow(2,2) \rightarrow(5,2) \rightarrow(5,6), he can end up at (g_x,g_y) with 4 moves.
Sample Input 2
4 6 2 3 2 3 5 4 5 2 5
Sample Output 2
-1
He must stop at (g_x,g_y).
Note that just passing through (g_x,g_y) is not considered to be ending up at the goal.
Sample Input 3
1 10 1 1 5 1 1 1 7
Sample Output 3
-1
If he chooses to move to the left, Takahashi will fall down the cliff after passing through (g_x,g_y).
Note that it is prohibited to start a move in which he will never hit an obstacle, as the skating rink is surrounded by cliffs.