AtCoder Beginner Contest 257 メモ(A-C)
今回の結果
2AC
C問題は落ち着いて解けばACできる問題だったかな。
Difficulty 600台がまだコンテスト中にACできない。
A - A to Z String 2
Difficulty: 22
問題文
A
を B
を Z
を
制約
1≤N≤100 1≤N≤N×26 - 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを出力せよ。
入出力例
入力例 1
1 3
出力例 1
C
入力例 2
2 12
出力例 2
F
参加中に考えたこと
計算で出来るだろうと思ってやったらWA出してしまった。xを-1するところが間違えててそこを見直してもいいけど、別の方法を考えた。
文字列の最大長が2600文字しかないし、実際に文字列作って配列の番号を指定して出力される方法のほうが確実かと思い、その方法に書き換えてACした。
B - 1D Pawn
Difficulty: 91
問題文
また、
これらに対して、
左から
そうでない時、左から
制約
1≤K≤N≤200 1≤A_1<A_2<\cdots<A_K≤N 1≤Q≤1000 1≤L_i≤K - 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
出力
入出力例
入力例 1
5 3 5
1 3 4
3 3 1 1 2
出力例 1
2 4 5
入力例 2
2 2 2
1 2
1 2
出力例 2
1 2
入力例 3
10 6 9
1 3 5 7 8 9
1 2 3 4 5 6 5 6 2
出力例 3
2 5 6 7 9 10
参加中に考えたこと
問題文にある説明の通りの動きをするコードを書いて終わり。
C - Robot Takahashi
Difficulty: 678
問題文
子供と大人があわせて
それぞれの人が子供か大人かは、0
と 1
からなる長さ 0
であるとき 1
であるとき
ロボットである高橋君に対して実数
実数
制約
1≤N≤2×10^5 -
はS 0
と1
からなる長さ の文字列N 1≤W_i ≤10^9 -
は整数N,W_i
入力
入力は以下の形式で標準入力から与えられる。
出力
入出力例
入力例 1
5
10101
60 45 30 40 80
出力例 1
4
入力例 2
3
000
1 2 3
出力例 2
3
入力例 3
5
10101
60 50 50 50 60
出力例 3
4
参加中に考えたこと
ただ、
あとこの類の問題はソートをするのが定石に見えたのでmapにデータを入れておいた。
単純に
そこでソート済であることを利用して、左から順番に見ていくことを考えた。
ある
ここで悩んだのが、データをどう持たせるかという点。
大人と子供を別々の配列に持つ方法と、pairで持たせる方法とでどっちが楽にできそうか?
配列を2つ持つほうで進めていったが、バグが直せずタイムアップ。
考察・感想
方針は恐らくあっていると思うので、実装の仕方を考えなおしてACできた。
2つの配列を同時に見るのところのコードがややこしくなってたので、大人・子供の配列とは別に、ループで使う用の配列を持つことにした。
例1では以下のようなデータを作る。
配列1:大人の体重データ
[30,1], [60,1], [80,1]
配列2:子供の体重データ
[40,1], [45,1]
配列3:ループ処理用
[0,30,40,45,60,80]
※0を入れないと、全員大人の場合に正しい答えが出ない
これと、大人の人数、子供の人数、ループ処理中に数えるための大人の人数、子供の人数の4つの変数を持っておく。
配列3を使って次の値に進む度に、その値にある大人の人数と子供の人数を追加していくことで、簡単な計算で正しく判定できる人数を計算できる。
計算量はソートしているので
Discussion