0.はじめに
最近成績が振るわない今日この頃。
今回は特に調子が上がらないうえ、FireFoxでの
コードテスト結果の出力表示がされなかったりと
あわやAのみ正解となりそうな感じでした。
その後調子を戻し、久々のDまで正解できました。
レートも+14で721となりました。
1. A - Conflict
TとSを一文字ずつ比べ、両方ともoの時Yesを
出力して終了。
最後まで両方ともoの列が無ければ
No出力して終了でACとなりました。
https://atcoder.jp/contests/abc409/submissions/66512463
2.B - Citation
B問題史上最もてこずった問題。
制限が緩いので力技でもなんとかなりそうでしたが
その力技の方式すら思いつかずてこずりました。
ACをもらった今でも何で解けたのかが分からない位ですが
1時間近くかけてやっと解けました。
【考え方】
1)リストAを大きい順に並べ一つずつカウントしながら見ていく
-1.リストAの値とカウントが一緒の場合その値と同じ数の値が存在し
かつ、後ろから見ている=最大値となるのでリストの値をXとして出力して終了
-2.リストAの値よりもカウントが大きかった場合
→例、5 5 1 1 1
3つ目の1をチェックするタイミングでカウント3でリストAの値が1となる
この場合は、カウントの値がそのままXとなるので出力して終了
-3.上記以外の場合、カウント数まだはXとして補償されるので回答用項目にansを
セットして保持
・上記の流れで終了となっていない場合は、ansの値を出力して終了
→例、6 6 6 6 6 のような場合、カウントは5でチェックが終わるので
Xの値は5となる。
https://atcoder.jp/contests/abc409/submissions/66559197
3.C - Equilateral Triangle
ややこしい図形問題かと思いきや、よくよく読めばそれほどでもない問題でした。
【考え方】
・整数のみの問題なのでLが3の倍数でない場合は条件を満たす組はないので0を出力して終了
・3点間の距離はLを3で割った値なので、XにL÷3をセットして保持
・円周上の各点の位置を保持するため、Dを加算してD2に保持していき
別リストPに点毎の円周上の位置を保持(D2%L)
・Counter関数で円周上の位置毎の点の数を集計
・円周上の0からX未満の点を起点(P1)に、P2(P1+X)、P3(P2+X)の
3つの位置の点の数を掛け合わせて足し込んでいく。
・最後に集計した数を出力して終了
https://atcoder.jp/contests/abc409/submissions/66567826
4.D - String Rotation
残り20分で取り掛かったのであきらめムードでしたが
意外と簡単な問題だったので行けました。
【考え方】
・先頭から文字列を見ていき、次の文字より大きい文字があったら
そこを起点に入れ替える→入れ替える文字をKとしてキープする
・入れ替え先は、入れ替えた文字より後ろの文字で、Kより大きい文字
があった場合に、Kを差し込む
・最後まで差し込む位置が無かった場合は、Kを後ろにつける
https://atcoder.jp/contests/abc409/submissions/66577622
以上