题目来源: 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. IAR 设置问题

    IAR 设置问题 1.worksplace 的设置问题:edit configuration 这样,每个工程都可以有一个workplace,方便切换. 2.文件夹包含问题 3.包含.dat文件问题 . ...

  2. Linux centosVMware shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

    一.shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 格式2:if 条件; then 语句; else 语句; fi 格式3:if …; then … ;elif …; th ...

  3. P1250 种树 题解

    题目描述 一条街道的一边有几座房子,因为环保原因居民想要在路边种些树,路边的居民被分割成 n 块,并被编号为 1…n.每块大小为一个单位尺寸并最多可种一棵树.每个居民想在门前种些树并指定了三个数b,e ...

  4. 仿有道词典App开发

    最近在学习HCoder提供的仿有道词典App项目,该项目采用MUI为前端框架,服务端采用PHP,底层采用了H5+.

  5. Java 变参函数的实现

      Java的变参函数实现实际上参数是一个数组,其简单用法如下 public class variableParamTest { private static void variableParam(O ...

  6. dataset的reparation和coalesce

    /** * Returns a new Dataset that has exactly `numPartitions` partitions, when the fewer partitions * ...

  7. php 键值数组搜索查询

    php  键值数组查询 ,需要先将其转换为纯数组,然后才能用in_array 进行搜索. $arr_combos = [ ['id' => '1001', 'value' => 'zs' ...

  8. Lesson 6 The sporting spirit

    How does the writer describe sport at the international level? I am always amazed when I hear people ...

  9. Ternsorflow 学习:004-MNIST入门 构建模型

    Softmax回归介绍 我们知道MNIST的每一张图片都表示一个数字,从0到9.我们希望得到给定图片代表每个数字的概率.比如说,我们的模型可能推测一张包含9的图片代表数字9的概率是80%但是判断它是8 ...

  10. PE文件结构体-IMAGE_DATA_DIRECTORY

    IMAGE_OPTIONAL_HEADER结构体最后一个成员是数组结构,大小为16,每个元素都是一个IMAGE_DATA_DIRECTORY结构体 typedef struct _IMAGE_DATA ...