【学习笔记】[AGC002E] Candy Piles

news/2024/10/18 14:24:44/

这种不对称操作还挺恼人的。

写了一个看着很对的贪心做法,但是好像是伪的,看来我是纯纯的 joker \text{joker} joker了。

这题难点在于将博弈问题转化为图论问题。但是不看题解好像真的很难往这方面去想。 不妨考虑原数组的差分序列,每次操作相当于去掉队尾的元素或者让队首的元素 − 1 -1 1。设 F ( x , y ) F(x,y) F(x,y)表示在队首操作了 x x x次,队尾操作了 y y y次后的状态下必败还是必胜,因为只有这两种状态所以就不用 S G SG SG函数去表示了。说实话 A G C AGC AGC博弈论题目中很少有这样能定量计算的,所以一般能定量算的情景都需要定量算。

不妨将终止节点写出来,容易发现 ( ∑ d i − 1 , n − i ) (\sum{d_i}-1,n-i) (di1,ni)是终结点,为必败态。将横纵坐标交换一下,使用笛卡尔坐标系,这样终结点以下的点是合法节点。考虑从上往下合并,维护这一行的所有状态,仔细观察一下,发现就是将序列左移一位,然后在末尾添加一个 0 / 1 0/1 0/1。这个结论是可以严格证明的,因为我们发现任意时刻不会有两个相邻的 0 0 0,以及连续的 1 1 1的长度不会超过 2 2 2,因此归纳法可证。上面规律并不难观察,只要你手玩了足够多组数据。 那么直接模拟即可,复杂度 O ( n ) O(n) O(n)

算了还是写一个证明吧。只需证明 F ( x , y ) = F ( x − 1 , y + 1 ) F(x,y)=F(x-1,y+1) F(x,y)=F(x1,y+1)即可。如果 F ( x − 1 , y ) = 0 F(x-1,y)=0 F(x1,y)=0那么根据没有两个相邻的 0 0 0的结论是满足的,如果 F ( x − 1 , y ) = 1 F(x-1,y)=1 F(x1,y)=1,那么当 F ( x − 1 , y + 1 ) = 1 F(x-1,y+1)=1 F(x1,y+1)=1时算出来就是 1 1 1,当 F ( x − 1 , y + 1 ) = 0 F(x-1,y+1)=0 F(x1,y+1)=0时算出来就是 0 0 0。因为是平移所以序列 F ( x ) F(x) F(x) F ( x − 1 ) F(x-1) F(x1)的性质不会发生变化,这样就证完了。

细节决定成败。实际上 终止点的数目是可能 < n <n <n ,换句话说同一行只保留最右边那么一个作为终止点。那么每次要在开头插入一段 01 01 01交错的序列。事实上我想复杂了,并没有必要维护整个序列的状态,只用求 x = y x=y x=y这条对角线上任意某一点的状态来代替 ( 0 , 0 ) (0,0) (0,0)即可。

复杂度 O ( n ) O(n) O(n)


http://www.ppmy.cn/news/330592.html

相关文章

【Linux】浅谈文件原理与操作

目录 问题引入 浅谈文件原理 文件操作 文件的打开与关闭 open close write与read 再谈C库文件操作 问题引入 &#x1f338;以前我们学过C语言的文件操作&#xff0c;而不同语言的文件操作都是不一样的&#xff0c;我们该如何理解这一现象&#xff0c;能不能用一种统一…

尚硅谷项目三 TSUtility和Data

尚硅谷项目三 TSUtility和Data TSUtility package com.atguigu.team.view;import java.util.*; /*** * Description 项目中提供了TSUtility.java类&#xff0c;可用来方便地实现键盘访问。* author * version * date **/ public class TSUtility {private static Scanner sca…

JAVA项目开发团队分配管理软件的开发与心得体会

这次开发的项目开发团队分配管理软件是一个基于JAVA面像对象的一个基于文本界面的一个开发项目&#xff0c;它主要是用到我们之前所学的封装&#xff0c;继承&#xff0c;多态&#xff0c;其次考验了我们对异常的使用处理以及数组&#xff0c;arraylist集合的使用 这个项目主要…

java课程设计——开发团队调度软件

尚硅谷java项目三 文章目录 domain文件ArchitectDesignerEmployeeEquipmentNoteBookPCPrinterProgrammer service文件DataNameListServiceStatusTeamExceptionTeamService view文件TeamViewTSUtility domain文件 Architect package work3.domain;public class Architect exte…

JAVA基础小结(项目三)

• 模拟实现一个基于文本界面的 《 开发团队调度软件 》 • 熟悉 Java 面向对象的高级特性&#xff0c;进一步掌握编程技巧和调试技巧 • 主要涉及以下知识点&#xff1a; 类的继承性和多态性 对象的值传递、接口 static 和 final 修饰符 特殊类的使用&#xff1a;包装类 、…

java项目三之开发团队调度软件

一、 team.uti包的设计 此包只包含一些工具类TSUtility类。 TSUtility类的设计 此类为一个工具类&#xff0c;用来进行键盘的交互。 package team.uti;import java.util.Scanner;public class TSUtility {private static Scanner sc new Scanner(System.in);/*** * Descri…

# Java-day17(项目三 1、开发团队调度软件实现部分)

# Java-day17&#xff08;项目三 1、开发团队调度软件实现部分&#xff09; com.atguigu.team.domainArchitect.javaDesigner.javaEmployee.javaEquipment.javaNoteBook.javaPC.javaPrinter.javaProgrammer.java com.atguigu.team.serviceData.javaNameListService.javaStatus.…

【javase基础】第十八篇(项目):开发团队调度软件

&#x1f30e;知识导航 一&#xff0c;写在前面&#xff1a;二、需求说明1.目标功能&#xff1a;2.界面要求3.添加成员的类别限制4.添加失败的原因 三.框架搭建与结构分析1Demain包&#x1f30e;关于设备相关类的设计&#xff08;1&#xff09;关系图解&#xff1a;&#xff08…