1 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; int n; ull x[500005]; ull sum[500005], sum2[500005], power[500005], b = 29, ans; ull a[500005]; char c; bool check(int s, int t) { ull o = sum[s + t] - sum[s - t] * power[2 * t]; ull p = sum2[n - s + t] - sum2[n - s - t] * power[2 * t]; if (o + p == x[2 * t]) return true; else return false; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { cin >> c; if (c == '0') a[i] = 0; else a[i] = 1; } power[0] = 1; x[0] = 0; for (int i = 1; i <= 500000; i++) { power[i] = b * power[i - 1]; x[i] = x[i - 1] * b + 1; } for (int i = 1; i <= n; i++) { sum[i] = b * sum[i - 1] + a[i]; sum2[i] = b * sum2[i - 1] + a[n + 1 - i]; } for (int i = 1; i <= n - 1; i++) { int l = 1, r = min(i, n - i); while (l <= r) { int mid = (l + r) / 2; if (check(i, mid)) l = mid + 1; else r = mid - 1; } ans += r; } printf("%lld", ans); return 0; }
- 1
信息
- ID
- 918
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者