QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#671580#9302. Caesar CipherSunlight9#WA 538ms45832kbC++173.5kb2024-10-24 13:30:042024-10-24 13:30:04

Judging History

你现在查看的是最新测评结果

  • [2024-11-04 17:10:09]
  • hack成功,自动添加数据
  • (/hack/1110)
  • [2024-10-24 13:30:04]
  • 评测
  • 测评结果:WA
  • 用时:538ms
  • 内存:45832kb
  • [2024-10-24 13:30:04]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
using LL = long long;
using ll = long long;

constexpr int mod = 65536;
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 = {};
        LL sum = 0;
        info operator+(const info &p) {
            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, (sum + p.sum) % ::mod};
        }
    };

    int n, p, dep;
    vector<info> io;

    segtree(int _n, vector<int> &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, int v) {
        for (int t = 0; t < 2; t++) {
            io[i + p].hash[t] += v + ::mod;
            io[i + p].hash[t] %= ::mod;
        }
        io[i + p].sum += v + ::mod;
        io[i + p].sum %= ::mod;
        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<int> 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] + mod;
        a[i] %= mod;
    }

//    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: 6ms
memory: 11404kb

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: 3ms
memory: 11420kb

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: 11488kb

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: 19584kb

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: 538ms
memory: 45620kb

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: 383ms
memory: 45832kb

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: 384ms
memory: 45708kb

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: 255ms
memory: 45744kb

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: 257ms
memory: 45700kb

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]