记录编号 533481 评测结果 AAAAAAAAATTTTTTAAATT
题目名称 石子游戏 最终得分 60
用户昵称 Gravatarbilibili 是否通过 未通过
代码语言 C++ 运行时间 17.584 s
提交时间 2019-06-26 19:06:16 内存使用 20.53 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int dis[600500],xorans,a[600500],n,vis[600500];
struct QNode{
    int dis,Node;
    bool operator < (const QNode &b) const{
        return dis>b.dis;
    }
};
priority_queue<QNode> q;
void dij(int s){
    memset(dis,0x3f,sizeof(dis));
    dis[s]=0;
    q.push((QNode){0,s});
    while(!q.empty()){
        QNode x=q.top();
        q.pop();
        if(vis[x.Node])
            continue;
        vis[x.Node]=true;
		for(int i=1;i<=n;i++){
			if(dis[a[i]^x.Node]>dis[x.Node]+1){
				dis[a[i]^x.Node]=dis[x.Node]+1;
				q.push((QNode){dis[a[i]^x.Node],a[i]^x.Node});
			}
		}
    }
}
int main(){
	freopen("nim.in","r",stdin);
	freopen("nim.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
		xorans^=a[i];
	dij(0);
	printf("%d\n",n-dis[xorans]);
	return 0;
}