题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题
 收藏
 关注

有n个城市,第i个城市有ai个人。Daenerys和Stannis是两个恶魔。他们在玩一个游戏,他们轮流去破坏城市。每一轮破坏一个城市并杀光里面所有的人。直到剩下k个城市为止。

如果最后剩下的总人数是偶数那么Daenerys获得胜利,否则Stannis获得胜利。

现在给定一个局面,要求你来判断一下谁会赢,Stannis先出手。

Input
单组测试数据。
第一行包含两个整数n,k (1 ≤ k ≤ n ≤ 2*10^5)表示刚开始的城市数目和最后剩下的城市数目。
第二行有n个整数a1,a2,a3,…,an。 (1 ≤ ai ≤ 10^6),表示每个城市里面的人数。
Output
对于每一组数据输出胜者。
Input示例
3 1
1 2 1
3 1
2 2 1
Output示例
Stannis
Daenerys

哇,六级题拿了金牌好开心~。

其实最后剩下的人数是奇数还是偶数,取决于的是奇数人城市的数目。想起福尔摩斯的那句话,“抛去所有不可能的,剩下的无论多么不可相信,但那就是真相。”这个题目我一开始想的就是最后走的那个可以控制剩下的人是奇数还是偶数啊,所以肯定是最后的那个人赢。

除非剩下的那些城市全部都是奇数,或者全部都是偶数,那样的话结果就不由他定了,只能听天由命。

所以把可以控制的情况排除,剩下的就是代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; long long n, k, temp, cnt1,cnt2; int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout);
long long i;
scanf("%lld%lld", &n, &k); cnt1 = 0;
for (i = 1; i <= n; i++)
{
scanf("%lld", &temp);
if (temp & 1)//奇数的城市有cnt个
cnt1++;
}
cnt2 = n - cnt1;//偶数的城市数量 //如果后手能够把奇数座城市全部拿下的话,一定是后手赢
if (cnt1 <= ((n - k) / 2))
{
cout << "Daenerys" << endl;
return 0;
}
//如果后手能将所有偶数个城市拿下的话并且剩下的城市是偶数个,一定是后手赢
if (((k & 1) == 0) && cnt2 <= ((n - k) / 2))
{
cout << "Daenerys" << endl;
return 0;
}
//如果先手能将所有偶数个城市拿下的话并且剩下的城市是奇数个,一定是先手赢
if (((k & 1) == 1) && cnt2 <= ((n - k) / 2))
{
cout << "Stannis" << endl;
return 0;
}
//一开始忘了考虑这里,如果两人什么都不取的话,那肯定就是初始状态,奇数个城市如果是偶数个的话就是后手赢,否则就是先手赢
if (n == k)
{
if ((cnt1 & 1)==0)
{
cout << "Daenerys" << endl;
return 0;
}
else
{
cout << "Stannis" << endl;
return 0;
}
}
//剩下的情况就是 剩下的城市有一部分是奇数城 有一部分是偶数城市,谁都不能全部拿下
//那么此时如果先手多拿一次的话,可以调整 必赢
if ((n - k) & 1)
{
cout << "Stannis" << endl;
return 0;
}
else//否则后手可以调整,后手赢
{
cout << "Daenerys" << endl;
return 0;
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

51nod 1430:奇偶游戏 博弈的更多相关文章

  1. 51 Nod 1430 奇偶游戏(博弈)

    1430 奇偶游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 有n个城市,第i个城市有ai个人.Daenery ...

  2. 51nod 1459 迷宫游戏(dij)

    题目链接:51nod 1459 迷宫游戏 dij裸题. #include<cstdio> #include<cstring> #include<algorithm> ...

  3. 51Nod 1070 Bash游戏 V4(斐波那契博弈)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1070 题意: 思路: 这个是斐波那契博弈,http://blog.csd ...

  4. 51nod 1070 Bash游戏 V4 (斐波那契博弈)

    题目:传送门. 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下: 1)先手不能在第一次把所有的石子取完,至少取1颗: 2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的 ...

  5. 51nod 1490: 多重游戏(树上博弈)

    题目链接 该题实质上是一个树上博弈的问题.要定义四种状态——2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必败态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...

  6. 51nod 1066 - Bash游戏,简单博弈

    有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得比赛. 例如N = 3 ...

  7. 51nod 1069 Nim游戏 + BZOJ 1022: [SHOI2008]小约翰的游戏John(Nim游戏和Anti-Nim游戏)

    首先,51nod的那道题就是最简单的尼姆博弈问题. 尼姆博弈主要就是判断奇异局势,现在我们就假设有三个石子堆,最简单的(0,n,n)就是一个奇异局势,因为无论先手怎么拿,后手总是可以在另一堆里拿走相同 ...

  8. tyvj P1075 - 硬币游戏 博弈DP

    P1075 - 硬币游戏 From price    Normal (OI)总时限:10s    内存限制:128MB    代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...

  9. 计蒜客 取数游戏 博弈+dp

    题目链接 取数游戏 思路:dp(x, y)表示先手在区间[x, y]能取得的最大分数.当先手取完,就轮到后手去,后手一定会选择当前能令他得到最大分数的策略,其实当先手在[x, y]区间两端取走一个数, ...

随机推荐

  1. [经验] HTML页面中子盒子溢出了怎么办

    背景: 在查询数据记录的一个页面上使用bootstar 框架的分页插件作为显示数据表格的工具. 问题: 当查询的范围在一个较短的时间内时, 子元素是乖乖的呆在父元素内部的, 但是一但将查询的时间范围扩 ...

  2. NSArary自定义对象排序 NSComparator, compare

    reference from :http://mobile.51cto.com/hot-434804.htm 1.构建Person类 Person.h @interface Person : NSOb ...

  3. CentOS7虚拟机配置、Hadoop搭建、wordCount DEMO运行

    安装虚拟机 最开始先安装虚拟机,我是12.5.7版本,如果要跟着我做的话,版本最好和我一致,不然后面可能会出一些莫名其妙的错误,下载链接如下(注册码也在里面了): 链接:https://pan.bai ...

  4. 前端学习笔记系列一:4 vue中@click.native

    .native - listen for a native event on the root element of component. 作用:[给组件绑定原生事件] 例子:如果使用router-l ...

  5. 树莓派开启VNC远程桌面

    分类: Raspberry Pi Linux2013-03-12 10:18 4288人阅读 评论(1) 收藏 举报   目录(?)[+]   1.安装VNC sudo apt-get install ...

  6. 让Nutz支持最快的模板引擎Smarty4j

    Smarty4j是一个开源的模板引擎.没错,它就是著名的php模板引擎之Java移植版. 它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快.它发展较晚,所 ...

  7. MySQL存储过程例子

    -- 索引 INDEXCREATE INDEX idx_sname ON student( sname(4)); ALTER TABLE teacher add index idx_tname(tna ...

  8. Centos7 静默安装 Oracle11G

    1.准备安装包: 安装包官网下载地址:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-l ...

  9. MySQL学习之SQL基础(一)DML

    DML(data Manipulation language) INSERT DELETE UPDATE SELECT INSERT mysql> desc emp; +----------+- ...

  10. MongoDB首次启动常见问题

    问题1. exception in initandlisten 29 data directory /data/db not found 问题:MongoDB默认存储路径为/data/db,这里显示没 ...