提出 #75268544
ソースコード 拡げる
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
typedef long long ll;
#define REP(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i)
#define FOR(i, a, b) for (int i = (a), i##_len = (b); i <= i##_len; ++i)
#define REV(i, a, b) for (int i = (a); i >= (b); --i)
int main() {
int n;
cin >> n;
string s;
cin >> s;
vector<int> sum_a(n+1,0);
vector<int> sum_b(n+1,0);
vector<int> sum_c(n+1,0);
REP(i,n) {
if (s[i] == 'A')sum_a[i+1] = sum_a[i] + 1;
else sum_a[i+1] = sum_a[i];
if (s[i] == 'B')sum_b[i+1] = sum_b[i] + 1;
else sum_b[i+1] = sum_b[i];
if (s[i] == 'C')sum_c[i+1] = sum_c[i] + 1;
else sum_c[i+1] = sum_c[i];
}
map<int, int> mp_a_to_b; // a-b
map<int, int> mp_a_to_c; // a-c
map<int, int> mp_b_to_c; // b-c
map<pair<int,int>,int> mp_pair_1; // a-b,a-c
map<pair<int,int>,int> mp_pair_2; // a-b,b-c
map<pair<int,int>,int> mp_pair_3; // a-c,b-c
map<tuple<int,int,int>,int> mp_tuple; // a-b,a-c,b-c
ll sum = n;
sum = sum * (n + 1) / 2;
// 初期値
mp_a_to_b[0]++;
mp_a_to_c[0]++;
mp_b_to_c[0]++;
mp_pair_1[make_pair(0,0)]++;
mp_pair_2[make_pair(0,0)]++;
mp_pair_3[make_pair(0,0)]++;
mp_tuple[make_tuple(0,0,0)]++;
REP(i,n){
int a_to_b = sum_a[i+1] - sum_b[i+1];
int a_to_c = sum_a[i+1] - sum_c[i+1];
int b_to_c = sum_b[i+1] - sum_c[i+1];
// A=BまたはB=CまたはA=Cの数
ll sub = mp_a_to_b[a_to_b] + mp_a_to_c[a_to_c] + mp_b_to_c[b_to_c]
- mp_pair_1[make_pair(a_to_b,a_to_c)] - mp_pair_2[make_pair(a_to_b,b_to_c)] - mp_pair_3[make_pair(a_to_c,b_to_c)]
+ mp_tuple[make_tuple(a_to_b,a_to_c,b_to_c)];
// printf("%d:%lld\n",i+1,sub);
sum -= sub;
mp_a_to_b[a_to_b]++;
mp_a_to_c[a_to_c]++;
mp_b_to_c[b_to_c]++;
mp_pair_1[make_pair(a_to_b,a_to_c)]++;
mp_pair_2[make_pair(a_to_b,b_to_c)]++;
mp_pair_3[make_pair(a_to_c,b_to_c)]++;
mp_tuple[make_tuple(a_to_b,a_to_c,b_to_c)]++;
}
cout << sum << endl;
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
450 / 450 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt |
| All |
00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 01_11.txt, 01_12.txt, 01_13.txt, 01_14.txt, 01_15.txt, 01_16.txt, 01_17.txt, 01_18.txt, 01_19.txt, 01_20.txt, 01_21.txt, 01_22.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 03_1.txt, 03_2.txt, 03_3.txt, 04_1.txt, 04_2.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_01.txt |
AC |
1 ms |
3448 KiB |
| 00_sample_02.txt |
AC |
1 ms |
3544 KiB |
| 00_sample_03.txt |
AC |
1 ms |
3460 KiB |
| 01_01.txt |
AC |
1 ms |
3400 KiB |
| 01_02.txt |
AC |
1 ms |
3460 KiB |
| 01_03.txt |
AC |
1 ms |
3400 KiB |
| 01_04.txt |
AC |
1 ms |
3572 KiB |
| 01_05.txt |
AC |
1 ms |
3408 KiB |
| 01_06.txt |
AC |
1 ms |
3500 KiB |
| 01_07.txt |
AC |
1 ms |
3544 KiB |
| 01_08.txt |
AC |
1 ms |
3608 KiB |
| 01_09.txt |
AC |
1 ms |
3392 KiB |
| 01_10.txt |
AC |
1 ms |
3392 KiB |
| 01_11.txt |
AC |
84 ms |
13132 KiB |
| 01_12.txt |
AC |
164 ms |
37592 KiB |
| 01_13.txt |
AC |
7 ms |
4484 KiB |
| 01_14.txt |
AC |
160 ms |
35736 KiB |
| 01_15.txt |
AC |
132 ms |
18212 KiB |
| 01_16.txt |
AC |
7 ms |
5720 KiB |
| 01_17.txt |
AC |
139 ms |
17700 KiB |
| 01_18.txt |
AC |
288 ms |
65188 KiB |
| 01_19.txt |
AC |
149 ms |
20840 KiB |
| 01_20.txt |
AC |
293 ms |
65264 KiB |
| 01_21.txt |
AC |
148 ms |
19480 KiB |
| 01_22.txt |
AC |
292 ms |
65200 KiB |
| 02_01.txt |
AC |
363 ms |
74564 KiB |
| 02_02.txt |
AC |
353 ms |
74600 KiB |
| 02_03.txt |
AC |
343 ms |
74608 KiB |
| 02_04.txt |
AC |
346 ms |
74564 KiB |
| 02_05.txt |
AC |
335 ms |
74572 KiB |
| 02_06.txt |
AC |
347 ms |
74732 KiB |
| 03_1.txt |
AC |
13 ms |
6056 KiB |
| 03_2.txt |
AC |
13 ms |
5924 KiB |
| 03_3.txt |
AC |
13 ms |
5936 KiB |
| 04_1.txt |
AC |
331 ms |
65336 KiB |
| 04_2.txt |
AC |
332 ms |
65200 KiB |