首页 > 其他分享 >[AGC002E] Candy Piles

[AGC002E] Candy Piles

时间:2024-06-10 21:45:11浏览次数:17  
标签:状态 Piles 石子 扩展 Candy 后继 必胜 AGC002E 操作

题意简述

有 \(n\) 堆石子,第 \(i\) 堆石子有 \(a_i\) 个。两个人博弈,每次可以选择以下两种操作之一:

  • 拿走石子数目最大的那堆石子(若有多个只拿一堆)
  • 在每堆石子中都拿走一个石子

无法操作的人胜利,求谁必胜(先手 First 后手 Second

\(n\le 10^5,a_i\le 10^9\)。

分析

操作二不会改变最大的那堆石子的编号,也就是说,最大的石子堆恒定不变,每次进行操作一取出的石子堆顺序是固定的。

考虑将 \(a_i\) 从大到小排序,则操作一的取石子顺序是从左往右取。而操作二显然是越靠右的石子堆先被取完。

考虑将 \(n\) 个 \(a_i\) 画成一个网格,并有一个红点初始在左下角:

那么若红点向右移,表示原先红点所处的那一列石子堆已经被执行了操作一;若红点向上移,表示执行了一次操作二。那么显然当红点移出网格外时无法操作,即操作人胜利。

知道了转移和终止条件,我们能得出该网格所有点的胜负状态(若该状态所有的后继状态都是胜态则为败态,反之为胜态,此题中无后继状态为胜态)。但显然爆推肯定是死路一条,因为我们只想知道起点的状态,我们可以考虑发掘一些规律。

以上图为例(红色表示败态,蓝色表示胜态):

发现同一右斜对角线上的点胜负状态相同(证明我不会),考虑将起点沿这条对角线一直扩展到不能再扩展了为止。

数从扩展后的点开始向上、向右能扩展多少格,若两个数全为偶数则先手必胜,否则后手必胜。

证明:由于不能再扩展,所以该点向上、向右是在边缘那一行/一列上的,因此这些点只有一个后继,该点状态与其后继点的状态相反。

代码很简单:

int n,a[maxn];
void solve_the_problem(){
	n=rd();rep(i,1,n)a[i]=rd();
	sort(a+1,a+n+1,greating);//从大到小排序
	int p=1;
	while(p<n&&p+1<=a[p+1])++p;
	int dis1=a[p]-p,dis2=0,m=p;
	while(p<n&&m<=a[p+1])++p,++dis2;
	dis1&=1,dis2&=1;
	!dis1&&!dis2?PN:PY;
}

标签:状态,Piles,石子,扩展,Candy,后继,必胜,AGC002E,操作
From: https://www.cnblogs.com/dcytrl/p/18241006

相关文章

  • AndroidStudio升级Gradle到7+,compileSdkVersion 33+
    一、概述由于需求方的要求/需要,主动或被动的需要升级android的编译环境到CompileSdkVersion33。此时直接更改android项目的编译版本会报错,as版本过低或者gradle插件太老了等。也会遇到一些这样那样的bug,这一篇做一下简单的总结升级方式:以更......
  • 【leetcode】135_candy糖果题_贪心算法_C语言_唐完了之后是?(雾
    原题如下:(蓝字为原题链接,可跳转查看)135.分发糖果n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并......
  • Candy Party (Hard Version) 题解
    原题链接:CF1868B2,简单版:CF1868B1。题意有\(n\)个人,第\(i\)个人手上最初有\(a_{i}\)颗糖。现在每个人可以把自己手中的糖选一些给不多于一个人,同时每个人也只能接受不多于一个人的糖,选出的糖的数量必须是二的次幂。问能否能让每个人最终手上的糖的数量相等。思路首先,这......
  • 免费格式转换工具箱,PDF candy
     随着我们办公所遇到的情况多样化,有时候为了让word文件不在别的电脑上乱码,或者为了符合任务的要求,我们经常需要针对格式进行转换,可是虽然wps有这个功能,但是它需要会员,今天就给大家带来稳定免费的PDF转换工具,没错,就是PDFCandydesktop!!!PDFCandydesktop具有以下特点:支持多种文......
  • CF1868B2 Candy Party (Hard Version) 题解
    Problem-1868B2-CodeforcesCandyParty(HardVersion)-洛谷相信大家已经看过SimpleVersion,这题和上题不同之处就在于如果\(b_i=2^x\),他可以被分解成\(2^x\)或\(2^{x+1}-2^x\),我们不妨起初固定一种方案,如果不满足条件后再把一部分换回去。我们强制钦定起......
  • CF1868B1 Candy Party (Easy Version) 题解
    Problem-1868B1-CodeforcesCandyParty(EasyVersion)-洛谷喵喵题。首先每个数最终肯定变成\(\overlinea\),如果\(\overlinea\)不是整数显然无解。然后记\(b_i=a_i-\overlinea\)表示每个数的偏差量,那\(b_i\)要满足能写成\(2^x-2^y\)的形式然后只需要......
  • android中的VERSION和VERSION_CODES和compileSdkVersion, minSdkVersion 和 targetSdk
    一背景经常会有代码中用到  Build.VERSION.SDK_INT<Build.VERSION_CODES.O,这是指什么意思。在app项目中,经常会看到android{compileSdkVersion30buildToolsVersion"30.0.3"defaultConfig{applicationId"com.yl.qrcode"minSdkVersio......
  • D1. Candy Party (Easy Version)
    D1.CandyParty(EasyVersion)Thisistheeasyversionoftheproblem.Theonlydifferenceisthatinthisversioneveryonemustgivecandiestoexactlyonepersonandreceivecandiesfromexactlyoneperson.Notethatasubmissioncannotpassbothversi......
  • [AGC002E] Candy Piles 题解
    比较简单的题。思路考虑这个玩意在几何上的意义。发现就是要么往上走,要么往右走。那么就十分容易找到规律。找到规律后也很容易感性理解。CodeAC记录。......
  • CF1798C Candy Store
    昨晚VP的时候想了半个多小时的怎么卡质因数分解的常。给定两个长度为\(n\)的序列\(a\)与\(b\),对每一个\(i\)固定一个\(d_i\),使得\(d_i\mida_i\)。将\(b_i\timesd_i\)记为一个新的序列\(c\),你要使得\(c\)的连续段最少。\(n\le10^5\),\(a_i\le10^9\),\(b_i......