Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

トヨタシステムズプログラミングコンテスト2022(AtCoder Beginner Contest 279)

4完

各問題

A - wwwvvvvvv

一文字ずつ確認して v なら 1 を、w なら 2 を足していけばよいです。

B - LOOKUP

お使いの言語の、文字列検索の関数を使えばよいでしょう。

実は私はc++の文字列検索がよくわかっておらず、二重ループを書いて一文字ずつ確認していきました。

// n は S の長さ、m は T の長さ
for (int i = 0; i < n - m + 1; i++) {
    bool ok = true;
    for (int j = 0; j < m; j++) {
        if (S[i + j] != T[j]) ok = false;
    }
}

こういう要領で。

C - RANDOM

行単位の文字列配列で渡されるものを列単位の文字列配列に置き換えて、Sについての文字列の出現数とTについての文字列の出現数が一致すれば並べ替えて等しくすることが可能です。

D - Freefall

操作回数は単純な三分探索で「実数で」求めることが可能ですが、操作の回数は実際には整数単位ですから、求めた解の近傍の整数で最も時刻が早くなるようなものを使用して時刻を再計算する必要があります。

単に三分探索で求めた答えが微妙にずれてるのを見てしばらく悩んでしまいました...。

E - Cheating Amidakuji

よくわからず...。

F - BOX

Union-Find かと思うのですが、うまくまとまらず。

まとめ

水パフォキープでも、じわじわレート削られるのつらい...。