NYOJ 取石子总结 |
您所在的位置:网站首页 › 江西哪里出石子最多 › NYOJ 取石子总结 |
转载自:http://blog.csdn.net/acmlzq/article/details/51212297 nyoj的取石子有好多道,除了两道难度为6的,剩下的在这儿简单总结一下结论。 取石子(一) 有一堆石子共有n个,A和B轮流取,A先,每次最少取1个,最多取m个,先取完者胜,A,B足够聪明,问谁先胜? 比较简单的巴什博弈,若n%(m+1)!=0,A胜,否则B胜。 取石子(七) n个石子摆成一圈,A和B轮流取,每次可以从中取一个或相邻两个,先取完者胜,A先取,问谁胜? 若n==1||n==2 则A胜,否则B胜。 取石子(四) 两堆石子分别n,m(n>=m)个,A和B轮流取,有两种取法,一是在任意的一堆中取走任意多的石子,最少为一;二是在两堆中同时取走相同数量的石子。A先取,先取完者胜,问A是否胜?(胜输出1,负为0) 著名的威佐夫博奕,题解链接:威佐夫博弈, 结论:若(n-m)*(sqrt(5.0)+1.0)/2.0!=m ,则A胜,否则负。 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=161 #include #include #include #include using namespace std; double solve(int n) { double m=(double)n; return (sqrt(5)+1)/2*m; } int main() { int a,b; while(~scanf("%d%d",&a,&b)) { if(a>b) swap(a,b); if((int)solve(b-a)==a) { printf("0\n"); } else { printf("1\n"); } } return 0; } Wyothoff Game 题意同上取石子(四),不过现在要求前n(n=b) break; if(b>temp+i&&a==temp)//从b中拿石子,且拿完b比a大 printf("%d %d\n",temp,temp+i); else if(a==temp+i)//从b中拿石子,但拿完b比a小 printf("%d %d\n",temp,temp+i); else if(b==temp+i&&a>temp)//从a中拿,拿完肯定a还是小于b printf("%d %d\n",temp,temp+i); } } } return 0; } 取石子(六) 有n堆石子,每堆石子都有任意个,A和B轮流从取任意堆里取一定的石子,每次只能从一堆里至少取一个,A先取,先取完者胜,问谁胜? 此题为尼姆博弈,题解链接:尼姆博弈; 结论:将n个数异或一遍,若不为0,则A胜,否则B胜。 #include int main() { int s,n; scanf("%d",&s); while(s--) { scanf("%d",&n); int sum=0; int x; for(int i=0;i1) num++; } if((ans&&num)||(!ans&&!num)) printf("Yougth\n"); else printf("Hrdv\n"); } return 0; }取石子(二) 题意同上上取石子(六),不过限定了每堆石子最多可以取的石子数(最少为一),问A是胜还是败?(第一行是一个整数T表示测试数据的组数(T |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |