51nod 1430:奇偶游戏 博弈
有n个城市,第i个城市有ai个人。Daenerys和Stannis是两个恶魔。他们在玩一个游戏,他们轮流去破坏城市。每一轮破坏一个城市并杀光里面所有的人。直到剩下k个城市为止。
如果最后剩下的总人数是偶数那么Daenerys获得胜利,否则Stannis获得胜利。
现在给定一个局面,要求你来判断一下谁会赢,Stannis先出手。
单组测试数据。
第一行包含两个整数n,k (1 ≤ k ≤ n ≤ 2*10^5)表示刚开始的城市数目和最后剩下的城市数目。
第二行有n个整数a1,a2,a3,…,an。 (1 ≤ ai ≤ 10^6),表示每个城市里面的人数。
对于每一组数据输出胜者。
3 1
1 2 1
3 1
2 2 1
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:奇偶游戏 博弈的更多相关文章
- 51 Nod 1430 奇偶游戏(博弈)
1430 奇偶游戏 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 有n个城市,第i个城市有ai个人.Daenery ...
- 51nod 1459 迷宫游戏(dij)
题目链接:51nod 1459 迷宫游戏 dij裸题. #include<cstdio> #include<cstring> #include<algorithm> ...
- 51Nod 1070 Bash游戏 V4(斐波那契博弈)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1070 题意: 思路: 这个是斐波那契博弈,http://blog.csd ...
- 51nod 1070 Bash游戏 V4 (斐波那契博弈)
题目:传送门. 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下: 1)先手不能在第一次把所有的石子取完,至少取1颗: 2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的 ...
- 51nod 1490: 多重游戏(树上博弈)
题目链接 该题实质上是一个树上博弈的问题.要定义四种状态——2先手必胜 1先手必败 3可输可赢 0不能控制 叶子结点为先手必败态: 若某结点的所有儿子都是先手必败态,则该结点为先手必胜态: 若某结点的 ...
- 51nod 1066 - Bash游戏,简单博弈
有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得比赛. 例如N = 3 ...
- 51nod 1069 Nim游戏 + BZOJ 1022: [SHOI2008]小约翰的游戏John(Nim游戏和Anti-Nim游戏)
首先,51nod的那道题就是最简单的尼姆博弈问题. 尼姆博弈主要就是判断奇异局势,现在我们就假设有三个石子堆,最简单的(0,n,n)就是一个奇异局势,因为无论先手怎么拿,后手总是可以在另一堆里拿走相同 ...
- tyvj P1075 - 硬币游戏 博弈DP
P1075 - 硬币游戏 From price Normal (OI)总时限:10s 内存限制:128MB 代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...
- 计蒜客 取数游戏 博弈+dp
题目链接 取数游戏 思路:dp(x, y)表示先手在区间[x, y]能取得的最大分数.当先手取完,就轮到后手去,后手一定会选择当前能令他得到最大分数的策略,其实当先手在[x, y]区间两端取走一个数, ...
随机推荐
- eclipse搜索类快捷键
习惯的编辑器可以提高编程效率,熟悉的快捷键可以提高工作效率,本文更新eclipse中常用的搜索快捷键 打开资源快捷键:Ctrl+Shift+R 通过在搜索框中输入名字可以很方便的在项目或工作空间中找某 ...
- php 实现店铺装修2
<?php namespace Webapp\Model; use Common\Model\DataModel\FlagShopCategoryModel; use Common\Model\ ...
- 多元线性回归算法python实现(非常经典)
对于多元线性回归算法,它对于数据集具有较好的可解释性,我们可以对比不过特征参数的输出系数的大小来判断它对数据的影响权重,进而对其中隐含的参数进行扩展和收集,提高整体训练数据的准确性.整体实现代码如下所 ...
- pyhton机器学习入门基础(机器学习与决策树)
//2019.07.26#scikit-learn数据挖掘工具包1.Scikit learn是基于python的数据挖掘和机器学习的工具包,方便实现数据的数据分析与高级操作,是数据分析里面非常重要的工 ...
- JS实现全选,取消全选,正常选择
//点击选择方法 onUserIdsChange(selVal) { if (this.form.groupUserIds.includes(-1) && !this.isSelect ...
- JS操作小记
this.Phenomenon.forEach(element => { if (element.value3 == this.prvphe) { this.Reason1 = element. ...
- USACO[19-20]Dec银组题解
1,MooBuzz 这题其实是道数学题. 我们先找找符合要求的数:1,2,4,7,8,11,13,14…… 我们发现再往后找都是这8个数中的一个加15k如:16……19……29…… 找规律发现k=n/ ...
- P1064 朋友数
P1064 朋友数 转跳点:
- Python下opencv使用笔记(图像频域滤波与傅里叶变换)
Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654 收藏 展开 本文转载自 https://blog ...
- IntelliJ IDEA使用技巧—使用EasyCode插件一键生成代码04期
在现如今的软件开发过程中,软件开发人员将很多的精力放在重复的编码中.特别是流行的MVC架构模式下,项目各个层次的功能更加独立,这也间接的造成了代码的相似度更高.因此需要寻找一种可以减少软件开发人员重复 ...