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]区间两端取走一个数, ...
随机推荐
- Mybatis入门(五)属性名和字段名不一致解决
在学Mybatis的时候都需要创建一个实体类,但创建实体类的变量必须和数据库的一样,这章就来解决这个有趣的问题 目录: 问题是这样: 输出的结果是: password为空,这就很难受: 解决方法: 第 ...
- 「NOIP2017」列队
传送门 Luogu 解题思路 一眼平衡树,应该没问题吧? 但我们一定要反应过来,单点的维护是非常之困难的,因为这是一个网格图而不仅仅是一条序列. 我们要考虑把修改操作全都放在序列上进行. 其实题面里是 ...
- 「SCOI2010」连续攻击游戏
传送门 Luogu 解题思路 二分图匹配,关键是建图. 如果我们naive地直接把每个武器的两个属性分为两部建图的话,显然是跑不了的. 我们考虑把每一个武器的属性向它连边:\(a_i \rightar ...
- Springboot项目的接口防刷(实例)
技术要点:springboot的基本知识,redis基本操作, 首先是写一个注解类: import java.lang.annotation.Retention; import java.lang.a ...
- 如何使用Nexus搭建Maven私服
如何使用Nexus搭建Maven私服 听语音 | 浏览:47 | 更新:2016-09-29 10:22 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅最快的到家服务,最优质的电脑清灰! ...
- NLP之gensim
一. 利用 jieba 进行分词,关键词提取 利用gensim下面的corpora,models,similarities 进行语料库建立,模型tfidf算法,稀疏矩阵相似度分析 # -*- codi ...
- Windows驱动开发-内核常用内存函数
搞内存常用函数 C语言 内核 malloc ExAllocatePool memset RtlFillMemory memcpy RtlMoveMemory free ExFreePool
- KMP【模板】 && 洛谷 P3375
题目传送门 解题思路: 首先说KMP的作用:对于两个字符串A,B(A.size() > B.size()),求B是否是A的一个字串或B在A里的位置或A里有几个B,说白了就是字符串匹配. 下面创设 ...
- java核心-多线程(9)- ThreadLocal类
1.背景 ThreadLocal类我想一般的码农或初级程序员在平时开发中基本上接触不到,但是面试老师会问.往高级点走会遇到这个类.这个类不是为了解决资源的竞争问题,而是为每个线程提供同一个容器 ...
- java 图片上传
代码是最有力量的,嘎嘎 @CrossOrigin@ApiOperation(value = "上传图片", notes = "上传图片", httpMethod ...