zoukankan      html  css  js  c++  java
  • ZOJ 3529

    博弈问题

    这一题其实就是Nim游戏

    因为每一个数都可以写成N=p1^num1*p2^num2*...*pn^numn(pi为素数)的形式

    每次变成一个因数,就相当于取走一个或者多个pi

    所以每一个number就相当于Nim中的有(num1+num2+...numn)个石头

    这样就变成了裸了Nim游戏

    直接套模板

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <string.h>
     5 using namespace std;
     6 const int inf=5000001;
     7 bool isprime[5000001];
     8 int a[100002],prime[2000],m,n,num[100002];
     9 void getp(){
    10     memset(isprime,1,sizeof(isprime));
    11     isprime[1]=0;
    12     int k=0;
    13     int f=(int)sqrt((double)inf);
    14     for(int i=2;i<f;i++){
    15         if(isprime[i]){
    16             prime[k++]=i;
    17             for(int j=i*i;j<inf;j+=i){isprime[j]=0;}
    18         }
    19     }
    20 
    21 }
    22 void getnum(){
    23     memset(num,0,sizeof(num));
    24     for(int i=1;i<=n;i++){
    25         if(isprime[a[i]]){num[i]=1;continue;}
    26         for(int j=0;prime[j]<=a[i];j++){
    27             if(isprime[a[i]]){num[i]++;break;}
    28             if(a[i]%prime[j])continue;
    29             while(a[i]%prime[j]==0){
    30                 num[i]++;
    31                 a[i]/=prime[j];
    32             }
    33         }
    34     }
    35 }
    36 int main()
    37 {
    38     int ks=1;
    39     getp();
    40     while(scanf("%d",&n)!=EOF){
    41         m=0;
    42         for(int i=1;i<=n;i++){
    43             scanf("%d",a+i);
    44         }
    45         getnum();
    46         for(int i=1;i<=n;i++){
    47             m=m^num[i];
    48         }
    49         if(m==0){printf("Test #%d: Bob
    ",ks++);continue;}
    50         int i;
    51         for(i=1;i<=n;i++){
    52             if((m^num[i])<num[i])break;
    53         }
    54         if(i!=n+1)printf("Test #%d: Alice %d
    ",ks++,i);
    55         else printf("Test #%d: Bob
    ",ks++);
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    python取一个字符串中最多出现次数的词
    python openpyxl 操作 excel
    微信公众平台开发
    Oracle
    微信公众平台开发
    微信公众平台开发
    Html 转义字符那些事儿
    Linq DataTable表连接
    使用WeUI+JS 的label包含input触发两次的问题
    Html 图片上传
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/4086114.html
Copyright © 2011-2022 走看看