AGC001 D-F

AGC001D

题意:给你一个数列 a,你需要构造一个数列 b,使得同时满足这两个条件的数列只能所有元素相等:
1、前 a1 个数回文,接着 a2 个数回文,再接着 a3 个数回文……
2、前 b1 个数回文,接着 b2 个数回文,再接着 b3 个数回文……
无解输出 Impossible
题解:
1、对于开头的一段,有下面两种情况(红色表示数列 a 的限制,绿色表示数列 b 的限制,后同):
image
2、对于中间的一段,有下面一种情况:
image
3、对于最后的一段,与开头的情况对称,懒得画了。

根据图很容易发现,只有开头和结尾的 a 可能为奇数,奇数超过两个就无解,在以内就丢首尾就行了。

b 根据图就是开头比 a1,结尾比 a1,中间一样的,注意特判 a 长度为 1b 的最后一位为 0

AGC001E

题意:求

i=1nj=i+1n(ai+bi+aj+bjai+aj)

题解:考虑 (a+ba) 是从 (0,0) 走到 (a,b) 且每一步只能往上或往右走一个单位长度的方案数。

显然这题就是让我们求所有从 (0,0) 走到 (ai+aj,bi+bj) 的方案数,显然我们可以考虑平移,因为平移这个矩形以后大小不变,所以答案也不变。

那我们可以平移成求所有从 (ai,bi) 走到 (aj,bj) 的方案数的和,但是如果直接算复杂度是和暴力没有区别的,所以我们考虑设 dp[i][j] 为所有的 (ai,bi) 走到 (i,j) 的方案数的和,因为答案要求从 i+1 开始,所以要减去所有的 (2ai+2bi2ai) ,然后将答案除以 2 即可。

AGC001F

题意:给一个 1 ~ n 的排列 p 和一个数 k,两个数 pipj 可以交换当且仅当 |ij|k|pipj|=1,求交换后字典序最小的排列。

题解:考虑 p 的逆置换 q,然后发现对于 |qiqj|<k 的两个位置 ij,这两个位置上的值不可能被交换,也就是他们的相对位置是固定的。

还原到 p,也就是对于 |ij|<k ,两个位置的大小关系是不变的,从小到大建个DAG,然后就是求给这个DAG编号后,最小的拓扑排序的序列。

我们建反图,跑拓扑,然后按照 N ~ 1 标号,显然不可能真的建图,复杂度爆炸,我们考虑线段树(树状数组也行)维护这个图,发现用线段树存进所有 p 以后,pi 的值等于 (ik,i+k) 之间的最大值时,度数为 0,用一个堆装这些度数为 0 的点,删掉以后就设为 ,一直这样直到每个点都被删掉就做完了。


__EOF__

本文作者Foraino0267
本文链接https://www.cnblogs.com/vegtable-foraino/p/16204177.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Foraino0267  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示