2016 Multi-University Training Contest 3
1003
题意:国际象棋 王 后 马 单 四种类型的走法。B先手G后手,轮流走。n*m的棋盘。谁先走到(n,m)谁赢,输出赢的人,平局D
比赛wrong12发。。。。。
和题解说的差不多
后 的时候就是威佐夫博弈
1 // #pragma comment(linker, "/STACK:102c000000,102c000000") 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <sstream> 6 #include <string> 7 #include <algorithm> 8 #include <list> 9 #include <map> 10 #include <vector> 11 #include <queue> 12 #include <stack> 13 #include <cmath> 14 #include <cstdlib> 15 // #include <conio.h> 16 using namespace std; 17 #define clc(a,b) memset(a,b,sizeof(a)) 18 #define inf 0x3f3f3f3f 19 #define lson l,mid,rt<<1 20 #define rson mid+1,r,rt<<1|1 21 const int N = 100010; 22 const int M = 1e6+10; 23 const int MOD = 1e9+7; 24 #define LL long long 25 #define LB long double 26 #define mi() (l+r)>>1 27 double const pi = acos(-1); 28 const double eps = 1e-8; 29 void fre() { 30 freopen("in.txt","r",stdin); 31 } 32 // inline int r() { 33 // int x=0,f=1;char ch=getchar(); 34 // while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();} 35 // while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f; 36 // } 37 38 int main(){ 39 int T; 40 scanf("%d",&T); 41 int t,n,m; 42 while(T--){ 43 scanf("%d%d%d",&t,&n,&m); 44 if(n>m) swap(n,m); 45 if(t==1){ 46 if(n%2==1&&m%2==1){ 47 printf("G\n"); 48 continue; 49 } 50 else{ 51 printf("B\n"); 52 continue; 53 } 54 } 55 else if(t==2){ 56 if(n==m){ 57 printf("G\n"); 58 continue; 59 } 60 else{ 61 printf("B\n"); 62 continue; 63 } 64 } 65 else if(t==3){ 66 if(n==m&&n%3==1) printf("G\n"); 67 else if(m-n==1&&n%3==2&&m%3==0) printf("B\n"); 68 else printf("D\n"); 69 } 70 else{ 71 m = m - 1; 72 n = n - 1; 73 int c=min(m,n); 74 double k = (1.0+sqrt(5))/2.0; 75 int tem=(int)(abs(n-m)*(k)); 76 if(c==tem){ 77 printf("G\n"); 78 } 79 else{ 80 printf("B\n"); 81 } 82 continue; 83 } 84 } 85 return 0; 86 }