⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cowxor.cpp

📁 dd牛的usaco源代码!对学习算法
💻 CPP
字号:
/*
ID: dd.ener1
PROG: cowxor
LANG: C++
*/

#include <cstdio>
#include <cstring>
using namespace std;

const int maxn=101000;

int N;
int xr[maxn];
int prev[maxn][2];
int best[maxn];
int res;

int main(){	
	freopen("cowxor.in","r",stdin);
	scanf("%d",&N);
	xr[0]=0;
	for(int i=0;i<N;++i){
		int n;
		scanf("%d",&n);
		xr[i+1]=xr[i]^n;
	}
	for(int i=0;i<=N;++i){
		prev[i][0]=i-1;
		prev[i][1]=-1;
		best[i]=i-1;
	}

	res=0;
	int w=22;
	while(w--){
		for(int i=1;i<=N;++i)
			if(prev[i][0]==-1)
				prev[i][1]=-1;
			else{
				int tmp[2];
				if(xr[i]>>w!=xr[prev[i][0]]>>w){
					tmp[0]=prev[prev[i][0]][1];
					tmp[1]=prev[i][0];
				}
				else{
					tmp[0]=prev[i][0];
					tmp[1]=prev[prev[i][0]][1];
				}
				prev[i][0]=tmp[0];
				prev[i][1]=tmp[1];
			}

        bool fnd=false;
        for(int i=1;i<=N;++i)
        	if(best[i]>=0&&
        	(((xr[i]>>w)&1)!=((xr[best[i]]>>w)&1)||prev[best[i]][1]>=0)){
        		fnd=true;
        		break;
			}
        if(fnd){
			res|=1<<w;
			for(int i=1;i<=N;++i)
				if(best[i]>=0&&
				((xr[i]>>w)&1)==((xr[best[i]]>>w)&1))
					best[i]=prev[best[i]][1];
		}
	}

	int a;
	for(a=1;best[a]==-1;++a);
	freopen("cowxor.out","w",stdout);
	printf("%d %d %d\n",res,best[a]+1,a);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -