首页 > 其他分享 >AGC066 题解

AGC066 题解

时间:2024-04-03 15:55:40浏览次数:41  
标签:消空 01 题解 times 2d AGC066 移动 dp

A

将网格黑白染色,将黑色格变为 \(\bmod 2d = 0\),白色格变为 \(\bmod 2d = d\)。这样代价上界为 \(n^2d\)。

但是这样的“期望代价”是 \(\frac{1}{2}n^2d\) 的,考虑将黑色格变为 \(\bmod 2d = x\),白色格变为 \(\bmod 2d = d+x\),根据鸽巢原理,一定有一种方案代价在 \(\frac{1}{2}n^2d\) 之内。

B

通过打表比较优的情况可以发现,优秀的情况末尾都有一串 \(0\)。考虑构造一个数,使得每次 \(\times 2\),末尾会变成 \(0\)。

那问题转化为:构造一个奇数,使它在 \(n\) 次内,每次 \(\times 5\) 数位和递增,然后构造 \(x\times 5^n\) 即可。

比如 \(3\to 15\to 75\to 425\) 递增,则可以构造 \(425\to 750\to 1500\to 3000\)。

但如果随便取一个奇数 \(1,3\),在若干次 \(\times 5\) 后就会有一次不递增的...

但是我们可以把一堆数乘 \(5^{50}\) 拼起来(比如取 \([1,100]\)),并在它们之间加一串 0 使得它们互不影响。然后发现这样就递增了!因为整体的趋势是递增的,将大量的数拼起来消去了小量的递减影响。

C

考虑如何判定一个 AB 串是可以消空的,称能消空为合法串。

手玩样例会发现,直接贪心消是不行的,比如 BAAABA -> ABA,BAAABA -> BAA

考虑一个区间 dp,设 \(dp(l,r)\) 表示能否消空 \([l,r]\)。有两种转移:

  • 枚举从 \(k\) 断开,判断能否消空 \([l,k],[k+1,r]\).
  • 若 \(s_l\ne s_r\),枚举 \(s_k = \text{A}\),判断能否消空 \([l+1,k-1],[k+1,r-1]\),然后将 \((s_l,s_k,s_r)\) 一起消。

然后进行 dp,设 \(f_i\) 表示前 \(i\) 个字符最少消成几个字符。有转移:

  • \(f_i + 1 \to f_{i+1}\)
  • 若 \(dp(i,j)=1\):\(f_i\to f_j\)

如果一个区间 \((i,j)\) 能从中间断开来消空,则自然可以不考虑它。考虑不可断开的合法串有什么性质。

可以得出不可断开的合法串的一些必要条件:

  • 区间内 \(\text{A}\) 的个数为 \(\text{B}\) 的两倍。
  • \(s_l\ne s_r\)。

surprisingly 根据打表 合法串/不合法串 的结果,这也是必要条件。

然后就可以 \(O(n)\) dp 了。

D

每个移动的代价都是正的,考虑最终移动完的最优结果是怎样的。

假设只有一连串的 1,移动完后一定会变成 1010101,只是 01 串从哪个位置开始需要确定,而开始的位置是 \(O(n)\) 个。

假设有两串 1,移动完后的结果可能是两个 01 串;或者相向移动,合起来变成一个大的 01 串。

可以发现,上述的移动可以概括为:将一个 \(01\) 个数相等的区间变成 010101..101010..

那么这样的移动只有 \(O(n)\) 种,只需要处理 \(r_i\) 表示 \([i,r_i]\) 是 \(01\) 个数相等的。每次移动的代价也是固定的,因为把这个区间变成 010101101010 的话 1 的移动方向都是相同的,可以前缀和后 \(O(1)\) 计算。

设 \(f_{i,0/1}\) 表示操作完前 \(i\) 个字符,最后一个字符是 \(0/1\) 的最小代价。转移只需要枚举下一个操作区间 \([i,r_i]\) 变成 0101 还是 1010,或者第 \(i\) 个字符不操作。复杂度 \(O(n)\)。

F

怎么又把 agc052E trick 拿出来

考虑把 ABC 串转为一条折线:\(A\to B,B\to C,C\to A\) 则为 +,否则为 -

则如果 swap 位置非头和尾,则体现为 +++--- 相互转化。

如果 swap 尾部,则为尾部 ++-- 相互转化;如果 swap 头部,则 头部字母会变化,且头部 ++-- 相互转化,如 A++ \(\to\) B--

那考虑折线的“最简形式”:首先将连着的 +++,--- 消掉,它们可以插在串的任意位置;接着,当头部/尾部存在两个相同 + 一个相反时,可以把这三个字符消掉。

标签:消空,01,题解,times,2d,AGC066,移动,dp
From: https://www.cnblogs.com/Rainbowsjy/p/18112743

相关文章

  • 【题解】AGC008F | 思维 统计技巧 换根 二次扫描
    题意:给出一个\(n\)个点的树(边权为\(1\))和集合\(S\),求有多少个点集\(T\)可以被表示为离\(S\)中的一个点\(u\)距离不超过\(d\)的点构成的集合(下文称为\(u\)的\(d\)级邻域)。考虑\(S\)为所有点的特殊情况:我们直接求每个点邻域的个数再求和,会算重一些点集,这种情况......
  • 【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)
    [蓝桥杯2019国AC]轨道炮题目描述小明在玩一款战争游戏。地图上一共有NNN个敌方单位,可以看作2D平面上的点。其中第i......
  • 【洛谷 P8672】[蓝桥杯 2018 国 C] 交换次数 题解(字符串+映射+全排列)
    [蓝桥杯2018国C]交换次数题目描述IT产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称BAT)在某海滩进行招聘活动。招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:ABABTATT,这使得应聘者十分别扭。于是,管理部门要求招聘方进行必要的......
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
    [蓝桥杯2019国B]解谜游戏题目背景题目描述小明正在玩一款解谜游戏。谜题由242424根塑料棒组成,其中黄色塑料棒4......
  • 记录一次解决跨域问题解决过程。 strict-origin-when-cross-origin,net::ERR_FAILED, No
    事情是这样的,vue项目本地启动可以正常连接后端端口访问,部署到nginx上只有就无法访问,显示跨域问题  于是查看后端日志 啥都没有,觉得肯定是nginx的问题,怎么配置都没用, location/{ roothtml; indexindex.htmlindex.htm; add_header'Access-Control-Allow-O......
  • P3622 [APIO2007] 动物园 -题解
    好写爱写没事干所以有了这篇题解洛谷P3622[APIO2007]动物园题解$Link$hzoi题库洛谷题目说的挺繁琐,其实就传达了一个很简单的信息:\(n\)个动物,\(c\)个小孩,每个小孩能看到\(5\)个动物(所在的位置)\(E\)到\(E+4\),有\(F\)个害怕的动物,\(L\)个喜欢的动物。如果视野中有至......
  • 题解:P3903 导弹拦截III
    第一步:确定子任务因为当前拦截的导弹可能在奇数位上,也可能在偶数位上,所以以这两种状态为子任务。第二步:确定状态设$dp[i][0/1]$为作为第(偶数/奇数)个被拦截的导弹,最大可以拦截多少个导弹第三步:推出转移方程$dp[i][0]=max(dp[j][1])+1(1\lej<i且h[i]<h[j])$$dp[i][1]=max(......
  • 题解:P2758 编辑距离
    第一步:确定子问题有4种操作(删除,添加,修改,不变)。所以4个子问题就是操作后的A变为B需要多少步。第二步:确定状态设$dp[i][j]$为将A的前i位变为B的前j位的最小代价。第三步:确定转移方程删除:$dp[i][j]=dp[i-1][j]+1$添加:$dp[i][j]=dp[i][j-1]+1$修改:$dp[i][j]=dp[i-1][j......
  • AGC066 题解
    题解:AT_agc066_a[AGC066A]AdjacentDifference笑点解析:没有必要将总成本最小化。我们将格子间隔的黑白染色(显然有两种染色方法),对于黑点我们要求它是奇数倍\(d\),对于白点我们要求它是偶数倍\(d\),这样一定满足相邻格子相差至少\(d\)。因为两种染色方法的代价和为\(dN^2\),......
  • [ABC259F] Select Edges 题解
    很容易想到树形dp。考虑在有根树内,每个点都有两种状态:不选自己和父亲的边;要选自己和父亲的边。那么单独对于子树内部而言,就要分两种情况:最多可以向\(d_i\)个孩子连边,对应上述第一种情况,我们称之为\(f_i\);最多可以向\(d_i-1\)个孩子连边,对应上述第二种情况,我们称之......