AtCoder Beginner Contest 263 メモ(A-D)
今回の結果
3AC
C問題、苦戦したけどなんとかACできた。
D問題を解けるようになるよりも、安定かつ高速にC問題を解けるようにするほうが目先のRatingは上げやすいのかも。
A - Full House
Difficulty: 27
問題文
この
- 同じ数が書かれたカード
枚と、別の同じ数が書かれたカード3 枚からなる。2
制約
1 \leq A,B,C,D,E\leq 13 -
全てが同じ値ではないA,B,C,D,E - 入力は全て整数
入力
入力は以下の形式で標準入力から与えられる。
出力
フルハウスである場合 Yes
を、そうでないとき No
を出力せよ。
入力例 1
1 2 1 2 1
出力例 1
Yes
入力例 2
12 12 11 1 2
出力例 2
No
参加中に考えたこと
入力が5つもあるのか。
変数のままだと並び替えが面倒だし、配列に入れてソートしてしまおう。
そして、フルハウスの条件を満たしているかの判定をすればOK、と思ったがWA出してしまった。
3:2と2:3の2パターンあるのが漏れてた。。
考察・感想
ソート済であれば同じ数が3枚のほうは真ん中は見る必要はないですね。
B - Ancestor
Difficulty: 136
問題文
人
人
制約
2 \le N \le 50 1 \le P_i < i(2 \le i \le N) - 入力は全て整数。
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを整数として出力せよ。
入力例 1
3
1 2
出力例 1
2
入力例 2
10
1 2 3 4 5 6 7 8 9
出力例 2
9
参加中に考えたこと
自分の親がどれかの配列を持たせて、あとは人
考察・感想
解説にDP使う解法とかあるけど、B問題では難しすぎないかな。。
C - Monotonically Increasing
Difficulty: 298
問題文
長さ
注記
ある
- ある整数
が存在し、i(1 \le i \le N) である全ての整数1 \le j < i に対しj が成り立ち、かつA_j=B_j が成り立つ。A_i < B_i
ある整数列
- 全ての整数
に対しi(1 \le i \le N-1) が成り立つ。A_i < A_{i+1}
制約
1 \le N \le M \le 10 - 入力は全て整数。
入力
入力は以下の形式で標準入力から与えられる。
出力
条件を満たす整数列を一行に一つずつ、辞書順に出力せよ(出力例を参考にせよ)。
入力例 1
2 3
出力例 1
1 2
1 3
2 3
入力例 2
3 5
出力例 2
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
参加中に考えたこと
方針は早々に決まったものの、作成する関数のベースケースと再帰の部分の組み方に苦戦した。
時間をかなり費やして焦りもあったがなんとか解けて安堵。
考察・感想
これで灰Diffなんですね。再帰とか茶Diffかと思ってたので少し驚いた。
Pythonだと関数使って一発らしい。
D - Left Right Operation
Difficulty: 1016
問題文
長さ
あなたは以下の連続する操作をちょうど一度だけ行います。
- 整数
を選ぶ。x\ (0\leq x \leq N) としてx を選んだ場合何もしない。0 としてx 以上の整数を選んだ場合、1 をそれぞれA_1,A_2,\ldots,A_x で置き換える。L - 整数
を選ぶ。y\ (0\leq y \leq N) としてy を選んだ場合何もしない。0 としてy 以上の整数を選んだ場合、1 をそれぞれA_{N},A_{N-1},\ldots,A_{N-y+1} で置き換える。R
操作後の
制約
1 \leq N \leq 2\times 10^5 -10^9 \leq L, R\leq 10^9 -10^9 \leq A_i\leq 10^9 - 入力は全て整数
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを出力せよ。
入力例 1
5 4 3
5 5 0 6 3
出力例 1
14
入力例 2
4 10 10
1 2 3 4
出力例 2
10
入力例 3
10 -5 -3
9 -6 10 -1 2 10 -1 7 -15 5
出力例 3
-58
参加中に考えたこと
エラーになるケースが分からずタイムアップ。
考察・感想
時間を置いて再度解いてもACできなかったので解説を読み、再度考えなおして解いた。
まず連続する操作の片方のみであれば、
なお、
では
入力例の1と2を表にすると以下のようになる。
入力例1
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
5 | 5 | 0 | 6 | 3 | |
4 | 8 | 8 | 14 | 17 | |
15 | 11 | 6 | 6 | 3 | |
15 | 14 | 14 | 17 | 17 |
この表より、最小値の14が答えになる。
入力例2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
1 | 2 | 3 | 4 | |
1 | 3 | 6 | 10 | |
10 | 9 | 7 | 4 | |
10 | 10 | 10 | 10 |
この表より、
但し、上の表において
f(i) + g(i+1) \enspace [0<i<N-1] f(N-1) g(0)
以上3つのうちの最小値が答えになる。
3つのパターンに分ける代わりに
これを入力例1を使って表すと以下のようになり、やはり答えは14になる。
0 | 1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|---|
0 | 5 | 5 | 0 | 6 | 3 | 0 | |
0 | 4 | 8 | 8 | 14 | 17 | 0 | |
0 | 15 | 11 | 6 | 6 | 3 | 0 | |
15 | 15 | 14 | 14 | 17 | 17 | 17 |
こっちのほうが場合分けの処理が減るのでコードは少しすっきりする。
Discussion