zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    隔行扫描 和 逐行扫描
    CSS3--关于z-index不生效问题
    vue与其他框架对比
    跨域(转)
    vue 事件修饰符(阻止默认行为和事件冒泡)
    vue 3.0新特性
    bash leetcode
    数据库
    css排版
    盒模型
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3252309.html
Copyright © 2011-2022 走看看