标签:石子 入门 int 三道 博弈论 Rg 博奕 巴什 define
首先同学们要学习一下博弈论...
然后这里是广杭电上的三道题:
1.最(zhui)简单(dang)的巴什博奕
题意
题目不多说了,就是两个人取 n 个石子,每次最多取 m 个,不能操作者输
分析
其实呢,这玩意儿看标题的链接里的就好了,就是个裸题,代码简短愉快
//by Judge
#include<bits/stdc++.h>
#define Rg register
int T,n,m;
int main(){ scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
puts(n%(m+1)?"first":"second");
} return 0;
}
2.很(heng)简单(dang)的巴什博奕
题意
题目不多说了,其实就是巴什博奕的变种
分析
首先我们可以看出,当前操作者面对 \(X=[n-k,n-1]\) 的情况时必胜
而普通巴什博奕是当前操作者面对剩下 \([1,k]\) 个石子时必胜,可以看到这里就是反了一下
于是我们把 n 减去 1 之后就可以当做普通的巴什博奕把加石子当做减石子做了,代码依旧短
//by Judge
#include<bits/stdc++.h>
#define Rg register
int n,m;
int main(){
while(~scanf("%d%d",&n,&m)&&n&&m)
puts((n-1)%(m+1)?"Tang":"Jiang");
return 0;
}
3.不是很难(nang)的SG 函数
题意
取 n 个石子,每次取 2 的幂次,不能操作者输
分析
SG 函数,标题里有链接
SG 函数定义直接上,裸题,这数据范围 \(n^2\) 也完全顶得住...代码相对上面小长
//by Judge
#include<bits/stdc++.h>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
int n; int g[1003],h[1003];
inline void solv(int n){
fp(i,1,n){ memset(h,0,(n+2)<<2);
for(Rg int j=1;j<=i;j<<=1)
h[g[i-j]]=1;
fp(j,0,i) if(!h[j]){
g[i]=j; break;
}
}
}
int main(){ solv(1000);
while(~scanf("%d",&n))
puts(g[n]?"Kiki":"Cici");
return 0;
}
标签:石子,入门,int,三道,博弈论,Rg,博奕,巴什,define 来源: https://www.cnblogs.com/Judge/p/11037194.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。