QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#673658 | #9302. Caesar Cipher | the_fool | WA | 557ms | 44772kb | C++20 | 3.3kb | 2024-10-25 08:20:08 | 2024-10-25 08:20:08 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using ll = long long;
using us = unsigned short;
constexpr int N = 5E5 + 10;
#define ls u << 1
#define rs u << 1 | 1
struct segtree {
static constexpr LL mod[] = {998244353, 1000000007};
static constexpr LL base[] = {99999, 88888};
static inline LL pw[N][2];
static void init() {
pw[0][0] = pw[0][1] = 1;
for (int t = 0; t < 2; t++) {
for (int i = 1; i < N; i++) {
pw[i][t] = pw[i - 1][t] * base[t] % mod[t];
}
}
}
struct info {
int siz = 0;
array<LL, 2> hash = {};
us sum = 0;
info operator+(const info &p) const {
array<LL, 2> res;
for (int t = 0; t < 2; t++) {
res[t] = hash[t] * (pw[p.siz][t]) + p.hash[t];
res[t] %= mod[t];
}
return {siz + p.siz, res, us(sum + p.sum)};
}
};
int n, p, dep;
vector<info> io;
segtree(int _n, vector<us> &v) {
n = _n;
p = __bit_ceil(n + 2);
io.assign(2 * p + 1, {});
for (int i = 1; i <= n; i++) {
io[p + i].siz = 1;
io[p + i].hash[0] = io[p + i].hash[1] = v[i];
io[p + i].sum = v[i];
}
for (int i = p - 1; i >= 1; i--) {
pushup(i);
}
}
void pushup(int u) {
io[u] = io[ls] + io[rs];
}
void cg(int i, us v) {
v = v + io[i + p].sum;
io[i + p].hash[0] = io[i + p].hash[1] = io[i + p].sum = v;
for (int j = i >> 1; j; j >>= 1) {
pushup(j);
}
}
info qy(int l, int r) {
// cerr << "QUERY " << l << " " << r << " :\n ";
info sml, smr;
for (l += p - 1, r += p + 1; l ^ r ^ 1; l >>= 1, r >>= 1) {
if (~l & 1) sml = sml + io[l ^ 1];
if (r & 1) smr = io[r ^ 1] + smr;
}
// info res = sml + smr;
// cerr << "HASH " << res.hash[0] << " " << res.hash[1] << "\n";
// cerr << "SUM " << res.sum << "\n";
// cerr << "\n";
return sml + smr;
}
};
int main() {
cin.tie(nullptr) -> sync_with_stdio(false);
int n, q;
cin >> n >> q;
segtree::init();
vector<us> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = n; i >= 1; i--) {
a[i] = a[i] - a[i - 1];
}
// cerr << "\n";
// for (int i = 1; i <= n; i++) {
// cerr << a[i] << " \n"[i == n];
// }
segtree tr(n, a);
for (int i = 1; i <= q; i++) {
int op;
cin >> op;
if (op == 1) {
int l, r;
cin >> l >> r;
tr.cg(l, 1);
if (r + 1 <= n) tr.cg(r + 1, -1);
} else {
int x, y, L;
cin >> x >> y >> L;
bool is = 1;
is &= (tr.qy(1, x).sum == tr.qy(1, y).sum);
is &= (tr.qy(x + 1, x + L - 1).hash == tr.qy(y + 1, y + L - 1).hash);
if (is) {
cout << "yes" << "\n";
} else {
cout << "no" << "\n";
}
}
}
return 0;
}
/*
5 6
1 2 1 2 1
2 1 2 2
2 1 3 3
1 1 1
1 3 5
2 1 2 4
2 1 2 2
3 2
0 65535 65535
1 2 3
2 1 2 2
*/
詳細信息
Test #1:
score: 100
Accepted
time: 3ms
memory: 11368kb
input:
5 6 1 2 1 2 1 2 1 2 2 2 1 3 3 1 1 1 1 3 5 2 1 2 4 2 1 2 2
output:
no yes no yes
result:
ok 4 token(s): yes count is 2, no count is 2
Test #2:
score: 0
Accepted
time: 6ms
memory: 11344kb
input:
3 3 0 65535 65535 2 1 2 2 1 2 3 2 1 2 2
output:
no yes
result:
ok 2 token(s): yes count is 1, no count is 1
Test #3:
score: 0
Accepted
time: 3ms
memory: 11436kb
input:
1000 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 1000 token(s): yes count is 1000, no count is 0
Test #4:
score: 0
Accepted
time: 88ms
memory: 19332kb
input:
100000 100000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 100000 token(s): yes count is 100000, no count is 0
Test #5:
score: 0
Accepted
time: 557ms
memory: 44648kb
input:
500000 500000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 500000 token(s): yes count is 500000, no count is 0
Test #6:
score: 0
Accepted
time: 364ms
memory: 44644kb
input:
500000 500000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes ...
result:
ok 500000 token(s): yes count is 500000, no count is 0
Test #7:
score: 0
Accepted
time: 405ms
memory: 44664kb
input:
500000 500000 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 65535 65534 6553...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes no no no yes yes yes yes yes yes yes yes yes yes yes yes yes no yes ...
result:
ok 500000 token(s): yes count is 449947, no count is 50053
Test #8:
score: 0
Accepted
time: 267ms
memory: 44712kb
input:
500000 500000 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 49999 49997 4999...
output:
yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes yes no yes yes yes yes yes yes yes yes yes yes yes yes yes no yes yes yes yes yes no yes yes yes yes yes yes yes yes yes no yes no yes y...
result:
ok 251941 token(s): yes count is 226844, no count is 25097
Test #9:
score: -100
Wrong Answer
time: 267ms
memory: 44772kb
input:
500000 500000 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 0 65535 ...
output:
yes yes yes yes yes yes yes no yes yes yes yes yes no yes yes no yes no yes yes yes yes yes yes yes yes yes yes yes yes yes no yes yes no no no yes yes yes yes yes yes no yes no yes yes yes no yes yes yes yes yes yes yes yes yes no no yes yes yes yes no yes no yes no no yes yes yes no no yes yes yes...
result:
wrong answer expected NO, found YES [1st token]