题目大意:有N堆石头,每堆石头数目在1到100之间,最多有10堆.两人分别取走石头.取石头的规则是:每次只能从1堆中取,每次取走至少1个.取过后还可以把这堆的石头任意分配到其它堆上(这些堆必须有石头,废话呵呵),当然也可以不分配.问给定这些石头堆的情况,两人轮流取,谁先取完谁胜利,问是先取的胜利还是后取的胜利.双方最优策略.
我就直接说结论了:
首先讨论石头堆两堆两堆相等的情况,例如x,x,y,y,z,z.6堆的情况.在这种情况下先取的必输,很简单,先取的那人怎么取后取的那人就怎么取(如果对方把石头分配到一堆上,你就分配到与之对应的堆上),总之保持这个相等的均势不变,这样到最后,后取的人就将取走最后一堆石头.
知道这个结论后,就可以把N堆中两两相等的堆去掉,来讨论互不相等的堆来.
第一,只有一堆x,第一个人直接全部取走就胜利了.(显然x,y,y的情况也是第一人胜,所以忽略相等的石头);
第二,x,y的形式(这里不妨假设递增,下同).第一人从第二堆中取走(y-x)个石头,这样两堆相等,最终还是第一人胜;
第三,x,y,z的形式.第一人从最后一堆中取走(z+x-y)个石头,再将(y-x)个石头移到第一堆上(z>y-x一定成立),这样还是第一人胜.

依此类推,移动个数最多的石头堆然后再分配总可以前面变成两两相等的情况.可见只要开始不全是两两相等,那先取者必胜

#include<stdio.h>
int main()
{ int n,i,j,k,d[10],f[10],q;
scanf("%d",&n);
while (n!=0)
{
j=0; q=0;
for (i=0;i<n;i++)
{ f[i]=1; scanf("%d",&k);for (j=0;j<q;j++) { if (d[j]==k) { f[j]++;break; } }if (j==q)d[q++]=k;
}
for (i=0,j=0;i<q;i++) if (f[i]%2!=0) j++; if (j==0) printf("0\n");else printf("1\n"); scanf("%d",&n);
}
return 0;
}

转载于:https://www.cnblogs.com/Chinese-Coder-Clarence/articles/2039334.html

ACM 1740 A New Stone Game http://acm.pku.cn/JudgeOnline/problem?id=1740相关推荐

  1. Biorhythms ACM PKU http://acm.pku.cn/JudgeOnline/problem?id=1006

    本题可以参考Wikipedia上线性同余同方程的解法,方法很简单手算一会就出来了.也可以参考中国同余定理:就这么多,下面我展示我的代码:#include <iostream> using ...

  2. Hansel and Grethel ACM pku http://acm.pku.cn/JudgeOnline/problem?id=1254

    1254是一道非常简单的关于平面直线相交问题的计算,只要注意一点: 斜率并不是所给出的指南针上的度数而应该是(90-degree):解决了此问题后所有的问题都迎刃而解了 我的代码如下: #includ ...

  3. PKU ACM 1258 Agri-Net http://acm.pku.edu.cn/JudgeOnline/problem?id=1258

    熟悉了prim算法后这样的题目在十分钟内真的可以解决!最小生成树,prim真的很有用! #include <iostream> using namespace std; const int ...

  4. pku acm 2140 Herd Sums http://acm.pku.edu.cn/JudgeOnline/problem?id=2140

    2140代码短小精悍:#include<stdio.h> int main() { int cnt=0,i; long s; scanf("%ld",&s); ...

  5. ACM PKU 2663 Tri Tiling http://acm.pku.edu.cn/JudgeOnline/problem?id=2663

    这题开始没有思路,后来看了流牛的解题报告才写出来: 递推公式我写一下: sign[i]         =        1           (当i == 0 时,具体为什么我也没有具体的说明方法 ...

  6. ACM PKU 2559 Largest Rectangle in a Histogram http://acm.pku.edu.cn/JudgeOnline/problem?id=2559

    关于覆盖,用DP是一种很不错的解决方法,时效也很不错.... 这题目把图一画就很明确了,没有说明的必要了. #include <iostream> using namespace std; ...

  7. ACM PKU 1111 Image Perimeters http://acm.pku.edu.cn/JudgeOnline/problem?id=1111

    广搜永远记住,下标不要错,COPY时一定要记得改下标: #include <iostream> #include <queue> using namespace std;cha ...

  8. ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019

    #include <iostream> #include <cmath> using namespace std;int Len(int n) // 求数字的长度函数: {re ...

  9. acm竞赛要掌握的知识 北大ACM分类 ACM网址大全

    图论 路径问题 0/1边权最短路径 BFS 非负边权最短路径(Dijkstra) 可以用Dijkstra解决问题的特征 负边权最短路径 Bellman-Ford Bellman-Ford的Yen-氏优 ...

最新文章

  1. tensorflow LSTM
  2. c++面对对象设计 2
  3. ACM入门之【拓扑排序】
  4. python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器
  5. 前端ui框架_推荐几个移动端前端UI框架
  6. linux系统 锐捷_linux系统的锐捷安装
  7. 园区网络的IP地址资源规划 使用VLSM(变长子网掩码)主机数量、子网段数量、主机总数如何计算
  8. PHP折算,PHP实现货币换算的方法
  9. 关于python的文献综述_什么是论文文献综述
  10. 安卓MediaCodec编码aac
  11. 开源社已加入群聊,思否 AIGC Hackathon 扩列
  12. tcp 粘包 丢包 解决方案
  13. 时间序列平稳性的统计检验
  14. 瑞萨单片机CS+ for CC 与Renesas Flash Programme软件的使用-学习记录
  15. hash 算法 (转)
  16. 散列函数(哈希函数,Hash Function)
  17. 同步和异步的区别是什么?
  18. Ubuntu下使用opencv完成图像程序编程操作
  19. oracle卸载完服务,ORACLE卸载安装服务启动
  20. oracle 获取每周五,oracle如何根据传入的时间参数,得到这个参数所在周的周一至周五的日期和星期数...

热门文章

  1. mysql2008 limit,在SQL Server中实现 Limit m, n 的功能
  2. mysql触发器菜鸟_mysql触发器学习
  3. linux删除zlib无法远程,linux zlib默认装在哪里
  4. python夹角余弦雷达图_性能可靠,可以全方位扫描的“千里眼”——先进的相控阵雷达...
  5. linux应用程序跑飞,linux 试题
  6. date数据类型的正确格式_说说数据类型 上篇日期
  7. DL练习1:基于boston_house_prices的BP神经网络
  8. 和12岁小同志搞创客开发:如何选择合适的控制器?
  9. HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记
  10. 深度学习--TensorFlow(5)BP神经网络(混淆矩阵、准确率、精确率、召回率、F值)