• hdu 4559 涂色游戏 博弈论


    构造SG函数:sg[i]表示2*i的sg值!!

    代码如下:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<iomanip>
     5 #include<cmath>
     6 #include<cstring>
     7 #include<vector>
     8 #define ll __int64
     9 #define pi acos(-1.0)
    10 #define MAX 5000
    11 using namespace std;
    12 int an[2][MAX],sg[MAX];
    13 bool vis[MAX];
    14 int getsg(int x)
    15 {
    16     int i;
    17     if(sg[x]>=0) return sg[x];
    18     memset(vis,0,sizeof(vis));
    19     for(i=0;i<=x-i-1;i++)
    20         vis[getsg(i)^getsg(x-i-1)^1]=1;
    21     for(i=0;i<=x-i-2;i++)
    22         vis[getsg(i)^getsg(x-i-2)]=1;
    23     i=0;
    24     while(vis[i]) i++;
    25     return sg[x]=i;
    26 }
    27 int main(){
    28     int t,m,n,s,c,ans,i,k=0,len;
    29     memset(sg,-1,sizeof(sg));
    30     sg[0]=0;
    31     for(i=1;i<=4747;i++) sg[i]=getsg(i);
    32     scanf("%d",&t);
    33     while(t--){
    34         scanf("%d %d",&n,&m);
    35         memset(an,0,sizeof(an));
    36         for(i=0;i<m;i++){
    37             scanf("%d %d",&s,&c);
    38             an[s-1][c-1]=1;
    39         }
    40         ans=0;len=0;
    41         for(i=0;i<n;i++){
    42             if(an[0][i]||an[1][i]){
    43                 ans^=sg[len];
    44                 ans^=an[0][i];
    45                 ans^=an[1][i];
    46                 len=0;
    47             }
    48             else len++;
    49         }
    50         ans^=sg[len];
    51         printf("Case %d: %s
    ",++k,ans?"Alice":"Bob");
    52     }
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    Linux I2C驱动程序设计
    I2C裸机驱动程序设计
    Linux串口驱动程序设计
    Linux平台总线设备驱动
    Linux总线设备驱动模型
    Linux内核同步机制
    Linux设备驱动开发基础--阻塞型设备驱动
    模型评估方法和性能指标
    机器学习——XGBoost
    机器学习——GBDT
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3252309.html
Copyright © 2020-2023  润新知