hdu 4023 Game 博弈论

思路:

将15种分成5类:

1.1和2为一类;

2.3,4,5,6为一类;

3.7,8,9,10为一类;

4.11,12,13,14,15为一类;

5.15为一类。

比较各类的优先级,就会发现放置的顺序为5->2->4->3->1.

代码如下:

  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 50000

 11 using namespace std;

 12 int p[16];

 13 int fun1(int n)

 14 {

 15     if(n&1) return n-1;

 16     return n;

 17 }

 18 int fun2(int n)

 19 {

 20     if(n&1) return n+1;

 21     return n;

 22 }

 23 int main(){

 24     int t,a,b,k,i,j,ca=0,ans;

 25     scanf("%d",&t);

 26     while(t--){

 27         a=b=0;

 28         int num1,num2,num34,num56,num78,num910,num11_14,num15;

 29         bool flag=0;

 30         for(i=1;i<=15;i++)

 31             scanf("%d",&p[i]);

 32         if(p[1]>p[2]) num1=p[1]-p[2],num2=0;

 33         else num2=p[2]-p[1],num1=0;

 34         if(p[3]+p[4]>p[5]+p[6]) num34=p[3]+p[4]-p[5]-p[6],num56=0;

 35         else num56=p[5]+p[6]-p[4]-p[3],num34=0;

 36         if(p[7]+p[8]>p[9]+p[10]) num78=p[7]+p[8]-p[9]-p[10],num910=0;

 37         else num910=p[9]+p[10]-p[8]-p[7],num78=0;

 38         num11_14=p[11]+p[12]+p[13]+p[14];

 39         num15=p[15];

 40         if(p[15]&1){

 41             a+=2;

 42             flag=1;

 43         }

 44         if(num34){

 45             if(flag){

 46                 a+=num34/2;

 47                 b+=fun2(num34);

 48                 if(num34&1) flag=0;

 49             }

 50             else{

 51                 a+=(num34+1)/2;

 52                 b+=fun1(num34);

 53                 if(num34&1) flag=1;

 54             }

 55         }

 56         else{

 57             if(flag){

 58                 b+=(num56+1)/2;

 59                 a+=fun1(num56);

 60                 if(num56&1) flag=0;

 61             }

 62             else{

 63                 a+=fun2(num56);

 64                 b+=num56/2;

 65                 if(num56&1) flag=1;

 66             }

 67         }

 68         if(num11_14&1){

 69             if(flag) b++;

 70             else a++;

 71             flag=!flag;

 72         }

 73         if(num78){

 74             if(flag){//B

 75                 b+=(num78+1)/2;

 76                 a+=num78;

 77                 if(num78&1) flag=0;

 78             }

 79             else{//A

 80                 a+=num78;

 81                 b+=num78/2;

 82                 if(num78&1) flag=1;

 83             }

 84         }

 85         else{

 86             if(!flag){ //A

 87                 a+=(num910+1)/2;

 88                 b+=num910;

 89                 if(num910&1) flag=1;

 90             }

 91             else{//B

 92                 b+=num910;

 93                 a+=num910/2;

 94                 if(num910&1) flag=0;

 95             }

 96         }

 97         a+=num1*2;

 98         b+=num2*2;

 99         printf("Case #%d: ",++ca);

100         puts(a>b?"Alice":"Bob");

101     }

102     return 0;

103 }
View Code

 

你可能感兴趣的:(game)