【博弈论】HDU 5754 Life Winner Bo
来源:互联网 发布:上海市人口普查数据 编辑:程序博客网 时间:2024/06/04 20:42
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5754
题目大意:
4种棋子,象棋中的 1王,2车,3马,4后,选其一,B和G轮流走,不能往左上走,一开始棋子在(1,1),谁先走到(n,m)谁赢,无法走动算平局D。
(n,m<=1000,case<=1000)
题目思路:
【博弈论】
这题博弈论。怎样都输为必败,只能走到必败的为必胜。
王:(王可以横竖斜走一格)如果n个m均为奇数先手必败,否则必胜。
从3x3格子看,当n和m均为奇数时先手必败,而且人总有办法一步从非均为奇走到均为奇。
车:(横竖走,格数不受限制)n=m先手必胜,否则后手必胜。
Nim问题。把横纵坐标看作两堆石子,每次可以从一堆取任意个。
马:(两横一竖,两竖一横)(n+m)%3!=2无解,m=n时先手胜,m=n+1或者n=m+1时后手胜,否则平局。
因为如果m=n,那么先手-2-1,后手就可以-1-2,重新回到m=n,而相差为1的时候先手把大的-2小的-1就到m=n的情况。
后:(横竖斜都可以走,格数不受限制)威佐夫博弈。有公式我不会推。只能找规律了。
把横纵坐标看作两堆石子,可以从任意一堆取任意个,或者从两堆同时取任意个,问谁先取完。
先n--,m--,先手必败局面(奇异局势)。前几个奇异局势:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。
看出a0=b0=0,ak是未在前面出现过的最小自然数,而bk=ak+k。
////by coolxxx//#include<iostream>#include<algorithm>#include<string>#include<iomanip>#include<memory.h>#include<time.h>#include<stdio.h>#include<stdlib.h>#include<string.h>//#include<stdbool.h>#include<math.h>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define abs(a) ((a)>0?(a):(-(a)))#define lowbit(a) (a&(-a))#define sqr(a) ((a)*(a))#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))#define eps (1e-8)#define J 10000000#define MAX 0x7f7f7f7f#define PI 3.1415926535897#define N 1004using namespace std;typedef long long LL;int cas,cass;int n,m,lll,ans;int f[N<<1];void work1(){if(n&1 && m&1)puts("G");else puts("B");}void work2(){if(n==m)puts("G");else puts("B");}void work3(){if((n+m)%3!=2)puts("D");else if(m==n)puts("G");else if(abs(n-m)==1)puts("B");else puts("D");}void work4(){if(f[n]==m)puts("G");else puts("B");}int main(){#ifndef ONLINE_JUDGE//freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);#endifint i,j,x;for(i=1,j=0;i<=1000;i++){if(f[i])continue;f[i]=i+j;f[i+j]=i;j++;}for(scanf("%d",&cas);cas;cas--)//for(scanf("%d",&cas),cass=1;cass<=cas;cass++)//while(~scanf("%s",s))//while(~scanf("%d",&n)){scanf("%d%d%d",&cass,&n,&m); if(cass==1)work1();else if(cass==2)work2();else if(cass==3)work3();else if(cass==4)work4();}return 0;}/*////*/
0 0
- HDU-5754 Life Winner Bo (博弈论)
- 【博弈论】HDU 5754 Life Winner Bo
- 博弈论——Life Winner Bo ( HDU 5754 )
- HDU 5754 Life Winner Bo(博弈论+dp)
- HDU 5754 Life Winner Bo
- HDU 5754 Life Winner Bo
- hdu 5754 Life Winner Bo
- 【HDU】5754 Life Winner Bo
- HDU 5754 Life Winner Bo (博弈)
- hdu 5754 Life Winner Bo(博弈)
- HDU 5754 Life Winner Bo(博弈)
- HDU 5754 Life Winner Bo (博弈)
- HDU-5754-Life Winner Bo-博弈
- HDU 5754 Life Winner Bo(博弈)
- HDU 5754 Life Winner Bo 博弈
- HDU-5754-Life Winner Bo(博弈)
- HDU 5754 Life Winner Bo 博弈
- HDU Life 5754 Winner Bo 各类博弈
- 【模拟】Codeforces 706A Beru-taxi
- Linux安装SonarQube
- 【数学】HDU 5753 Permutation Bo
- 【模拟】HDU 5752 Sqrt Bo
- 【模拟】HDU 5762 Teacher Bo
- 【博弈论】HDU 5754 Life Winner Bo
- laravel 学习笔记 I
- 【数学】HDU 5761 Rower Bo
- 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
- 【模拟】HDU 5774 Where Amazing Happens
- 【归并排序】【逆序数】HDU 5775 Bubble Sort
- 【动态规划】【KMP】HDU 5763 Another Meaning
- 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero
- 【动态规划】Vijos P1037 搭建双塔