結果
| 問題 | No.3110 Like CPCTF? |
| コンテスト | |
| ユーザー |
forest3
|
| 提出日時 | 2025-06-05 22:55:48 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,145 bytes |
| コンパイル時間 | 2,075 ms |
| コンパイル使用メモリ | 178,692 KB |
| 実行使用メモリ | 7,844 KB |
| 最終ジャッジ日時 | 2025-06-05 22:55:51 |
| 合計ジャッジ時間 | 3,057 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (int i = a; i < b; i++)
using ll = long long;
int main(){
int N;
string s;
cin >> N >> s;
map<char, int> mp;
vector<map<char, int>> mpv(N);
for(int i = N - 1; i >= 0; i--) {
mp[s[i]]++;
mpv[i] = mp;
}
vector<vector<int>> c(26);
rep(i, 0, N) {
int n = s[i] - 'A';
c[n].push_back(i);
}
ll ans = 0;
rep(i, 0, 26) {
int sz = c[i].size();
if(sz < 2) continue;
char c2 = (char)(i + 'A');
rep(j, 0, sz) {
rep(k, j + 1, sz) {
int l = c[i][j];
int r = c[i][k];
if(r - l < 2 || r + 1 >= N) continue;
map<char, int> tmp = mpv[r + 1];
using P = pair<char, int>;
vector<P> p;
for(auto it = tmp.begin(); it != tmp.end(); it++) {
char f = it->first;
if(f == c2) continue;
p.push_back(P(f, it->second));
}
int sz = p.size();
rep(m, l + 1, r) {
if(s[m] == c2) continue;
rep(n, 0, sz) {
if(p[n].first == s[m]) continue;
rep(o, n + 1, sz) {
if(p[o].first == s[m]) continue;
ans += p[n].second * p[o].second;
}
}
}
}
}
}
cout << ans << endl;
}
forest3