Official

B - A..B..C Editorial by yuto1115

解説

三重の for 文等を用いて \((i,j,k)\ (1\leq i<j<k\leq|S|)\) の組を全探索し、それぞれの組について条件を満たすかどうか判定して、条件を満たすものの数を数えればよいです。

具体的な実装方法については、下記の実装例 (C++, Python) を参考にしてください。

Bonus (ABC-C 相当): \(O(|S|^2)\) で解いてください。

Bonus+ (ABC-F 相当): \(O(|S|\log^2 |S|)\) で解いてください。

実装例 (C++) :

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    int n = s.size();
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int k = j + 1; k < n; k++) {
                if (j - i == k - j and s[i] == 'A' and s[j] == 'B' and s[k] == 'C') ++ans;
            }
        }
    }
    cout << ans << endl;
}

実装例 (Python) :

s = input()
n = len(s)
ans = 0

for i in range(n):
  for j in range(i + 1, n):
    for k in range(j + 1, n):
      if j - i == k - j and s[i] == 'A' and s[j] == 'B' and s[k] == 'C':
        ans += 1
        
print(ans)

posted:
last update: