Toy と帽子と ADP BE

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

A. Angry Students (Codeforces Round #612 Div. 2)

問題

https://codeforces.com/contest/1287/problem/A

問題概要

PとAからなる文字列がある。Aの右にPがある場合、1秒後にPはAに変わる。これを毎秒繰り返した時、最後にPがAに変わるのは何秒後か?

解説

AがPを侵食していくわけですが、Aの右に隣接するPしか影響を受けないためPがn個並んでいるものがすべてAに変わるためにはn秒かかります。

よって、文字列中で、連続するPの個数のうちで最大のものが答えになります。ただし、Pが文字列の左端にある場合、より左にあるAは存在しないので影響を受けません。なので、集計の対象となるのは一番左にあるAの右側だけとなります。

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        string s;
        cin >> n >> s;
        int ans = 0;
        int c = 0;
        bool b = false;
        for (int i = 0; i < n; i++) {
            if (s[i] == 'A') {
                b = true;
                ans = max(ans, c);
                c = 0;
            } else {
                if (b) c++;
            }
        }
        ans = max(ans, c);
        cout << ans << endl;
    }
}

余談

サンプルの文字列がPPAPなので、うっかりピコ太郎を思い出してしまったのは自分だけじゃないはず・・・。