【学习笔记】AGC041

Domino Quality

  • atcoder简洁题面好评
  • 好阴间的构造题啊。。。
  • ( A , Q ) (A,Q) (A,Q)表示每行每列数量为 Q Q Q A × A A\times A A×A大小的矩阵
  • 如果我们知道 ( A , Q ) (A,Q) (A,Q)以及 ( B , Q ) (B,Q) (B,Q)的构造方法,我们就能构造出 ( A + B , Q ) (A+B,Q) (A+B,Q)
  • 具体做法是把两个矩阵分别放在左上角和右下角,其余为空
  • 显然考虑 Q = 3 Q=3 Q=3的情况 并不显然
  • 显然可以把 ( 4 , 3 ) , ( 5 , 3 ) , ( 6 , 3 ) , ( 7 , 3 ) (4,3),(5,3),(6,3),(7,3) (4,3),(5,3),(6,3),(7,3)全部暴搜出来
  • 显然可以打表
  • 诶n=7怎么暴力跑不出来呀
  • 诶加了玄学剪枝怎么就跑得飞快呀

Unique Path

  • 美妙的构造题 虽然我还是做不出来
  • 显然删去所有边权为 1 1 1的边,对于每个连通块内的点两两有唯一简单路径
  • 先不忙对每个连通块缩点,首先我们从每个连通块中选取一个点,然后把它们连成一个环,这样对于不在同一个连通块内的点有至少两条简单路径
  • 设连通块数目为 k k k(上述构造恰连了 k k k条边,构成一颗基环树),那么跨连通块边的数目不会超过 k ( k − 1 ) 2 \frac{k(k-1)}{2} 2k(k1),否则一个连通块不能保持其独立性
  • 因此我们只要判断 m m m的大小是否在范围内即可。
  • 复杂度 O ( n ) O(n) O(n)
  • 总结:考虑答案的上下界

Wide Swap

  • 兔兔的题解
  • 考虑一个好的问题转化
  • Q [ i ] Q[i] Q[i]表示 i i i在原序列中的位置
  • 那么交换 Q [ i ] Q[i] Q[i] Q [ i + 1 ] Q[i+1] Q[i+1]的条件是 ∣ Q [ i ] − Q [ i + 1 ] ∣ ≥ K |Q[i]-Q[i+1]|\ge K Q[i]Q[i+1]K
  • 如果 i < j i<j i<j, ∣ Q [ i ] − Q [ j ] ∣ < K |Q[i]-Q[j]|<K Q[i]Q[j]<K那么 Q [ i ] Q[i] Q[i] Q [ j ] Q[j] Q[j]的相对位置关系不会发生改变,换句话说 Q [ i ] Q[i] Q[i]永远在 Q [ j ] Q[j] Q[j]之前
  • 那么我们让 Q [ i ] → Q [ j ] Q[i]\to Q[j] Q[i]Q[j]这样跑出来的拓扑序一定是满足限制的
  • 同时我们要让 P P P的字典序最小,转化成 1 1 1 Q Q Q中最靠前,在 1 1 1最靠前的前提下让 2 2 2最靠前
  • 这是一个经典问题 不要再经典了我都wa过一遍了 可以建反图跑最大拓扑序解决
  • 可以按编号从小到大考虑 Q [ i ] Q[i] Q[i],我们发现只要找到 Q [ i ] Q[i] Q[i]的前驱编号最大和后继编号最大连边即可。
  • 复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

Nondivisible Prefix Sums

  • Hint1:所有元素之和不能被 P P P整除 显然
  • Hint2:众数出现次数不超过 n 2 \frac{n}{2} 2n的序列合法(可以倒着考虑
  • Hint3:有一个巧妙的转化。设众数为 x x x,将所有元素乘 x − 1 x^{-1} x1,那么前缀和也会乘 x − 1 x^{-1} x1
  • Hint4:注意到每跨过 P P P都会消耗至少一个不为 1 1 1的数字
  • 那么不为 1 1 1的数字至少有 ∑ i = 1 n y i P \frac{\sum_{i=1}^ny_i}{P} Pi=1nyi
  • 考虑构造方案以证明其等价性
  • 考虑每次在末尾加上当前剩余数量最多的 x x x
  • 若前缀和是 P P P的倍数,那么加入另一个数 y y y,否则加入 x x x
  • 事实上,如果上述构造不合法的话,那么就会剩一堆相同的数,同时这些剩下的数 一定都是 1 1 1
  • 问题在于,初始局面中众数是 1 1 1,如果众数改变的话,那么任何时刻众数和次众数的数量相差都不会超过 1 1 1,最后会剩一个数,又因为 P P P不整除 ∑ y i \sum y_i yi,所以最后这个数一定放得下
  • 因此任何操作时刻,众数都是 1 1 1,并且最后剩了一堆 1 1 1放不下
  • 不妨把我们构造的序列写出来,一定是写了一堆 1 1 1,然后写一个不为 1 1 1的数字
  • 这样不为 1 1 1的数字恰好写了 ∑ i = 1 n y i P − 1 \frac{\sum_{i=1}^ny_i}{P}-1 Pi=1nyi1个,那么我们还会剩下不为 1 1 1的数字,就不满足全剩 1 1 1的假设了
  • 把式子魔改一下,设众数出现次数为 k k k
  • ∑ i = 1 n ( P − y i ) [ y i ≠ 1 ] + P − 1 ≥ k \sum_{i=1}^n(P-y_i)[y_i\ne 1]+P-1\ge k i=1n(Pyi)[yi=1]+P1k
  • 考虑总方案数 ( P − 1 ) n (P-1)^n (P1)n减去不合法的方案数
  • P ∣ ∑ i = 1 n y i P|\sum_{i=1}^ny_i Pi=1nyi的情况可以递推
  • d p [ i ] [ j ] dp[i][j] dp[i][j]表示考虑前 i i i个数, ∑ ( P − y i ) = j \sum (P-y_i)=j (Pyi)=j的方案数
  • 答案是 ∑ k ∑ s u m [ k ≥ s u m + P ] [ k ≠ s u m ] ( n k ) ( p − 1 ) d p [ n − k ] [ s u m ] \sum_{k}\sum_{sum}[k\ge sum+P][k\ne sum]\binom{n}{k}(p-1)dp[n-k][sum] ksum[ksum+P][k=sum](kn)(p1)dp[nk][sum]
  • 复杂度 O ( n 2 ) O(n^2) O(n2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值