0.はじめに
冠のないノーマル開催。
問題の難易度はいつもより高かったような気がします。
Dが何とかクリアできましたが、WA2回の為か順位は伸びず
レートも±0でした。
1.A - Zero Sum Game
最初はだれがだれに勝ったとかシミュレーションしないといけないのか?と
思いましたが、A問題でそれはないなと思い返し解法にたどり着きました。
【考え方】
・全員の点数の合計は0になる。
・一人分の分からずそれ以外の人の点数はわかる
・与えられた点数の合計を0から引けば、答えとなる人の点数が分かる
https://atcoder.jp/contests/abc349/submissions/52298533
2.B - Commencement
なかなかややこしい問題。
問題の意図をつかむのが難しかったですが
プログラムを作る過程で意外と単純な問題なことが分かりました。
【考え方】
・文字列Sについて文字ごとの出現数を数え
辞書Dにキー:文字、値:出現数をセット
・辞書Dの値を順に読み込み値毎の個数を数え
辞書D2にキー:出現数、値:個数をセット
・辞書D2の値がすべて2であればYes、そうでなければNoを
出力して終了
https://atcoder.jp/contests/abc349/submissions/52305984
3.C - Airport Code
一見、Bよりも簡単な問題。
といいつつ、記述ミスでWA1個を出してしまいました。
検索機能等を使えばもっと単純にできそうでしたが
まぁ素直に組んでみました。
【実装】
1.フラグをC1~C3まで準備
2.文字列Sはすべて大文字に変換しておく
3.文字列Sを先頭から見ていく
-1.C1~C3の値で以下の各処理
-1.C1が0の時
今見ているSの文字とTの1文字目を比較し同じなら
C1に1をセット
-2.C1が1でC2が0の時(1のelif)
今見ているSの文字とTの2文字目を比較し同じなら
C2に1をセット
Tの3文字目がXなら合わせてC3に1をセット
-3.C1が1でC2が1の時(1、2のelif)
今見ているSの文字とTの3文字目を比較し同じなら
C3に1をセット
-2.C3が1の時Yesを出力して終了
4.文字列Sのチェック後C3が1にならなければNoを出力して終了
https://atcoder.jp/contests/abc349/submissions/52324162
4.D - Divide Interval
初見ではあきらめて、後の問題を見に行きましたが
そっちも無理そうだったのであきらめて取り掛かりました。
のちに解説を見たところセグメント木を使うようなことが書いて
ありましたがそこまで複雑なことをしないで解けました。
(翌日には私の解法と似た感じ(で洗練された)のが追加されてました)
例題を見たりしていくうちに、考え方はわかったので
それに従って解いていきました。
【考え方】
1.分割の左の数字が奇数なら、右の数字は次の数までしか分けられない
2.偶数の場合、2でS回割り切れる場合割り切った後をjとすると
分割は、i(0~S)とし、2のi乗×(2の(S-i)乗×j+1)のいずれかになる
3.分割するときには、できるだけ大きい値で分割する考え方で
問題ない
4.分割の左の数字が0の場合は右の数字は2のN乗ならなんでもOK
【実装】
1.L,Rを入力
2.now:現在作成しようとしている数列の左側の数にLをセット
3.回答を格納するリストansを空で定義
4.nowが0の時
-1.pに1をセット
-2.p*2がR以下の間、pに2をかけていく
-3.ansに(now,p)を追加
-4.nowにpをセット
5.nowがRとイコールになるまで以下を繰り返す
-1.nowが奇数の時
-1.ansに(now,now+1)を追加
-2.nowに,now+1をセット
-2.nowが偶数の時
-1.ansに(now,now+1)を追加
-2.ansに(now,now+1)を追加
-3.s(nowを2で何回割れるか)に0をセット
-4.j(now2でs回割った後の商)にnowをセット
-5.flgに1をセット
-6.flgが1の間以下の処理を繰り返す
-1.jを2で割った値をjにセット
-2.sに1加算
-3.jが2で割り切れないか、jが0の時、flgに0にする
-7.iをsから0まで1ずつ減らして繰り返す
-1.2のi乗×j+1がR以下の時
-1.rnowに2のi乗×j+1をセットしてブレイク
-2.2のi乗×j+1がRより大きい時
-1.jに2を掛けてjにセット
-8.ansに(now,rnow)を追加
-9.nowにrnowをセット
6.len(ans)と中の値を出力して終了
https://atcoder.jp/contests/abc349/submissions/52348766
以上