NIM游戏

来源:互联网 发布:linux自杀命令 编辑:程序博客网 时间:2024/06/05 19:47


http://blog.csdn.net/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 longint 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);}}


0 0
原创粉丝点击