Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33592 | 林芳菲 | 【J】T4 | C++ | 运行出错 | 0 | 0 MS | 256 KB | 1349 | 2024-10-14 13:43:24 |
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <vector> using namespace std; int n; int c[5000010][26]; string s; struct node { int l, r; bool operator < (const node & b) const { if (l != b.l) return l < b.l; return r < b.r; } }; int main() { freopen("string.in", "r", stdin); freopen("string.out", "w", stdout); cin >> s; n = s.size(); s = " " + s; for (int i = 1; i <= n; i++) { for (int j = 0; j <= 25; j++) c[i][j] = c[i - 1][j]; c[i][s[i] - 'a'] = i; } long long ans = 0; for (int i = 1; i <= n; i++) { vector<node> v; for (int j = 0; j <= 25; j++) { int r = c[i][j]; if (r == 0) continue; int l = c[r - 1][j] + 1; if (l <= r) v.push_back((node){l, r}); } sort(v.begin(), v.end()); int y = 0; for (int j = 0; j < v.size(); j++) { int l = v[j].l; int r = v[j].r; if (l > y) ans += r - l + 1; else if (r > y) ans += r - y; y = max(y, r); } } cout << ans << endl; fclose(stdin); fclose(stdout); return 0; }