萌新求助,AC × 13,WA × 12(附数据生成器)
查看原帖
萌新求助,AC × 13,WA × 12(附数据生成器)
666796
Rainsleep楼主2023/12/5 14:14

这里是代码

// LUOGU_RID: 138277888
// LUOGU_RID: 138274728
// 如果命运对你缄默, 那就活给他看。
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")

#include <bits/stdc++.h>

using namespace std;
typedef long long LL; 
// #define int LL
// typedef pair<int, int> PII;
// #define x first
// #define y second
#define epb emplace_back
#define ep emplace
const int N = 1e6 + 10;
typedef unsigned long long uLL;
const int p = 13331;
struct Node {
    uLL h1, h2;
    int pw;
} t[N << 2];
int n, q;
uLL pw[N];
char s[N];

inline Node mg(Node l, Node r) {
    Node v;
    if(!l.pw) return r; 
    v.h1 = l.h1 * (:: pw[l.pw]) + r.h1;
    v.h2 = r.h2 * (:: pw[r.pw]) + l.h2;
    v.pw = l.pw + r.pw;
    return v;
}

inline void upd(int u, int l, int r, int p, int x) {
    if(l == r) {
        t[u].h1 = t[u].h2 = x;
        t[u].pw = 1;
        return ;
    }
    int mid = l + r >> 1;
    if(p <= mid) upd(u << 1, l, mid, p, x);
    else upd(u << 1 | 1, mid + 1, r, p, x);
    t[u] = mg(t[u << 1], t[u << 1 | 1]);
    return ;
}

inline Node query(int u, int l, int r, int Ql, int Qr) {
    if(Ql <= l and Qr >= r) return t[u];
    Node v = {0, 0, 0};
    int mid = l + r >> 1;
    if(Ql <= mid) v = query(u << 1, l, mid, Ql, Qr);
    if(Qr > mid) v = mg(v, query(u << 1 | 1, mid + 1, r, Ql, Qr));
    return v;
}

signed main() {
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    ios :: sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    cin >> n >> q >> (s + 1);
    pw[0] = 1;
    for(int i = 1; i <= n; ++ i) pw[i] = pw[i - 1] * p;
    for(int i = 1; i <= n; ++ i) upd(1, 1, n, i, s[i] - 'a' + 1);
    for(int op, x, y; q --; ) {
        cin >> op;
        if(op == 1) {
            char c;
            cin >> x >> c;
            upd(1, 1, n, x, c - 'a' + 1);
            s[x] = c;
        } else {
            cin >> x >> y;
            if(x == y) cout << "Yes" << '\n';
            else {
                int len = (y - x + 1) >> 1;
                uLL t1 = query(1, 1, n, x, x + len - 1).h2, 
                    t2 = query(1, 1, n, y - len + 1, y).h1;
                cout << ((t1 ^ t2) ? "No" : "Yes") << '\n';
            }
        }
    }
    return 0;
}

拍子

// 如果命运对你缄默, 那就活给他看。
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast", "inline", "-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")

#include <bits/stdc++.h>

using namespace std;
typedef long long LL; 
// #define int LL
// typedef pair<int, int> PII;
// #define x first
// #define y second
#define epb emplace_back
#define ep emplace
const int N = 10;

signed main() {
	// freopen(".in", "r", stdin);
	// freopen(".out", "w", stdout);
	// ios :: sync_with_stdio(false);
	// cin.tie(0), cout.tie(0);
	srand(time(0));
	int n = rand() % N + 1;
	int q = rand() % n + 1;
	cout << n << ' ' << q << '\n';
	string s = "";
	for(int i = 1; (int)s.size() < n; ++ i) {
		s += rand() % 26 + 'a';
		if(rand() % 2 == 0 and s.size() * 2 <= n) {
			string t = s;
			reverse(t.begin(), t.end());
			if(rand() % 2 == 0 and s.size() * 2 + 1 <= n) s += rand() % 26 + 1;
			s += t;
		}
	}
	cout << s << '\n';
	while(q -- ) {
		int op = rand() % 2;
		if(op == 1) {
			int p = rand() % n + 1;
			char c = rand() % 26 + 'a';
			cout << 1 << ' ' << p << ' ' << c << '\n';
		} else {
			int l = rand() % n + 1, r = rand() % n + 1;
			if(l > r) swap(l, r);
			cout << 2 << ' ' << l << ' ' << r << '\n';
		}
	}
	return 0;
}

呃,如你所见,这是个很烂很烂的拍子。事实上,这个拍子在大多数时候都无法起到对拍的作用,但是当数据范围比较小的时候,也许可以靠 数据量大 buff 掉生成器本身的烂()。

submission

遗憾立离场。也许几个小时之后我会回来升级一波拍子。

2023/12/5 14:14
加载中...