社区讨论
WA70 求助
P3498[POI 2010] KOR-Beads参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lzjtwqu2
- 此快照首次捕获于
- 2024/08/07 20:32 2 年前
- 此快照最后确认于
- 2024/08/07 21:29 2 年前
萌新刚学字符串哈希,求助大佬。
CPP#include <bits/stdc++.h>
using namespace std;
#define ll unsigned long long
#define int ll
#define N 200010
ll ha[N], has1[N], has2[N];
int cnt[N], a[N], n;
set < ll > ss;
vector < int > ans[N];
const ll base = 133333331, p = 1e9 + 7;
ll get1(int l, int r) {
return (has1[r] - has1[l - 1] * ha[r - l + 1] % p + p) % p;
}
ll get2(int l, int r) {
return (has2[l] - has2[r + 1] * ha[r - l + 1] % p + p) % p;
}
signed main() {
// freopen("P3498.in", "r", stdin);
// freopen("P3498.out", "w", stdout);
scanf("%llu", &n);
for (int i = 1; i <= n; ++i) scanf("%llu", a + i);
ha[0] = 1;
for (int i = 1; i <= n; ++i) {
ha[i] = ha[i - 1] * base % p;
has1[i] = (has1[i - 1] * base % p + 1ll * a[i]) % p;
}
for (int i = n; i; --i)
has2[i] = (has2[i + 1] * base % p + 1ll * a[i]) % p;
ll tmp1, tmp2;
for (int k = 1; k <= n; ++k) {
ss.clear();
for (int i = 1; i <= n - k + 1; i += k) {
tmp1 = get1(i, i + k - 1) % p;
tmp2 = get2(i, i + k - 1) % p;
ss.insert(min(tmp1, tmp2));
// printf("%d %d-%d %d****\n", k, i, i, i + k - 1);
}
for (ll i : ss) ++cnt[k];
ans[cnt[k]].push_back(k);
// printf("%d--%d\n", cnt[k], k);
}
sort(cnt + 1, cnt + n + 1);
printf("%llu %llu\n", cnt[n], ans[cnt[n]].size());
for (int i : ans[cnt[n]]) printf("%llu ", i);
return 0;
}
WA #7 #9,实在挑不出来了 /ll
回复
共 4 条回复,欢迎继续交流。
正在加载回复...