【学习笔记】AGC010
多做 AGC 长脑子
不给样例,光靠脑子想
Rearranging
- 考虑如果两个数不互质,那么它们在最终序列相对位置不变
- 因此对两个不互质的数连边,同时对每条边定向构造 DAG
- 答案就是最大的拓扑序,因为考虑一个点没有入度的话可以和任何其他的点交换
- 贪心的构造 。从编号最小的点开始 dfs ,每次找节点编号最小的出边,可以理解成构造了一颗树 。
- 然后模拟就行了 (
Tiling
- 贪心的考虑如何最大限度将网格铺满
- 显然将网格剖分成若干个 2x2 的矩阵是最优的
- 边角料就铺对应的横砖或竖砖
- 这样一定能最大化铺砖的数量
- 手玩发现 n=3,m=3,A=2,B=2 的情况会有问题
- 也就是说对于最后一个 2x2 的方格,还剩横砖和竖砖各一个,理论上能铺两块砖,但是由于形状原因只能铺一块
- 注意到右下角还空了一个位置,可以通过调整放下 。
- 直接分两种方案 check 即可 。
- 类似的题目还有 Nastia and a Beautiful Matrix ,从 最大化利用网格空间 入手,找到局部最优,进而构造出全局最优解 。
Three Circuits
- 每个点的度数都必须是偶数
- 题目给了这是一个连通图,所以一定存在欧拉回路
- 如果存在点的度数 >=6 ,那么必然有解(考虑从欧拉回路角度去证
- 记度数 = 4 的点个数为 cnt
- 如果 cnt=0 ,那么最多只能构造出一个环
- 如果 cnt=1 ,那么最多只能构造出两个环
- 如果 cnt=2 ,那么有两种情况(画图感知:可能构造出两个环或三个环
- 如果 cnt>=3 ,那么去掉一个简单环后归纳到 cnt=2 的情况,最少能构造出三个环
Decrementing
- 如果存在 a i = 1 a_i=1 ai=1 ,那么判断 ∑ ( a i − 1 ) \sum{(a_i-1)} ∑(ai−1) 的奇偶性 。
- 定义 ∑ ( a i − 1 ) \sum{(a_i-1)} ∑(ai−1) 奇数时为胜态,偶数时为负态
- 如果当前正在操作的人为胜态,那么无论另一个人怎么操作,当前这个人必胜
- 因为考虑如果没有所有数都除以最大公约数这个操作的话, ∑ a i \sum a_i ∑ai 的奇偶性不会变化,那么 ∑ ( a i − 1 ) \sum (a_i-1) ∑(ai−1) 的奇偶性也不会变化,胜负态是固定的
- 现在相当于 ∑ a i → ∑ a i x \sum{a_i}\to \frac{\sum{a_i}}{x} ∑ai→x∑ai ,当且仅当 x x x 是偶数且 ∑ a i x \frac{\sum{a_i}}{x} x∑ai 为奇数时才行
- 记序列中奇数的个数为 cnt ,初始因为互质所以 cnt>=1 ,那么两个人轮流操作,后手的人永远无法让 cnt=0 (n>=3 时)
- 如果当前操作的人为败态,那就操作唯一的奇数,这样有可能逆转胜负 。
- 因此直接模拟 。最多不会超过 log a \log a loga 次 。
Balancing Network
题面好长
- T = 1 T=1 T=1
- 论思路正确的重要性
- 假设我们已经知道了最终的导线 x x x ,倒序考虑每个平衡器
- 记 v i v_i vi 表示能否到达导线 x x x
- 如果 v a = v b = 1 v_a=v_b=1 va=vb=1 或 v a = v b = 0 v_a=v_b=0 va=vb=0 显然没有用处
- 如果 v a = 1 , v b = 0 v_a=1,v_b=0 va=1,vb=0 或者 v a = 0 , v b = 1 v_a=0,v_b=1 va=0,vb=1 那么 v a = v b = 1 v_a=v_b=1 va=vb=1
- 这样我们可以构造方案
- 现在我们顺序考虑, s x s_x sx 表示从起点出发能到达导线 x x x 的集合
- 手玩样例可以得到 s x = s y = s x ∪ s y s_x=s_y=s_x\cup s_y sx=sy=sx∪sy
- 找到是否存在 ∣ s x ∣ = n |s_x|=n ∣sx∣=n 并构造 。
- 证明可以考虑从每个导线出发跑一遍,给每个平衡器定向,可以发现一个平衡器不会被正反定向两次
- 实现用 bitset 。
- T = 2 T=2 T=2
- 猜不到结论哩:当 N = 2 N=2 N=2 时无解, N > 2 N>2 N>2 时一定有解 (下面给出构造)
- 还是手玩,发现 N = 3 N=3 N=3 时无论如何都有解
- 瞎想了一会感觉没啥思路
然后看题解 - 还是逆向考虑,设 e d i ed_i edi 表示导线 i i i 的最终位置, c n t i cnt_i cnti 表示最终位置为 i i i 的个数
- 如果 e d a = e d b ed_a=ed_b eda=edb 显然没有用处
- 注意到 c n t i cnt_i cnti 不会有重复
- 所以不会出现 c n t e d a = c n t e d n = n − 1 cnt_{ed_a}=cnt_{ed_n}=n-1 cnteda=cntedn=n−1 的情况 。
__EOF__

本文作者:仰望星空的蚂蚁
本文链接:https://www.cnblogs.com/cqbzly/p/17530134.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cqbzly/p/17530134.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」