C语言纠错大赛的一道题,正好拿来补博弈~~

给的代码写的略奇葩。。不过还是直接在上面改了。。


题目链接:

http://codeforces.com/problemset/problem/549/C

题意:

给你n个数,两个人依次拿走一个数,最后剩下的k个数的和若为奇数,则先手赢,否则后手赢。问谁赢?

分析:

看最后依次操作:此时有k+1个数。。。

最后一次操作是先手,则

  • 剩下的全为偶数,先手必输
  • 剩下的全为奇数且数字个数为偶数,拿走一个后,先手赢,否则后手赢。
  • 剩下的数有奇有偶,则先手在奇数偶数中随便选一个必可以使最后和为奇数,先手赢。

最后一次操作是后手,则

  • 情况与先手正好相反,但是注意有奇有偶的情况,后手肯定有办法使得剩下的和为偶数,所以还是后手赢。
  • 就只有剩下的全为奇数且个数也为偶数的时候,后手才会输。。。

代码:

#include<algorithm>
#include<cstdio>
using namespace std;
int n1,n2,n,k,even,odd,i,c,f;
int Solve(){
if (n==k) return odd % 2;
if (n1>n2){//s
if (n2>=odd) return 0;
if (n2<even) return 1;
return k % 2;//修改的部分
}
else{
if (n1>=even) return k % 2;//修改的部分
return 0;
}
}
int main(){
while (scanf("%d%d",&n,&k)==2){
odd=0;
even=0;
n1=(n-k+1)/2;
n2=(n-k)/2;
for (i=1;i<=n;i++){
scanf("%d",&c);
if (c % 2) odd++;
else even++;
}
f=Solve();
if (f) printf("Stannis\n");
else printf("Daenerys\n");
}
return 0;
}

最新文章

  1. javascript 代码可读性
  2. 14.KVM安装之脚本和镜像目录树准备
  3. 一段检测IP设备是否在线的代码
  4. 20160805_CentOS6_控制台切换
  5. tomcat如何简单调优
  6. MySQL 行子查询(转)
  7. 解放程序猿宝贵的右手(或者是左手) ——Android自动化测试技巧
  8. POJ1700(过河问题)
  9. SQL Server 备份和还原
  10. LeetCode 2. Add Two Numbers 解题报告
  11. sqlserver2005公布与订阅配置步骤
  12. bzoj 3745: [Coci2015]Norma
  13. Linux 虚拟网络设备 veth-pair 详解,看这一篇就够了
  14. Nero8刻录引导系统光盘镜像图文教程
  15. 苹果手机的SB系列(2)为什么不能重命名?
  16. Charles篡改后台数据
  17. 使用Python进行并发编程
  18. 2017-2018-2 20155309 南皓芯 Exp5 MSF基础应用
  19. 用“网建”平台发手机短信的C#代码
  20. tableView header Refresh 下拉刷新/上拉加载

热门文章

  1. CMSIS的简介
  2. java将一个List赋值给另一个List的4种方法
  3. 1+1/2+1/3+...+1/n为素数的证明
  4. 运行外部exe
  5. Chrome安装助手踩坑
  6. Angular JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)
  7. python 变量引用
  8. java 生成二维码工具
  9. 【转】Unable to load native-hadoop library for your platform(已解决)
  10. 《C++专项练习》 — (2)