hdu 巴仕博弈(1846+2149+2897)
2015-12-02 22:26
197 查看
hdu1846:http://acm.hdu.edu.cn/showproblem.php?pid=1846
hdu2149:http://acm.hdu.edu.cn/showproblem.php?pid=2149
hdu2897:http://acm.hdu.edu.cn/showproblem.php?pid=2897
若当前石子共有n =(p+q)* r个,则A必胜,必胜策略为:A第一次取q个,以后每次若B取K个,A取(p+q-k)个,如此下去最后必剩下p个给B,所以A必胜。
若n =(p+q)* r + left个(1< left <= p)B必胜,必胜策略为:每次取石子活动中,若A取k个,则B去(p+q-k)个,那么最后剩下left个给A,此时left <= p,所以A只能一次去完,B胜。
若n =(p+q)* r + left个(p < left <= q),则A必胜,必胜策略为:A第一次取t(1<left – t <= p)个,以后每次B取k个,则A取(p+q-k)个,那么最后留下1< left – t <=p给B,则A胜。
#include <limits.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <algorithm> #include <iostream> #include <iterator> #include <queue> #include <stack> #include <string> #include <vector> #include <set> #include <map> //#define ONLINE_JUDGE #define eps 1e-6 #define INF 0x7fffffff //INT_MAX #define inf 0x3f3f3f3f //int?????????????????? #define FOR(i,a) for((i)=0;i<(a);(i)++) //[i,a); #define MEM(a) (memset((a),0,sizeof(a))) #define sfs(a) scanf("%s",a) #define sf(a) scanf("%d",&a) #define sfI(a) scanf("%I64d",&a) #define pf(a) printf("%d\n",a) #define pfI(a) printf("%I64d\n",a) #define pfs(a) printf("%s\n",a) #define sfd(a,b) scanf("%d%d",&a,&b) #define sft(a,b,c)scanf("%d%d%d",&a,&b,&c) #define for1(i,a,b) for(int i=(a);i<b;i++) #define for2(i,a,b) for(int i=(a);i<=b;i++) #define for3(i,a,b)for(int i=(b);i>=a;i--) #define MEM1(a) memset(a,0,sizeof(a)) #define MEM2(a) memset(a,-1,sizeof(a)) #define MEM3(a) memset(a,0x3f,sizeof(a)) #define LL __int64 const double PI = acos(-1.0); template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; } template<class T> inline T Min(T a, T b) { return a < b ? a : b; } template<class T> inline T Max(T a, T b) { return a > b ? a : b; } using namespace std; template<class T> T Mint(T a, T b, T c) { if (a>b) { if (c>b) return b; return c; } if (c>a) return a; return c; } template<class T> T Maxt(T a, T b, T c) { if (a>b) { if (c>a) return c; return a; } else if (c > b) return c; return b; } const int maxn=155; int T,n,m,k; int main() { #ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout); #endif sf(T); while(T--){ sfd(n,m); if(n<=m){ printf("first\n"); continue; } if((n)%(m+1)==0) printf("second\n"); else printf("first\n"); } return 0; }
hdu2149:http://acm.hdu.edu.cn/showproblem.php?pid=2149
#include <limits.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <algorithm> #include <iostream> #include <iterator> #include <queue> #include <stack> #include <string> #include <vector> #include <set> #include <map> //#define ONLINE_JUDGE #define eps 1e-6 #define INF 0x7fffffff //INT_MAX #define inf 0x3f3f3f3f //int?????????????????? #define FOR(i,a) for((i)=0;i<(a);(i)++) //[i,a); #define MEM(a) (memset((a),0,sizeof(a))) #define sfs(a) scanf("%s",a) #define sf(a) scanf("%d",&a) #define sfI(a) scanf("%I64d",&a) #define pf(a) printf("%d\n",a) #define pfI(a) printf("%I64d\n",a) #define pfs(a) printf("%s\n",a) #define sfd(a,b) scanf("%d%d",&a,&b) #define sft(a,b,c)scanf("%d%d%d",&a,&b,&c) #define for1(i,a,b) for(int i=(a);i<b;i++) #define for2(i,a,b) for(int i=(a);i<=b;i++) #define for3(i,a,b)for(int i=(b);i>=a;i--) #define MEM1(a) memset(a,0,sizeof(a)) #define MEM2(a) memset(a,-1,sizeof(a)) #define MEM3(a) memset(a,0x3f,sizeof(a)) #define LL __int64 const double PI = acos(-1.0); template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; } template<class T> inline T Min(T a, T b) { return a < b ? a : b; } template<class T> inline T Max(T a, T b) { return a > b ? a : b; } using namespace std; template<class T> T Mint(T a, T b, T c) { if (a>b) { if (c>b) return b; return c; } if (c>a) return a; return c; } template<class T> T Maxt(T a, T b, T c) { if (a>b) { if (c>a) return c; return a; } else if (c > b) return c; return b; } const int maxn=155; int T,n,m,k; int main() { #ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout); #endif while(~sfd(n,m)){ if(m>=n){ for(int i=n;i<m;i++){ printf("%d ",i); } printf("%d\n",m); } else{ if(n%(m+1)==0){ printf("none\n"); } else{ printf("%d\n",n%(m+1)); } } } return 0; }
hdu2897:http://acm.hdu.edu.cn/showproblem.php?pid=2897
若当前石子共有n =(p+q)* r个,则A必胜,必胜策略为:A第一次取q个,以后每次若B取K个,A取(p+q-k)个,如此下去最后必剩下p个给B,所以A必胜。
若n =(p+q)* r + left个(1< left <= p)B必胜,必胜策略为:每次取石子活动中,若A取k个,则B去(p+q-k)个,那么最后剩下left个给A,此时left <= p,所以A只能一次去完,B胜。
若n =(p+q)* r + left个(p < left <= q),则A必胜,必胜策略为:A第一次取t(1<left – t <= p)个,以后每次B取k个,则A取(p+q-k)个,那么最后留下1< left – t <=p给B,则A胜。
#include <limits.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <algorithm> #include <iostream> #include <iterator> #include <queue> #include <stack> #include <string> #include <vector> #include <set> #include <map> //#define ONLINE_JUDGE #define eps 1e-6 #define INF 0x7fffffff //INT_MAX #define inf 0x3f3f3f3f //int?????????????????? #define FOR(i,a) for((i)=0;i<(a);(i)++) //[i,a); #define MEM(a) (memset((a),0,sizeof(a))) #define sfs(a) scanf("%s",a) #define sf(a) scanf("%d",&a) #define sfI(a) scanf("%I64d",&a) #define pf(a) printf("%d\n",a) #define pfI(a) printf("%I64d\n",a) #define pfs(a) printf("%s\n",a) #define sfd(a,b) scanf("%d%d",&a,&b) #define sft(a,b,c)scanf("%d%d%d",&a,&b,&c) #define for1(i,a,b) for(int i=(a);i<b;i++) #define for2(i,a,b) for(int i=(a);i<=b;i++) #define for3(i,a,b)for(int i=(b);i>=a;i--) #define MEM1(a) memset(a,0,sizeof(a)) #define MEM2(a) memset(a,-1,sizeof(a)) #define MEM3(a) memset(a,0x3f,sizeof(a)) #define LL __int64 const double PI = acos(-1.0); template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; } template<class T> inline T Min(T a, T b) { return a < b ? a : b; } template<class T> inline T Max(T a, T b) { return a > b ? a : b; } using namespace std; template<class T> T Mint(T a, T b, T c) { if (a>b) { if (c>b) return b; return c; } if (c>a) return a; return c; } template<class T> T Maxt(T a, T b, T c) { if (a>b) { if (c>a) return c; return a; } else if (c > b) return c; return b; } const int maxn=155; int T,n,m,k; int p,q; int main() { #ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout); #endif while(~sft(n,p,q)){ int t=n%(p+q); if(!t) printf("WIN\n"); else{ if(t<=p) printf("LOST\n"); else printf("WIN\n"); } } return 0; }
相关文章推荐
- Qt中的布局
- 《谁动了我的奶酪》——[美]斯宾塞·约翰逊
- 开发流程
- 开源骇客文本编辑工具-atom之安装
- 《系统运维全面解析:技术、管理与实践》纠错汇总
- javase-反射构造函数学习记录
- tomcat配置https
- 日历签到demo 实现记录
- 神经科学方面的sci杂志和影响因子
- hdu 1115 Lifting the Stone【求多边形重心】
- 【Java基础】——HTML隐藏域
- JQuery的基本架构学习
- 《程序员面试宝典(第三版)》——欧立奇 / 刘洋 / 段韬
- python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】
- Redis集群明细文档(内容只说明了没有集群功能的redis)
- 执行数据库更新操作
- C_3:c语言的内存
- 《天才在左疯子在右》——高铭
- 事务——原子性、一致性、隔离性和持久性的理解
- Majority Element