0.はじめに
トヨタコンテストなので、難易度高いのかなーと思ったらやっぱり高かったです。
Bあたりから難易度高めでCは諦めかけましたが何とかクリア。
D以降は時間的にも気力的にも難易度的にも手が付けられませんでした。。
1.A - First ABC
リストで、ABCそれぞれに、文字列内に出現したかフラグを持ち
文字列を先頭からチェック。
ABCどれかが発生したらフラグを立て、フラグのリスト合計が1になったら
アドレスを出力して終了としてACでした。
https://atcoder.jp/contests/abc311/submissions/43830264
2.B - Vacation Together
N、Dの最大がそれぞれ100だし、B問題なのでTLEは意識しないで行けそうと判断。
最初にna(現在チェック中の日の範囲で連続o日数を保持)とans(最大連続o日数)を0で初期化
一日目から、全員がoの日をチェックしていき、全員oの場合、naに+1
全員がoでない日が出てきたら、ansとnaのうち大きい方をansに保持しnaをクリア
という感じで実装したところ、例題3がうまくいかない。
上記実装だと、最終日がすべてoで、naが最高値になる場合に
ansが更新されないので、ループを抜けた後に最終判定のロジックを
追加し、ACとなりました。
https://atcoder.jp/contests/abc311/submissions/43840921
3.C - Find it!
タイトルを見ただけでUnion-Find木を使うんだろうなと思いました。
閉路判定は、Union-Find木で根を保持しておいて
これからつなごうとしている頂点が同じ根の時閉路となる
という前に学んだ知識を活用。
辺を一つずつUnionFind木と、有方辺を辞書にキー始点、値終点として
登録していき、追加する辺で、閉路判定がされた場合に
その終点で、辞書を検索
得た値でまた辞書を検索していき
最終的に閉路判定がされた始点まで戻ってくるので
その過程を出力することでAC頂けました。
https://atcoder.jp/contests/abc311/submissions/43861917
以上