求Hack
查看原帖
求Hack
401393
一只绝帆楼主2023/5/27 19:22

RT,WA on #5,#8,#9,#10

WA #9:

Wrong Answer On line 20295 column 1, read 6, expected 5.

拍了2000组小数据也没拍出来/kk

// Problem: P5312 [Ynoi2011] 竞赛实验班
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5312
// Memory Limit: 500 MB
// Time Limit: 1000 ms

#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define UF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define bit(x,i) (x>>(i)&1)
using namespace std;
typedef long long ll;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char *p1,*p2,buf[1<<21];
int read() {
	int s=0,w=0;char ch=getchar();
	while(ch<'0'||ch>'9') w|=(ch=='-'),ch=getchar();
	while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return w?-s:s;
}
const int NT=2e6+5,N=2e5+5;//dong tai kai dian
int xfind,xall;
ll sr,sl;
struct S {
	int s[32],len;
	S() {memset(s,0,sizeof s);len=0;}
	int& operator[](int id) {return s[id];}
	void operator+=(S b) {F(i,0,31) s[i]+=b[i];len+=b.len;}
	void operator+=(int x) {F(i,0,31) if(bit(x,i)) s[i]++;len++;}
	void operator^=(int x) {F(i,0,31) if(bit(x,i)) s[i]=len-s[i];}
	ll operator()() const {ll sum=0;F(i,0,31) sum+=(1ll<<i)*s[i];return sum;}
};
struct TRIE {
	S sum[NT];
	int nxt[NT][2],rt=1,snt=1;
	void ins(int x) {
		int now=rt;
		UF(i,31,0) {
			sum[now]+=x;
			if(!nxt[now][bit(x,i)]) nxt[now][bit(x,i)]=++snt;
			now=nxt[now][bit(x,i)];
		} sum[now]+=x;
	}
	ll q(int k) {
		int now=rt,x=0;S res;
		UF(i,31,0) {
			int l=nxt[now][0],r=nxt[now][1];
			if(bit(xfind,i)) swap(l,r);
			sum[l].len>=k?now=l,x+=bit(xfind,i)*(1<<i):(k-=sum[l].len,res+=sum[l],now=r,x+=!bit(xfind,i)*(1<<i));
			if(!i&&k) {F(j,0,31) if(bit(x,j)) res[j]+=k;res.len+=k;}
		}
		res^=xall;return res();
	}
} t;
struct Q {
	S sum[N];
	int a[N],n;
	int& operator[](int id) {return a[id];}
	void ins(int x) {a[++n]=x;sum[n]+=sum[n-1];sum[n]+=x;}
	ll q(int k) {S res;res+=sum[k];res^=xall;return res();}
	void clr() {n=0;}
} q;
ll sum(int k) {
	int tl=t.sum[t.rt].len;
	if(k>tl) return t.q(tl)+q.q(k-tl);
	else return t.q(k);
}
int main() {
	F(i,1,read()) q.ins(read());
	F(UVIGJUTDUYFIGTUYFGHOI,1,read()) {
		switch(read()) {
			case 1:q.ins(read()^xall);break;
			case 2:sl=sum(read()-1);sr=sum(read());cout<<sr-sl<<endl;break;
			case 3:xall^=read();break;
			case 4:F(i,1,q.n) t.ins(q[i]);q.clr();xfind=xall;break;
		}
	}
	return 0;
}
2023/5/27 19:22
加载中...