德州建网站,高级设计网站,目前较好的crm系统,做网站的公司msgg正题
题目链接:https://www.luogu.com.cn/problem/P4301 题目大意 nnn个石头#xff0c;先手先取走若干堆#xff08;不能全取#xff0c;可以不取#xff09;#xff0c;后手取走若干堆#xff08;不能全取#xff0c;可以不取#xff09;。然后进行NimNimNim游戏先手先取走若干堆不能全取可以不取后手取走若干堆不能全取可以不取。然后进行NimNimNim游戏要求先手游戏前取的最少石头且必胜。 解题思路
做了这么多题大概摸清思路了。NimNimNim游戏的先手必胜条件是所有石头异或起来不为000那么我们第一次取之后就要求后手无法取走若干堆使得它们异或和为000。
也就是要求取走最少的石头使得剩下的石头中取出若干堆的异或和都不为000。那我们就可以从大到小排序石头然后依次插入将无法插入的统计入答案即可。 codecodecode
#includecstdio
#includecstring
#includealgorithm
using namespace std;
int n,a[110],d[80];
long long ans;
bool add(int x){for(int i30;i0;i--)if((xi)1){if(d[i])x^d[i];else{d[i]x;return x0;}}return 1;
}
int main()
{scanf(%d,n);for(int i1;in;i)scanf(%d,a[i]);sort(a1,a1n);for(int in;i1;i--)ansa[i]*add(a[i]);printf(%lld,ans);
}