Submission #20387807
Source Code Expand
#include <bits/stdc++.h>
typedef long long lint;
using namespace std;
string s;
char seed(int x) {
if (s[x] == s[x + 1] && s[x] != s[x + 2]) {
return s[x];
} else {
return 'X';
}
}
// 累積和
struct cumulative_sum {
using lint = long long int;
int sz;
// data[i]:元の数列
vector<lint> data;
// cum[i]:[0,i)の和
vector<lint> sum;
// 要素数を指定して初期化
cumulative_sum(const int _sz) : sz(_sz) {
data.assign(sz, 0);
sum.assign(sz + 1, 0);
}
lint& operator[](const int k) {
return data[k];
}
// dataに基づいてsumを構築
void build() {
for (int i = 0; i < sz; i++) sum[i + 1] = sum[i] + data[i];
}
// [a,b)の和を求める
lint query(const int a, const int b) {
return sum[b] - sum[a];
}
};
vector<cumulative_sum> counts() {
lint n = s.length();
vector<cumulative_sum> res(26, cumulative_sum(n));
for (int i = 0; i < n; i++) {
int c = s[i] - 'a';
res[c][i] = 1;
}
for (int i = 0; i < 26; i++) {
res[i].build();
}
return res;
}
int main() {
cin >> s;
int n = s.length();
char before_c = 'Y';
int before_i = n;
lint ans = 0;
auto cum = counts();
for (int i = n - 3; i >= 0; i--) {
char c = seed(i);
if (c == 'X') {
continue;
}
if (c != before_c) {
ans += n - (i + 2) - cum[c - 'a'].query(i + 2, before_i);
} else {
ans += before_i - (i + 2) - cum[c - 'a'].query(i + 2, before_i);
}
before_c = c;
before_i = i;
}
cout << ans << endl;
}
Submission Info
| Submission Time | |
|---|---|
| Task | C - String Invasion |
| User | mijinko |
| Language | C++ (GCC 9.2.1) |
| Score | 500 |
| Code Size | 1762 Byte |
| Status | AC |
| Exec Time | 79 ms |
| Memory | 88140 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 500 / 500 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | s1.txt, s2.txt, s3.txt |
| All | 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, s1.txt, s2.txt, s3.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01.txt | AC | 79 ms | 87936 KiB |
| 02.txt | AC | 76 ms | 87996 KiB |
| 03.txt | AC | 76 ms | 87940 KiB |
| 04.txt | AC | 75 ms | 88136 KiB |
| 05.txt | AC | 74 ms | 88140 KiB |
| 06.txt | AC | 75 ms | 88140 KiB |
| 07.txt | AC | 76 ms | 88040 KiB |
| 08.txt | AC | 75 ms | 87940 KiB |
| 09.txt | AC | 77 ms | 88012 KiB |
| 10.txt | AC | 75 ms | 88048 KiB |
| 11.txt | AC | 73 ms | 87912 KiB |
| 12.txt | AC | 75 ms | 87940 KiB |
| 13.txt | AC | 76 ms | 87912 KiB |
| 14.txt | AC | 73 ms | 87940 KiB |
| 15.txt | AC | 73 ms | 87908 KiB |
| 16.txt | AC | 72 ms | 88080 KiB |
| 17.txt | AC | 74 ms | 88008 KiB |
| 18.txt | AC | 71 ms | 88008 KiB |
| 19.txt | AC | 2 ms | 3472 KiB |
| 20.txt | AC | 2 ms | 3628 KiB |
| 21.txt | AC | 3 ms | 3600 KiB |
| 22.txt | AC | 3 ms | 3604 KiB |
| s1.txt | AC | 2 ms | 3560 KiB |
| s2.txt | AC | 2 ms | 3504 KiB |
| s3.txt | AC | 2 ms | 3452 KiB |