agc027 题解

link

code

A \(\color{gray}\bigstar\)

排序。

B \(\color{blue}\bigstar\)

挺困难的。

考虑 \(X\) 的贡献,只和扔垃圾次数有关,也就是需要看出去的次数。

然后考虑如果拿若干个垃圾,肯定是先走到最右边,然后回来的路上拿。

因此给每个点一个值,表示它是在自己那一趟里第几个被拿的。

容易发现每个值对应一个贡献,这个贡献需要乘上它所在位置,并且值越大贡献越大。

贪心,把小的值分配给后面的,然后没了。

C \(\color{green}\bigstar\)

相当于要拿出一个闭合子图,要求每个点都可以到达 AB

拓扑排序,每次把不合法的点删掉。

D \(\color{Gold}\bigstar\)

一开始有个直接的想法就是黑白染色,然后每个黑点给一个奇素数,然后白点的值是周围一圈的乘积加一,这样满足一定不会重复而且合法。

但是爆炸,白点上的数太大了。

然后发现不会做。。。

正解是,每个黑点上的数是两个素数的乘积,然后黑点的数是周围一圈 \(\text{lcm}+1\),然后一条主副斜线各给一个素数,这样就满足条件了。

E \(\color{Gold}\bigstar\)

首先一步简单的转化是,\(a\) 看成 \(1\)\(b\) 看成 \(2\),那么合并就是加起来 \(\bmod 3\)

首先发现,如果一个序列是 abababab...,那么显然操作不了。

否则证明,这个序列如果 \(\bmod 3\ne 0\),那么可以操作成一个字符。

归纳,就是如果有几个相邻相同的,一定存在一个使得操作之后还有相邻相同的。

然后我们把序列分成若干段,然后每一段都满足 \(\bmod 3\ne 0\),对应一种方案。

贪心,一定是每次选一个最小的前缀。

但是最后可能会多出来一段和为 \(0\) 的。

调整,最后一段先和前面一段合并,然后如果操作不了,说明一定是 ababa 这样的,那么把最后一个扣出,然后前面的再和前面的合并,直到合并到一个可以操作的即可。

F \(\color{blue}\bigstar\)

一步操作之后,就可以确定一个不动的根,把关系列出来拓扑排序即可。

posted @ 2023-08-05 15:32  houzhiyuan  阅读(15)  评论(0编辑  收藏  举报