/ Randle /

记录详情

Accepted

/in/foo.cc: In function 'int main()':
/in/foo.cc:87:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if(((unsigned int)1<<k)<=a[i]&&(a[i]&((unsigned int)1<<k)))
       ~~~~~~~~~~~~~~~~~~~~^~~~~~
/in/foo.cc:77:10: warning: unused variable 's' [-Wunused-variable]
  int i,k,s;
          ^
# 状态 耗时 内存占用
#1 Accepted 5ms 384.0 KiB
#2 Accepted 5ms 496.0 KiB
#3 Accepted 5ms 384.0 KiB
#4 Accepted 5ms 500.0 KiB
#5 Accepted 5ms 492.0 KiB
#6 Accepted 5ms 488.0 KiB
#7 Accepted 6ms 512.0 KiB
#8 Accepted 5ms 604.0 KiB
#9 Accepted 5ms 640.0 KiB
#10 Accepted 5ms 620.0 KiB

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[1001],v[32][1001],h[1001],ans2[32],b[1001][31];
long long ans=0;
struct node
{
	int a,data;
};
inline const void read(int &a)
{
	a=0;
	char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9')
	{
		a=(a<<1)+(a<<3)+c-'0';
		c=getchar();
	}
}
bool com1(node aa,node bb)
{
	return aa.data<bb.data;
}
void find(node *x,int len)
{
	node temp[1001];
	int jk=0;
	sort(x+1,x+1+len,com1);
	if(x[1].data==0)
	{
		h[x[1].a]=1;
		return;
	}
	temp[++jk].a=x[1].a;
	for(int i=1;i<=b[x[1].a][0];i++)
	{
		if(b[x[1].a][i]<x[1].data)
		{
			//cout<<"**\n";
		    temp[jk].data=b[x[1].a][i];
		    break;
		}
	}
	for(int i=2;i<=len;i++)
	{
		if(x[i].data==x[i-1].data)
		{
			temp[++jk].a=x[i].a;
			for(int o=1;o<=b[x[i].a][0];o++)
			{
				if(b[x[i].a][o]<x[i].data)
				{
					temp[jk].data=b[x[i].a][o];
					break;
				}
			}
		}
		else break;
	}
	if(jk==1)
	{
		h[temp[jk].a]=1;
		return;
	}
	else 
	{
	    find(temp,jk);
	}
}
bool com(int a,int b)
{
	return a>b;
}
int main()
{
	//freopen("ji.in.txt","r",stdin);
	int i,k,s;
	memset(v,0,sizeof(v));
	memset(h,0,sizeof(h));
	memset(ans2,0,sizeof(ans2));
	read(n);
	for(i=1;i<=n;i++) read(a[i]);
	for(i=1;i<=n;i++)
	{
		for(k=31;k>=0;k--)
		{
			if(((unsigned int)1<<k)<=a[i]&&(a[i]&((unsigned int)1<<k)))
			{
				b[i][++b[i][0]]=k;
				v[k][++v[k][0]]=i;
			}
		}
	}
	for(i=31;i>=0;i--)
	{
		if(v[i][0])
		{
			if(v[i][0]==1&&!h[v[i][1]])
			{
				ans2[i]=1;
				h[v[i][1]]=1;
			}
			else 
			{
				node temp[1001];
				int jk=0;
				for(int j=1;j<=v[i][0];j++)
				{
					if(!h[v[i][j]])
					{
					    temp[++jk].a=v[i][j];
					    int mm=0;
					    for(int o=1;o<=b[v[i][j]][0];o++)
			    		{
				    		if(!ans2[b[v[i][j]][o]]&&b[v[i][j]][o]<=i)
				    		{
					    		mm++;
						    	if(mm==2)
						    	{
						    	    temp[jk].data=b[v[i][j]][o];
					    		    break;
				    			}
				    		}
				    	}
					}
				}
				if(jk)
				{
					ans2[i]=1;
				    find(temp,jk);
				}
			}	
		}
	}
	for(i=1;i<=n;i++)
	{
		if(!h[i])
		ans2[0]=abs(ans2[0]-1);
	}
	for(i=0;i<=31;i++)
		if(ans2[i])
		    ans+=((unsigned int)1<<i);
	cout<<ans<<endl;
	return 0;
}

信息

递交者
类型
递交
题目
奇数异或(国家集训队)
题目数据
下载
语言
C++
递交时间
2017-11-07 21:27:45
评测时间
2017-11-07 21:27:45
评测机
分数
100
总耗时
53ms
峰值内存
640.0 KiB