QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#884093#9682. nim 游戏FlamireCompile Error//C++174.9kb2025-02-05 21:17:122025-02-05 21:17:13

Judging History

This is the latest submission verdict.

  • [2025-02-05 21:17:13]
  • Judged
  • [2025-02-05 21:17:12]
  • Submitted

answer

#include <bits/stdc++.h>
#define N 100011
#define ull long long
#define pii pair<ull,int>
#define pui pair<int,ull>
#define s1 first
#define s2 second
using namespace std;
namespace IO
{
	char Is[(1<<21)+10],Os[(1<<21)+10];
	int Ipt,Opt;
	char gc()
	{
		if(Ipt==1<<21)Ipt=0;
		if(!Ipt){Is[fread(Is,1,1<<21,stdin)]=0;}
		return Is[Ipt++];
	}
	void flush(){fwrite(Os,1,Opt,stdout);Opt=0;}
	void pc(char x)
	{
		if(Opt==1<<21)flush();
		Os[Opt++]=x;
	}
	ull read()
	{
		ull x=0;char ch=gc();while(ch<'0'||ch>'9')ch=gc();while(ch<='9'&&ch>='0')x=x*10+ch-'0',ch=gc();return x;
	}
	void write(ull x){if(x<10)pc(x+'0');else write(x/10),pc(x%10+'0');}
}
using namespace IO;
int T,n,m;ull a[N];
pii pa[64][N];int pt[64];
int is0[N];ull V,ans,res[64];
vector<int> v0;
ull dfs(int h)
{
	if(h<0)return 0;
	if(!(V>>h&1))return dfs(h-1);
	for(int i=pt[h];i<=n;++i)if(!is0[pa[h][i].s2])
	{
		++is0[pa[h][i].s2];V^=(1ll<<h)|pa[h][i].s1;v0.push_back(pa[h][i].s2);
		return (1ll<<h)-pa[h][i].s1+dfs(h-1);
	}
	for(int _=0;_<v0.size();++_)
	{
		int i=v0[_];
		++is0[i];V^=1ll<<h;
		return (1ll<<h)+dfs(h-1);
	}
	return 0;
}
vector<vector<pui>> vM;
vector<pui> pth;
bool dfsM(int h,ull W)
{
	if(h<0)
	{
		if(W!=ans)return 0;
		vM.push_back(pth);
		return 1;
	}
	if(!(V>>h&1))return dfsM(h-1,W);
	bool ok=0;
	for(int i=pt[h];i<=n;++i)if(!is0[pa[h][i].s2])
	{
		++is0[pa[h][i].s2];V^=(1ll<<h)|pa[h][i].s1;v0.push_back(pa[h][i].s2);pth.push_back({pa[h][i].s2,(1ll<<h)-pa[h][i].s1});
		bool flg=dfsM(h-1,W+(1ll<<h)-pa[h][i].s1);
		--is0[pa[h][i].s2];V^=(1ll<<h)|pa[h][i].s1;v0.pop_back();pth.pop_back();
		ok|=flg;
		if(!flg||vM.size()==m)return ok;
	}
	for(int _=0;_<v0.size();++_)
	{
		int i=v0[_];
		++is0[i];V^=1ll<<h;pth.push_back({i,1ll<<h});
		bool flg=dfsM(h-1,W+(1ll<<h));
		--is0[i];V^=1ll<<h;pth.pop_back();
		ok|=flg;
		if(!flg||vM.size()==m)return ok;
	}
	return ok;
}
const int A=62;
int main()
{
	read();T=read();while(T--)
	{
		n=read();m=read();
		ull X=0;
		for(int i=1;i<=n;++i)a[i]=read(),X^=a[i];
		if(!X){pc(48);pc(10);pc(49);pc(10);pc(48);pc(10);pc(10);pc(10);continue;}
		int tn=0;
		for(int i=1;i<=n;++i)if(a[i]&1)pa[0][++tn]=pii(1,i);
		pt[0]=tn+1;
		for(int i=1;i<=n;++i)if(!(a[i]&1))pa[0][++tn]=pii(0,i);
		for(int h=1;h<=A;++h)
		{
			tn=0;
			for(int i=1;i<=n;++i)if(a[pa[h-1][i].s2]>>h&1)pa[h][++tn]=pii(pa[h-1][i].s1|1ll<<h,pa[h-1][i].s2);
			pt[h]=tn+1;
			for(int i=1;i<=n;++i)if(!(a[pa[h-1][i].s2]>>h&1))pa[h][++tn]=pa[h-1][i];
		}
		ans=9e18;
		for(int h=0;h<=A;++h)res[h]=-1;
		for(int h=A;~h;--h)
		{
			if(!pa[h][n].s1)
			{
				for(int i=1;i<=n;++i)is0[i]=0;
				v0.clear();
				V=X;
				ans=min(ans,res[h]=dfs(h));
				break;
			}
			ull X=0;
			for(int i=1;i<=n;++i)X^=pa[h][i].s1;
			if(X>>h&1)
			{
				if(pt[h]<=n)
				{
					for(int i=1;i<=n;++i)is0[i]=0;
					v0.clear();
					V=X;
					ans=min(ans,res[h]=dfs(h));
				}
				break;
			}
			else
			{
				if(pt[h]+1<=n)
				{
					for(int i=1;i<=n;++i)is0[i]=0;
					v0.clear();
					V=X;
					++is0[pa[h][pt[h]].s2];v0.push_back(pa[h][pt[h]].s2);
					++is0[pa[h][pt[h]+1].s2];v0.push_back(pa[h][pt[h]+1].s2);
					V^=pa[h][pt[h]].s1^pa[h][pt[h]+1].s1;
					ans=min(ans,res[h]=(1ll<<h)-pa[h][pt[h]].s1+(1ll<<h)-pa[h][pt[h]+1].s1+dfs(h-1));
				}
			}
		}
		for(int i=1;i<=n;++i)is0[i]=0;
		v0.clear();
		V=X;
		vM.clear();
		for(int h=A;~h;--h)
		{
			if(!pa[h][n].s1)
			{
				if(res[h]==ans)
				{
					dfsM(h,0);
					if(vM.size()==m)break;
				}
				break;
			}
			ull X=0;
			for(int i=1;i<=n;++i)X^=pa[h][i].s1;
			if(X>>h&1)
			{
				if(pt[h]<=n)
				{
					if(res[h]==ans)
					{
						dfsM(h,0);
						if(vM.size()==m)break;
					}
				}
				break;
			}
			else
			{
				if(pt[h]+1<=n)
				{
					if(res[h]==ans)
					{
						for(int i=pt[h];i<=n;++i)
						{
							bool ok=0;
							for(int j=i+1;j<=n;++j)
							{
								++is0[pa[h][i].s2];v0.push_back(pa[h][i].s2);pth.push_back({pa[h][i].s2,(1ll<<h)-pa[h][i].s1});
								++is0[pa[h][j].s2];v0.push_back(pa[h][j].s2);pth.push_back({pa[h][j].s2,(1ll<<h)-pa[h][j].s1});
								V^=pa[h][i].s1^pa[h][j].s1;
								bool flg=dfsM(h-1,(1ll<<h)-pa[h][i].s1+(1ll<<h)-pa[h][j].s1);
								--is0[pa[h][i].s2];v0.pop_back();pth.pop_back();
								--is0[pa[h][j].s2];v0.pop_back();pth.pop_back();
								V^=pa[h][i].s1^pa[h][j].s1;
								ok|=flg;
								if(!flg||vM.size()==m)break;
							}
							if(!ok||vM.size()==m)break;
						}
						if(vM.size()==m)break;
					}
				}
			}
		}
		write(ans);pc(10);write(vM.size());pc(10);
		for(auto &V:vM)
		{
			sort(V.begin(),V.end());
			static vector<pui> nV;
			nV.clear();
			for(pui x:V)
			{
				if(nV.empty()||nV.back().s1!=x.s1)nV.push_back(x);
				else nV.back().s2+=x.s2;
			}
			write((int)nV.size());pc(10)
			for(pui x:nV)write(x.s1),pc(32);pc(10);
			for(pui x:nV)write(x.s2),pc(32);pc(10);
		}
	}
	flush();
	fclose(stdin);fclose(stdout);return 0;
}

详细

answer.code: In function ‘int main()’:
answer.code:211:53: error: expected ‘;’ before ‘for’
  211 |                         write((int)nV.size());pc(10)
      |                                                     ^
      |                                                     ;
  212 |                         for(pui x:nV)write(x.s1),pc(32);pc(10);
      |                         ~~~