hdu5754 Life Winner Bo 各种博弈(多校)
来源:互联网 发布:mac os 10.13 iso下载 编辑:程序博客网 时间:2024/06/05 05:43
题意:
给你一个n∗m的棋盘,然后给你4种棋子,分别是:
1.王:能横着走,或者竖着走,或者斜着走,每次可以走1格
2.车:可以横着走或者竖着走,每次可以走无数格
3.马:走日字形,例如:如果现在在(1,1),可以走到(2,3),即先走一格直线,然后斜着走一格
4.王后:可以横着走,或者竖着走,或者斜着走,每次可以走无数格
所有棋子在走的时候只能向右或向下走,不可后退,谁先走到(n,m)点,谁赢.
分析:
1.王:从必败点递推,就能发现规律了。
2.车:nim博弈,横着走n-1步,竖着走m-1步,相当于从两堆n-1和m-1的石子中取石子。
3.马:这个是画图,找规律,要注意一个玩家发现自己会输并且不是必败点的话他可以选则平局,这题要从(1,1)点往后推必败点和必胜点。具体的推导的话可以参考这篇博客:http://blog.csdn.net/helloiamclh/article/details/52039236
4.王后:威佐夫博弈
#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ int T;scanf("%d",&T); int t,n,m; while(T--){ scanf("%d%d%d",&t,&n,&m); if(t==1){ if(n%2==0||m%2==0)puts("B"); else puts("G"); } else if(t==2){ if((n^m)==0)puts("G"); else puts("B"); } else if(t==3){ if(n==m&&n%3==1)puts("G"); else if(m==n-1&&n%3==0)puts("B"); else if(n==m-1&&m%3==0)puts("B"); else puts("D"); } else if(t==4){ n--;m--; int k=abs(n-m); int minn=min(n,m); int ak=floor(k*(1.0+sqrt(5.0))/2); if(ak==minn)puts("G"); else puts("B"); } } return 0;}
0 0
- hdu5754 Life Winner Bo 各种博弈(多校)
- hdu5754 多校3 Life Winner Bo【博弈】
- hdu5754 Life Winner Bo (博弈混合)
- hdu5754 Life Winner Bo(博弈)
- hdu5754 Life Winner Bo 博弈
- 博弈--hdu5754 Life Winner Bo
- HDU5754 Life Winner Bo
- HDU 5754 Life Winner Bo(多校3 各种博弈)
- 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(博弈)
- 2016多校联赛3C (hdu5754) Life Winner Bo
- HDU-5754-Life Winner Bo-博弈
- HDU 5754 Life Winner Bo 博弈
- 一道打印M的面试题
- HDOJ 2544 最短路(DIJ+优先队列)
- Python 07:Python函数
- myBatis 操作数据库
- java并发模型
- hdu5754 Life Winner Bo 各种博弈(多校)
- 多线程小知识2
- (学习笔记)实用as快捷键
- 创建Java内部类实例
- bootstrape的CSS样式一
- Tarjin算法
- 嵌入式开发第17天(数据结构、链表的操作)
- poj3641Pseudoprime numbers Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 8854Accepte
- 机械键盘与普通键盘的区别