@atcoder - AGC002E@ Candy Piles
@description@
给定 N 堆糖果,第 i 堆包含 ai 个糖果。
现在两人进行博弈。有两种操作选择:
(1)吃掉包含最多糖果的糖果堆。
(2)每堆吃掉一颗。
吃掉最后一颗糖的人判输,问谁必胜?
@solution@
将 n 个数从大到小排好序,看成一个 n 列的直方图,第 i 列包含 a'i 个格子。
举个例子:对于 5 5 3 2 1 1,可以建立直方图如下:
o o
o o
o o o
o o o o
o o o o o o
那么相当于有一个棋子从 (1, 1) 出发,玩家可以将棋子右/上移一步,走出边界的判输。
然后经过万能的打表找规律,我们可以发现如果 (x, y) 和 (x + 1, y + 1) 同时存在,则两者的 np 状态相同。
不过这个结论利用反证法倒是不难证就是了。。。
于是我们可以先移动到一个点 (x, y) 使得 (x + 1, y + 1) 不存在,注意到从 (x, y) 只能一路向上或右,两种情况都判一判即可。
@accepted code@
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
bool cmp(int x, int y) {return x > y;}
int a[MAXN + 5], N;
int main() {
scanf("%d", &N);
for(int i=1;i<=N;i++)
scanf("%d", &a[i]);
sort(a + 1, a + N + 1, cmp);
for(int i=1;i<=N;i++) {
if( a[i + 1] < i + 1 ) {
int p = (a[i] - i) % 2, q;
for(int j=i;j<=N+1;j++)
if( a[j] < i ) {
q = (j - i - 1) % 2;
break;
}
puts(p & 1 || q & 1 ? "First" : "Second");
break;
}
}
}
@details@
这是什么神仙操作.jpg。
我怎么觉得 E 比 F 难。F 题我好歹会切,E 题完全没有办法。
@atcoder - AGC002E@ Candy Piles的更多相关文章
- AtCoder AGC002E Candy Piles (博弈论)
神仙题..表示自己智商不够想不到... 好几次读成最后拿的赢了,导致一直没看懂题解... 题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_e ...
- [Agc002E]Candy Piles
[Agc002E]Candy Piles 题目大意 有\(n\)个数,两人轮流操作,可以做以下操作之一: 删掉一个最大的数 将所有数-1 最后取没的人输,问先手是否必胜? 试题分析 直接决策不知道选哪 ...
- AtCoder - 1999 Candy Piles
Problem Statement There are N piles of candies on the table. The piles are numbered 1 through N. At ...
- agc002E - Candy Piles(博弈论)
题意 题目链接 Sol Orz SovitPower #include<bits/stdc++.h> #define Pair pair<int, double> #defin ...
- 【AGC002E】Candy Piles 博弈论
题目大意 有\(n\)堆糖果,第\(i\)堆有\(a_i\)个. 两个人轮流决策,决策分为两种: 1.选择糖果数最多的一堆糖果,并把这堆糖全吃了. 2.在每堆非空的糖果堆里拿一颗糖吃掉. 吃掉最后一颗 ...
- [Agc002E/At1999] Candy Piles - 博弈论
有n堆石子,第i堆有ai个石子.有两种操作: 把石子最多的那一堆给丢掉 把每一堆全部丢掉一个 谁拿走最后石子谁输.判断胜负情况. 直觉转化为一个走棋盘问题 考虑如何计算左下角点的状态 找到原点最右上方 ...
- [AT1999] [agc002_e] Candy Piles
题目链接 AtCoder:https://agc002.contest.atcoder.jp/tasks/agc002_e 洛谷:https://www.luogu.org/problemnew/sh ...
- AGC 002E.Candy Piles(博弈论)
题目链接 \(Description\) 给定\(n\)堆糖,数量分别为\(a_i\).Alice和Bob轮流操作.每次可以吃掉最多的一堆,也可以每堆各吃掉一个.无法操作的人输,求谁能赢. \(n\l ...
- [AtCoder AGC27A]Candy Distribution Again
题目大意:把$x$个糖果分给$n$个人,必须分完,如果第$i$个人拿到$a_i$个糖果,就会开心,输出最多多少人开心 题解:从小到大排序,判断是否可以让他开心,注意最后判断是否要少一个人(没分完) 卡 ...
随机推荐
- mysql小白系列_06 备份与恢复 - mydumper与myloader
http://blog.csdn.net/leshami/article/details/46815553 https://www.cnblogs.com/zhoujinyi/p/3423641.ht ...
- 有向图变为强连通图 hdu2767
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 查找最大元素(hdu2025)
输入方式:直接循环输入不带空格的未知长度的字符串. 思考:直接循环输入未知长度的字符串,用while(gets_s()),循环内外不用getchar().(注意,每次字符串都是以整体输入) #incl ...
- 正确去除隐藏在WordPress系统各处的版本号
使用WordPress的博主都有一个普遍的意识,就是为了安全而移除WordPress的版本号,以免不良用心的人利用旧版本的漏洞对网站进行攻击. WordPress会在前端代码head中加入以下代码(3 ...
- springboot中yml常用配置
server: port: 8080 spring: datasource: #数据源配置 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc: ...
- PHP cookie基本操作
PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆 什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数据 ...
- MySql 语言分类
(1)数据定义语言,即SQL DDL,用于定义SQL模式.基本表.视图.索引等结构.(2)数据操纵语言,即SQL DML.数据操纵分成数据查询和数据更新两类.(3)数据查询语言,即SQL DQL.(4 ...
- 在线编写复杂的数学公式--EdrawMath
网址: EdrawMath , 非常好用
- BST and Heap详解
BST(Binary Search Tree) 基本特点: 二叉树 集合中的数据具有可比较大小的关键码 数据之间满足BST特性 中序遍历可得到一个递增的数据序列(可作为判断一棵二叉树是否是BST的方法 ...
- 关于自己配置有关webpack.config.js和vue项目搭建相关步骤
## Webpack的配置和使用 ### 安装 1. 全局安装 ``` npm install webpack -g ``` 2. 本地安装 ``` npm install webpack -D `` ...