http://blog.youkuaiyun.com/dinosoft/article/details/6795700
NIM两道题:
hdu 1850:http://acm.hdu.edu.cn/showproblem.php?pid=1850
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 1010
#define ll long long
int p[110];
int main()
{
int n;
while(scanf("%d",&n),n)
{
int i,j,k;
for(i=0;i<n;i++)
scanf("%d",&p[i]);
int t=0;
for(i=0;i<n;i++)
t^=p[i];
//printf("%d\n",t);
int ans=0;
for(i=0;i<n;i++)
{
if((t^p[i])<p[i])
ans++;
}
printf("%d\n",ans);
}
}
zoj 3529: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4464
#include<cstdio>
#include<cstring>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
#define ll long long
#define N 5000010 //质数范围
int prime[10000000]; //prime[0]=2,prime[1]=3,prime[2]=5,……
void init_prime()
{
int i, j;
for(i = 2;i <= sqrt(N*1.0); ++i)
{
if(!prime[i])
for(j = i * i; j < N; j += i)
prime[j] = 1;
}
j = 0;
for(i = 2;i <= N; ++i)
if(!prime[i])
prime[j++] = i;
}
int p[100010];
int n;
void solve()
{
int i,j,k,t,ans;
for(i=0;i<n;i++)
{
t=p[i];
ans=0;
for(j=0;prime[j]*prime[j]<=t;j++)
{
while(t%prime[j]==0)
{
ans++;
t/=prime[j];
}
}
if(t!=1)
ans++;
p[i]=ans;
}
}
int main()
{
int he=0;
init_prime();
while(scanf("%d",&n)!=EOF)
{
he++;
int i,j,k;
for(i=0;i<n;i++)
scanf("%d",&p[i]);
solve();
int t=0;
for(i=0;i<n;i++)
t^=p[i];
if(t==0)
{
printf("Test #%d: Bob\n",he);
continue;
}
int ans=0;
for(i=0;i<n;i++)
{
if((t^p[i])<p[i])
{
ans=i;
break;
}
}
printf("Test #%d: Alice %d\n",he,ans+1);
}
}