QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#547033#7565. Harumachi KazeA_programmerWA 1632ms37492kbC++143.6kb2024-09-04 17:11:152024-09-04 17:11:16

Judging History

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

  • [2024-09-04 17:11:16]
  • 评测
  • 测评结果:WA
  • 用时:1632ms
  • 内存:37492kb
  • [2024-09-04 17:11:15]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

typedef unsigned long long ull;
const int maxn = 2e4 + 5;
const int N = 32768;

int X[8], Y[8], n;
ull a[N], b[N], c[N];
ull add(ull x, ull y)
{
	if (!x || !y) return x ^ y;
	cout << "A " << x << " " << y << "\n"; cout.flush();
	ull t; cin >> t; return t;
}
bool cmp(ull x, ull y)
{
	cout << "C " << x << " " << y << "\n"; cout.flush();
	ull t; cin >> t; return (t == x);
}

#define ls k << 1
#define rs k << 1 | 1

struct segtree
{
	int l[N << 2], r[N << 2]; ull t[N << 2];
	void build(int k, int L, int R)
	{
		l[k] = L, r[k] = R;
		if (L == R) return t[k] = c[L], void();
		int mid = (L + R) >> 1;
		build(ls, L, mid); build(rs, mid + 1, R);
		t[k] = add(t[ls], t[rs]);
	}
	
	void change(int k, int x, ull d)
	{
		if (l[k] == r[k]) return t[k] = d, void();
		int mid = (l[k] + r[k]) >> 1;
		if (x <= mid) change(ls, x, d); else change(rs, x, d);
		t[k] = add(t[ls], t[rs]);
	}
}T1[8], T2[8];

ull res;
vector<ull> ans;
void Solve(int k1, int k2, int p1, int p2, ull val1, ull val2)
{
    if (T1[p1].l[k1] == T1[p1].r[k1]) return res = cmp(val1, val2) ? val2 : val1, void();
	ull nw1 = val1 + T1[p1].t[k1 << 1], nw2 = val2 + T2[p2].t[k2 << 1];
	if (T1[p1].r[k1 << 1] <= X[p1] + n && (T2[p2].r[k2 << 1] > Y[p2] + n || cmp(nw1, nw2))) Solve(k1 << 1 | 1, k2 << 1, p1, p2, nw1, val2);
	else Solve(k1 << 1, k2 << 1 | 1, p1, p2, val1, nw2);
}

int rev[N];
int op[maxn], typ[maxn], k[maxn];
ull vl[maxn];

int main()
{
	int q, B;
	cin >> n >> q >> B;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) cin >> b[i];
	for (int i = 1; i <= q; i++)
	{
		cin >> op[i];
		if (op[i] == 1) cin >> typ[i] >> k[i] >> vl[i];
		else cin >> k[i];
	}
	
	for (int i = 1; i < N; i++) rev[i] = rev[i >> 1] >> 1 | ((i & 1) << (B - 1));
	
    if (B <= 6)
    {
        int cnt = 0;
        for (int i = 0; i < (1 << B); i++)
            if (i == rev[i]) X[cnt++] = (1 << B) - 1 - i;
    }
	else if (B <= 12)
	{
        int cnt = 0;
        for (int i = 0; i < 8; i++) X[i] = (i ^ 7) + rev[i ^ 7];
        for (int i = 0; i < (1 << (B - 3)); i += 8)
            if (i == rev[i]) Y[cnt++] = (1 << (B - 3)) - 8 - i;
	}
    else
    {
        for (int i = 0; i < 8; i++) X[i] = (i ^ 7) + rev[i ^ 7];
        for (int i = 0; i < 8; i++) Y[i] = ((i ^ 7) << 3) + rev[(i ^ 7) << 3] + (1 << (B - 6)) - (1 << 6);
    }
    for (int i = 0; i < 8; i++)
        if (X[i] + N - (1 << B) >= 0) X[i] += N - (1 << B);

    for (int i = 0; i < 8; i++)
    {
        for (int j = 1; j <= X[i]; j++) c[j] = 0;
        for (int j = X[i] + 1; j <= min(N, X[i] + n); j++) c[j] = a[j - X[i]];
        for (int j = X[i] + n + 1; j <= N; j++) c[j] = 0;
        T1[i].build(1, 1, N);
        for (int j = 1; j <= Y[i]; j++) c[j] = 0;
        for (int j = Y[i] + 1; j <= min(N, Y[i] + n); j++) c[j] = b[j - Y[i]];
        for (int j = Y[i] + n + 1; j <= N; j++) c[j] = 0;
        T2[i].build(1, 1, N);
    }
	
	for (int i = 1; i <= q; i++)
		if (op[i] == 1)
		{
			if (typ[i] == 1)
			{
				for (int j = 0; j < 8; j++)
					if (X[j] + k[i] <= N) T1[j].change(1, X[j] + k[i], vl[i]);
			}
            else
            {
                for (int j = 0; j < 8; j++)
                    if (Y[j] + k[i] <= N) T2[j].change(1, Y[j] + k[i], vl[i]);
            }
		}
		else
		{
			bool Fl = 0;
			for (int p = 0; p < 8 && !Fl; p++)
				for (int q = 0; q < 8 && !Fl; q++)
					if (X[p] + Y[q] + k[i] == N - 1)
                        Fl = 1, Solve(1, 1, p, q, 0, 0), ans.emplace_back(res);
		}
	cout << "! " << ans.size() << "\n";
	for (ull val : ans) cout << val << " ";
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 6ms
memory: 35788kb

input:

2 3 2
288230376151711744 864691128455135232
1441151880758558720 2017612633061982208
2 3
1 2 2 2594073385365405696
2 3
3458764513820540928
1152921504606846976
3458764513820540928
1152921504606846976
3458764513820540928
1152921504606846976
3458764513820540928
1152921504606846976
3458764513820540928
11...

output:

A 1441151880758558720 2017612633061982208
A 288230376151711744 864691128455135232
A 1441151880758558720 2017612633061982208
A 288230376151711744 864691128455135232
A 1441151880758558720 2017612633061982208
A 288230376151711744 864691128455135232
A 1441151880758558720 2017612633061982208
A 2882303761...

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 35720kb

input:

3 5 3
2017612633061982208 864691128455135232 2305843009213693952
1441151880758558720 2017612633061982208 288230376151711744
2 5
2 2
1 1 3 1729382256910270464
1 2 1 2017612633061982208
2 5
3458764513820540928
3746994889972252672
3170534137668829184
5188146770730811392
3458764513820540928
374699488997...

output:

A 1441151880758558720 2017612633061982208
A 3458764513820540928 288230376151711744
A 864691128455135232 2305843009213693952
A 2017612633061982208 3170534137668829184
A 1441151880758558720 2017612633061982208
A 3458764513820540928 288230376151711744
A 2017612633061982208 864691128455135232
A 28823037...

result:

ok 2 lines

Test #3:

score: -100
Wrong Answer
time: 1632ms
memory: 37492kb

input:

16000 20000 14
12381691541923575949 2314459967875656919 15240288079556723088 320873566057825844 1013209648229540810 17538037439317817183 11476444495745028170 14967174865083701448 17232652930598276562 7175999203534983334 4597650078600036201 13978217693115848142 17682091621678261784 488328147143975490...

output:

A 2314459967875656919 15240288079556723088
A 320873566057825844 1013209648229540810
A 104495759024483944 1334083214287366654
A 17538037439317817183 11476444495745028170
A 14967174865083701448 17232652930598276562
A 11564229646654949290 14749575507274081947
A 1438578973311850598 7867061080219479621
A...

result:

wrong answer 2nd lines differ - expected: '5509211311101668276 1762307890...5382128526 16566437203220404024', found: '5509211311101668276 1363711176...9477161867 13576961847315437365'