AtCoder Beginner Contest 268 メモ(A-D)
今回の結果
3AC
C問題まで解けてなんとか緑パフォとれた。
C問題をもっと早く解けるようにしたい。
A - Five Integers
Difficulty: 16
問題文
与えられる
制約
0 \leq A, B, C, D, E \leq 100 - 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを出力せよ。
入出力例
入力例 1
31 9 24 31 24
出力例 1
3
入力例 2
0 0 0 0 0
出力例 2
1
参加中に考えたこと
連想コンテナのsetを使えば重複なしの要素になるので数を数えるのは簡単。
考察・感想
普通の配列に入れる方法も後から思い出した。
unique関数を使ってできるけど、ソートを挟む必要があるから少し手間。
B - Prefix?
Difficulty: 26
問題文
英小文字のみからなる
接頭辞とは
長さ
制約
-
とS はそれぞれ英小文字のみからなる長さがT 以上1 以下の文字列100
入力
入力は以下の形式で標準入力から与えられる。
出力
Yes
を、そうでない場合は No
を出力せよ。ジャッジは英小文字と英大文字を厳密に区別することに注意せよ。
入出力例
入力例 1
atco
atcoder
出力例 1
Yes
入力例 2
code
atcoder
出力例 2
No
入力例 3
abc
abc
出力例 3
Yes
入力例 4
aaaa
aa
出力例 4
No
参加中に考えたこと
接頭辞=先頭からしかみないからループを使う必要はない。
問題文に No
を返して終了するようにした。
考察・感想
解説でも最初に
C - Chinese Restaurant
Difficulty: 676
問題文
回転テーブルの周りに人
あなたは次の操作を
- 回転テーブルを反時計回りに
周の1 だけ回す。これによって、(この操作の直前に)人\frac{1}{N} の目の前にあった料理は人i の目の前に移動する。(i+1) \bmod N
操作を完了させた後において、人
喜ぶ人数の最大値を求めてください。
a mod m とは
整数
制約
3 \leq N \leq 2 \times 10^5 0 \leq p_i \leq N-1 -
ならばi \neq j p_i \neq p_j - 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを出力せよ。
入出力例
入力例 1
4
1 2 0 3
出力例 1
4
入力例 2
3
0 1 2
出力例 2
3
入力例 3
10
3 9 6 1 7 2 8 0 5 4
参加中に考えたこと
まず問題文を理解するのに時間を要した。
よく分からないので、入力例2を実際にスプレッドシート上でシミュレーションしてみる。
入力例を見てどうなると喜ぶのかを確認したが、これは「人
全探索では
回転させた状態を計算するのはなく、最初の状態だけを使って求めたい。
両隣のは一旦置いておいて、入力例2で最初の状態でそれぞれ料理
距離は一定方向にしか回せないので、
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
3 | 9 | 6 | 1 | 7 | 2 | 8 | 0 | 5 | 4 | |
距離 | 3 | 8 | 4 | 8 | 3 | 7 | 2 | 3 | 7 | 5 |
これを1回回転させると、
1回操作をした後
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
4 | 3 | 9 | 6 | 1 | 7 | 2 | 8 | 0 | 5 | |
距離 | 4 | 2 | 7 | 3 | 7 | 2 | 6 | 1 | 2 | 6 |
この距離の情報を使って求められるのではと考えた。
距離の値と回数を持たせる。
初期状態でそれぞれの距離の数を数えると、以下のようになる。
距離 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
回数( |
0 | 0 | 1 | 3 | 1 | 1 | 0 | 2 | 2 | 0 |
ここで両隣の条件を追加して、
円環の処理は同じ値を2回繋げて処理。
これが答えになる。
i=3の時が最大なので、3回操作を行うと最大値の5になる事もわかる。
3回操作をした後
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 5 | 4 | 3 | 9 | 6 | 1 | 7 | 2 | 8 | |
距離 | 0 | 4 | 2 | 0 | 5 | 1 | 5 | 0 | 4 | 9 |
判定 | 〇 | 〇 | 〇 | 〇 | 〇 |
考察・感想
探り探りで導いた解き方だから、方針はあってそうだけどもう少しスマートには書くことはできたかも。
自分にとっては問題文を見てどういった手法を使うかがすぐに分からなかったので、考えるのに時間を多く費やしたけどACできてよかった。
D - Unique Username
Difficulty: 1309
問題文
高橋君はあるサービスで使うユーザー名を決めるのに困っています。彼を助けるプログラムを書いてください。
以下の条件をすべて満たす文字列
-
個の文字列N を好きな順番で並べたものをS_1,S_2,\ldots,S_N とする。そして、S_1', S_2', \ldots,S_N' 、(S_1' 個以上の1 _
)、 、(S_2' 個以上の1 _
)、 、(\ldots 個以上の1 _
)、 をこの順番で連結したものをS_N' とする。X -
の文字数はX 以上3 以下である。16 -
はX 個の文字列M のいずれとも一致しない。T_1,T_2,\ldots,T_M
ただし、条件をすべて満たす文字列 -1
と出力してください。
制約
1 \leq N \leq 8 0 \leq M \leq 10^5 -
は整数N,M 1 \leq |S_i| \leq 16 N-1+\sum{|S_i|} \leq 16 -
ならばi \neq j S_i \neq S_j -
は英小文字のみからなる文字列S_i 3 \leq |T_i| \leq 16 -
ならばi \neq j T_i \neq T_j -
は英小文字とT_i _
のみからなる文字列
入力
入力は以下の形式で標準入力から与えられる。
出力
条件をすべて満たす文字列 -1
を出力せよ。
答えが複数存在する場合、どれを出力しても良い。
入出力例
入力例 1
1 1
chokudai
chokudai
出力例 1
-1
入力例 2
2 2
choku
dai
chokudai
choku_dai
出力例 2
dai_choku
入力例 3
2 2
chokudai
atcoder
chokudai_atcoder
atcoder_chokudai
出力例 3
-1
入力例 4
4 4
ab
cd
ef
gh
hoge
fuga
____
_ab_cd_ef_gh_
出力例 4
ab__ef___cd_gh
参加中に考えたこと
ただ、_
が文字列中に入る個数のパターンが多すぎてこれをどう扱うかが分からない。
恐らく、 ab__cd_ef____gh
のみ条件を満たし、他の組み合わせが全て
_
をどこに何個入れるかを組み合わせる方法が思いつかない。
考察・感想
_
の扱いについて後から考えてみたけど、組み合わせを使ってできるか試してみたもののうまくいかず解説を見る。
DFSで全探索して計算量は足りるのか。
組み合わせは next_permutation 一択かと思ってたけど、フラグを使う方法はそういう方法もあるのかと感心。
Discussion