Loading

题解-AGC013

AGC013

A B C D E F
场上完成 Yes Yes Yes No No No
补题完成 Yes Yes Yes Yes Yes No
题解完成 Yes Yes Yes Yes Yes No

F 貌似是个带毒瘤,到时候无聊了再补吧。


AGC013A Sorted Arrays

luogu

这东西可以贪心。

记录当前前面一个数、这段的状态(升、降)。

如果当前的数和前面的数的关系和状态不同,就新开一段。

注意跳过与前面一个数相等的数。

aclink


AGC013B Hamiltonish Path

luogu

题目教你做题:两端如果有没有遍历的节点就加入。

所以先把链设为 \(\{0\}\),然后往两边扩张即可(甚至都不需要 dfs,具体看代码)。

aclink


AGC013C Ants on a Circle

luogu

首先就是一个经典的脑经急转弯:可以通过假设每个蚂蚁穿过对方得到最终位置集合。

然后容易发现每个蚂蚁就在它前后两只之间撞,所以蚂蚁之间的相对位置不变。

于是题目转化为要求 \(1\) 蚂蚁最后的位置排名。假设蚂蚁遇到对方以后会穿过对方并交换编号。

想想在 \(0\) 处有一只 \(0\) 号的蚂蚁,如果别的蚂蚁从左边穿过它,它的编号 \(-1\),否则它的编号 \(+1\)

所以只需要求出所有蚂蚁穿过它的总次数,就可以推出 \(1\) 号蚂蚁的位置了。

aclink


AGC013D Piling Up

luogu

聚焦于盒子中的红砖个数。设 \(f(i,j)\) 表示前 \(i\) 个操作,盒子中有 \(j\) 个红砖的序列个数。

如果初始化 \(f(i,j)=0(0\le j\le n)\),那么同样的颜色序列容易被统计多次。

场上想了很多玄学方法,后来还是贺了题:可以只在红砖数曾经为 \(0\) 过的初始情况下统计这个序列。

所以可以设 \(f(i,j,t)\) 表示前 \(i\) 个操作,盒子中有 \(j\) 个红砖,红砖是否为 \(0\) 过的序列个数。

转移类似,很无脑,不讲了。

aclink


AGC013E Placing Squares

luogu

容易想到 dp 做法,但是对解决本题鲜有帮助。

可以把 \(a_i^2\) 转组合意义:\(n\) 个连续的球,可以划成若干段,

每个球可以染色以及踩扁,每一段球恰有一个被染色,恰有一个被踩扁(染色的也可以被踩扁)。

可以设 \(f(i,s)\) 表示前 \(i\) 个球,当前这段已经被完成了集合为 \(s\) 的操作的方案数。

发现这东西有个小优化,由于染色、踩扁本质相同,所以可以设 \(f(i,j)\) 表示前 \(i\) 个球,执行了 \(j\) 个操作的方案数。

可以用矩阵快速幂优化。

aclink


\[\Huge\rm --AFO-- \]

posted @ 2021-01-18 16:50  George1123  阅读(149)  评论(1编辑  收藏  举报