QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#547014#7565. Harumachi KazeA_programmerWA 1847ms54192kbC++144.0kb2024-09-04 16:53:222024-09-04 16:53:23

Judging History

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

  • [2024-09-04 16:53:23]
  • 评测
  • 测评结果:WA
  • 用时:1847ms
  • 内存:54192kb
  • [2024-09-04 16:53:22]
  • 提交

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];
ull a[N], b[N];

struct info
{
	ull x; int is;
	info(ull X = 0, int I = 0) { x = X; is = I; }
	info operator + (const info &b)const
	{
		if (is == 1) return b;
		if (b.is == 1) return *this;
        if (is == 2 || b.is == 2) return info(0, 2);
		cout << "A " << x << " " << b.x << "\n"; cout.flush();
		ull t; cin >> t; return info(t, 0);
	}
	
	bool operator < (const info &b)const
	{
		if (is == 1 || b.is == 2) return true; if (is == 2 || b.is == 1 || x == b.x) return false;
		cout << "C " << x << " " << b.x << "\n"; cout.flush();
		ull t; cin >> t; return (t == x);
	}
}c[N];

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

struct segtree
{
	int l[N << 2], r[N << 2];
	info 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] = t[ls] + t[rs];
	}
	
	void change(int k, int x, ull d)
	{
		if (l[k] == r[k]) return t[k] = info(d, 0), void();
		int mid = (l[k] + r[k]) >> 1;
		if (x <= mid) change(ls, x, d); else change(rs, x, d);
		t[k] = t[ls] + t[rs];
	}
}T1[8], T2[8];

info res;
vector<ull> ans;
void Solve(int k1, int k2, int p1, int p2, info val1, info val2)
{
    if (T1[p1].l[k1] == T1[p1].r[k1]) return res = (val1 < val2) ? val2 : val1, void();
	info nw1 = val1 + T1[p1].t[k1 << 1], nw2 = val2 + T2[p2].t[k2 << 1];
	if (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 n, 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] = info(0, 1);
        for (int j = X[i] + 1; j <= min(N, X[i] + n); j++) c[j] = info(a[j - X[i]], 0);
        for (int j = X[i] + n + 1; j <= N; j++) c[j] = info(0, 2);
        T1[i].build(1, 1, N);
        for (int j = 1; j <= Y[i]; j++) c[j] = info(0, 1);
        for (int j = Y[i] + 1; j <= min(N, Y[i] + n); j++) c[j] = info(b[j - Y[i]], 0);
        for (int j = Y[i] + n + 1; j <= N; j++) c[j] = info(0, 2);
        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, info(0, 1), info(0, 1)), ans.emplace_back(res.x);
		}
	cout << "! " << ans.size() << "\n";
	for (ull val : ans) cout << val << " ";
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 53392kb

input:

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

output:

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

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 8ms
memory: 53344kb

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
3170534137668829184
5188146770730811392
3458764513820540928
2882303761517117440
345876451382...

output:

A 1441151880758558720 2017612633061982208
A 864691128455135232 2305843009213693952
A 2017612633061982208 3170534137668829184
A 1441151880758558720 2017612633061982208
A 2017612633061982208 864691128455135232
A 1441151880758558722 2017612633061982208
A 2017612633061982208 864691128455135232
A 1441151...

result:

ok 2 lines

Test #3:

score: -100
Wrong Answer
time: 1847ms
memory: 54192kb

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: '5720371042113242776 3764204450...5382128526 16566437203220404024'