QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#884093 | #9682. nim 游戏 | Flamire | Compile Error | / | / | C++17 | 4.9kb | 2025-02-05 21:17:12 | 2025-02-05 21:17:13 |
Judging History
This is the latest submission verdict.
- [2025-02-05 21:17:13]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [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); | ~~~