record ?-?

QOJ 5626

这个有点简单。

你考虑把操作分成 \(00,10,01,11\) 四种,发现我们一定会把 \(00\) 放到最前面,把 \(11\) 放到最后,并且它们内部顺序无所谓。接下来的问题就是怎么安排 \(01,10\)

然后我们一般有一些思考角度,比方说我们考虑单独一个点什么时候能计算贡献,你发现这要求有一个它的 \(1\) 被排在最后,这东西不怎么好考虑。

另一种就是一看就能图论建模,我们把操作看成从 \(0\) 连到 \(1\) 的边,然后连出了一个有向图,你发现相当于是我们每选择一个点放弃它,那么所有它能到达的点就有贡献。所以我们先缩点,然后看看有多少个 \(indeg=0\) 的。

但是后面 \(11\) 还有一些影响,具体来说,如果有一个点被我们放弃,但是后来被 \(11\) 覆盖,那还是有贡献。不过这并不麻烦。

*! abc347 G

这个题感觉很有意思。你想一下,它这个权值还跟 abs 不一样。举个简单的例子,就是你考虑一条,左边是 \(1\),右边是 \(5\),它这个希望你“平滑”地从 \(1\) 过渡到 \(5\),而不是像 abs 一样中间填什么区别不太大。

那我们有一个比较 naive 的想法,就是考虑每个连通块的左上角点,然后取它周围有数的位置的平均值来填,或者总之就是选一个当前最优的方案来填。但是这个显然没有考虑到对后面的影响。

呃呃,好吧,网络流题。最小割建模即可。

为啥没想到 flow 呢?感觉 flow 很有感觉啊。

CF1942 D

咋又是这种找前 \(k\) 大的问题啊。

我们先看看怎么做最大值。你发现我们不妨建一个图出来,相当于是找一个最长路对吧。不过我们这样做可能把问题变一般了。

然后你发现这个是个 DAG。那你就在每个点处记一下,以这个点为结尾的,前 \(k\) 大权值。然后我们合并的时候做得精细一点就可以了。

CF1942 E

这种题我们有个赖招就是打个表先。

但是太逊了,我要自己想(懒得写程序了)。

我们先想想什么时候一个人会失败。那就是他任意一个棋子都没办法移动了。这要求他每个棋子的两侧都要被人堵住,而他有 \(n\) 个棋子,所以能出现这样的情况当且仅当所有人的所有棋子全都被堆到某一侧。

那现在其实左方的目的是尽量挤到右边,右方的目的是尽量挤到左边。除非要寄了,否则左方一直右移,右方一直左移。并且一旦左方开始左移,他就必败无疑。

进一步我们注意到,左方只有移动最左侧棋子,才可以削弱右方的移动范围。但是这并不意味着左方每次只会移动最左侧的棋子。

我们考虑一个简单的策略:左方每次移动所有可以动的棋子。

你可能会担心,万一左方此次移动之后,下次再轮到他的时候,他没办法继续右移怎么办?但事实上,如果左方没法右移,右方也没法左移,左方就获胜了。

所以,现在左方的目的,是让自己移动之后,双方棋子相邻。

那这个时候我们其实只关心双方第 \(i\) 个棋子之间的距离,不妨记为 \(x_i\)。我们考察它们满足什么条件时能获胜。

这一看就像经典博弈问题。

你猜跟奇偶性有关。当所有位置都是偶数的时候,你发现后手可以 copy,这样先手必败。反过来,只要有位置时奇数,那么先手就可以先对所有奇数位置操作,然后先手就赢了。

所以我们不妨计数,所有位置都是偶数的情况。记 \(x_i=2k_i\)

你发现一组 \(k_i\) 对应的方案数是 \(\binom{l-n-2\sum k_i}{n}\),我们要对所有 \(k_i\) 的这个东西计数。

很简单,枚举 \(\sum k_i=p\)\(ans=\sum_p \binom{l-n-2\sum k_i}{n}cnt_p\),其中 \(cnt_p=\binom{p+n-1}{n-1}\)

posted @ 2024-04-15 06:57  PYD1  阅读(3)  评论(0)    收藏  举报