hdu 4023 2011上海赛区网络赛C 贪心+模拟
以为是贪心,结果不是,2333
贪心最后对自己绝对有利的情况
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const int INF=0x3f3f3f3f; 11 const double eps=1e-5; 12 typedef long long ll; 13 #define cl(a) memset(a,0,sizeof(a)) 14 #define ts printf("*****\n"); 15 const int MAXN=1005; 16 int n,m,tt; 17 int a[MAXN]; 18 int main() 19 { 20 int i,j,k; 21 #ifndef ONLINE_JUDGE 22 freopen("1.in","r",stdin); 23 #endif 24 scanf("%d",&tt); 25 int ca=1; 26 while(tt--) 27 { 28 for(i=1;i<=15;i++) scanf("%d",a+i); 29 int st=0,sum[5],a1,a2; //st记录当前轮到谁了,sum[0]记录的是A的稳定步数,sum[1]记录的是B的稳定步数 30 cl(sum); 31 sum[0]+=a[1]*2; 32 sum[1]+=a[2]*2; 33 if(a[15]!=0) //只有一个的时候,谁先放谁的稳定步数会多一步 34 { 35 if(a[15]%2==1) 36 { 37 sum[0]++; 38 st^=1; 39 } 40 } 41 a1=a[5]+a[6]; //对A有利 42 a2=a[3]+a[4]; //对B有利 43 if(a1>a2) 44 { 45 int w=a1-a2; 46 sum[0]+=w/2; //A只能获得其中一半的稳定步数,B什么都得不到 47 if(w%2==1) 48 { 49 if(st==0) 50 { 51 sum[0]++; 52 } 53 st^=1; 54 } 55 } 56 else if(a2>a1) 57 { 58 int w=a2-a1; 59 sum[1]+=w/2; //B只能获得其中一半的稳定步数,A什么都得不到 60 if(w%2==1) 61 { 62 if(st==1) 63 { 64 sum[1]++; 65 } 66 st^=1; 67 } 68 } 69 a1=a[12]+a[11]+a[13]+a[14]; 70 st^=a1&1; //仅仅改变步数 71 a1=a[7]+a[8]; //对B最不利,B要多走这个 72 a2=a[9]+a[10]; //对A最不利 73 if(a1>a2) 74 { 75 int w=a1-a2; 76 sum[0]+=w/2; //A只能获得其中一半的稳定步数,B什么都得不到 77 if(w%2==1) 78 { 79 if(st==1) 80 { 81 sum[0]++; 82 } 83 st^=1; 84 } 85 } 86 else if(a2>a1) 87 { 88 int w=a2-a1; 89 sum[1]+=w/2; //B只能获得其中一半的稳定步数,A什么都得不到 90 if(w%2==1) 91 { 92 if(st==0) 93 { 94 sum[1]++; 95 } 96 st^=1; 97 } 98 } 99 printf("Case #%d: ",ca++); 100 if(sum[0]==sum[1]) 101 { 102 if(st)puts("Alice"); 103 else puts("Bob"); 104 } 105 else if(sum[0]>sum[1]) 106 puts("Alice"); 107 else puts("Bob"); 108 } 109 }