博弈论 —— The Game of Parity ( CodeForces 549C )
2016-07-14 13:21
507 查看
题目链接:
http://codeforces.com/problemset/problem/549/C
分析:
这道博弈论重在分清楚情况,偶数人数的城多一座少一座并不会改变最终剩余人数的奇偶性,只有奇数人数的城市的数量会对结果产生影响。
题解:
首先先算出奇数人数城市的数量Odd和偶数人数城市的数量Even,再算出可以操作的总次数T。
如果T/2大于Odd,那么Daenerys就可以把所有奇数城市的城市拿走并获得胜利;
如果T/2小于Odd,我们便进行下一步分析,判断最后一个操作的人是谁并且还需要考虑这时偶数人数城市的数量是否被取尽(如果被取尽,那么最后一步操作肯定会改变剩余人数奇偶性)。
最后我们还要考虑一种情况,如果操作数为0的话,这个时候奇数人数城市的个数就能决定整个奇偶性。
AC代码:
http://codeforces.com/problemset/problem/549/C
分析:
这道博弈论重在分清楚情况,偶数人数的城多一座少一座并不会改变最终剩余人数的奇偶性,只有奇数人数的城市的数量会对结果产生影响。
题解:
首先先算出奇数人数城市的数量Odd和偶数人数城市的数量Even,再算出可以操作的总次数T。
如果T/2大于Odd,那么Daenerys就可以把所有奇数城市的城市拿走并获得胜利;
如果T/2小于Odd,我们便进行下一步分析,判断最后一个操作的人是谁并且还需要考虑这时偶数人数城市的数量是否被取尽(如果被取尽,那么最后一步操作肯定会改变剩余人数奇偶性)。
最后我们还要考虑一种情况,如果操作数为0的话,这个时候奇数人数城市的个数就能决定整个奇偶性。
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { int n, k; while(cin >> n >> k) { int o=0, e=0; for(int i=0;i<n;i++) { int x; cin >> x; if(x&1) o++; else e++; } //cout << o << ":" << e << endl; int res = n - k; int flag = 0; if(res>0) { if(res/2>=o) { flag = 0; } else { if(res&1) { if(res/2>=e && !(k&1) ) flag = 0; else flag = 1; } else { if(res/2>=e && (k&1)) flag = 1; else flag = 0; } } } else { if(o&1) flag = 1; else flag = 0; } if(flag) cout << "Stannis" << endl; else cout << "Daenerys" << endl; } return 0; }
相关文章推荐
- 【考研】:考研科学计划
- itop修改附件上传大小限制
- JAVA中int、String的类型转换
- Java线程池
- 【Unity3D自学记录】Unity5之实时GI环境光
- 错误提示--更改tomcat端口号方法,Several ports (8005, 8080, 8009)
- ubuntu root 用户登陆登陆办法
- Xamarin Anroid App访问网站失败
- jQuery——DOM操作
- UIView.clipsToBounds 让子 View 只显示落在父 View 的 Frame 部分
- Material Design以及ToolBar实战
- CodeForces 166B(凸包)
- 【python问题解决】RuntimeError:NLPIR function 'NLPIR_Init' failed
- Spring MVC深入讲解
- Oracle对表解锁的操作
- Android实现推送方式解决方案
- 关于QT字库的移植和使用总结(能够任意改变字体和颜色)
- linux终端快捷键
- Intellij IDEA的激活
- HIBERNATE与 MYBATIS的对比