【题解】CCPC Wannafly Camp Day6

难度分布

  • Easy: C,K,L,M,N
  • Easy-Medium:J,F,I,G
  • Medium:D,E,H
  • Medium-Hard:A,B

A. Convolution

  • 2^(ab)=sqrt(2)^((a+b)^2-a^2-b^2)
  • 对每个 a+b,求出 sqrt(2)^(-a^2-b^2) 的和
  • NTT
  • 时间复杂度:O(nlogn)

B. 双圈覆盖

  • 先将每个点度数变成3:拆点
  • 之后⼀定有偶数个点,且去掉环后点两两配对了
  • 第⼀类圈:最外层的环
  • 第⼆类圈:配对边 和 {(2i,2i+1)} 构成的⼀系列欧拉回路
  • 第三类圈:配对边 和 {(2i,2i-1)} 构成的⼀系列欧拉回路

C. 酒馆战棋

  • 最好情况:普通随从破盾,剧毒随从杀怪
  • 最坏情况:剧毒随从破盾
  • 模拟即可

D. 递增递增

  • 出题⼈做法:
  • 因为 a[1…n] 递增,考虑最⾼位,a[1…k] 为0,a[k+1…n]
    为 1,然后分成左右两半做
  • 维护当前已经定的值和 a[L…R] 的最紧的限制的关系
  • 有更好的做法,但这个做法更通⽤

E. Access

  • f[x][i] 表示⼦树 x 经过 i 次 access 的形状个数
  • 合并时,access 次数等于所有⼉⼦⼦树⾥ access 次数之
    和(要钦定⼀个⼉⼦来将它的实边延⻓上去)
  • ⼀种情况;没有⼉⼦的实边延⻓上去了:那么要额外执⾏
    ⼀次 access(x)
  • 时间复杂度:O(nk)

F. 图与三⻆形

  • ⾮同⾊三⻆形:⿊⿊⽩或者⽩⽩⿊
  • 恰好两个点连出来的边不同⾊

G. 单调栈

  • ⾸先 f[1] 肯定是 1,把所有是 1 的位置拿出来,把 K…1 倒
    序放⼊,其他 f[x]-=1,然后递归下去做

H. 异或询问

  • 做法1:[L,R] xor x 可以分成 O(logn) 个连续的区间,对每
    个区间去⽤ multiset 计算答案
  • 做法2:将 trie 树建出来,把 L,R 在上⾯⽤类似线段树区间
    询问的⽅法去进⾏询问

I. 变⼤

  • 最优解⾥ a[1…n] 肯定是分成若⼲段,每⼀段⾥最⼤值唯
    ⼀,且最后这⼀整段都会变成这个最⼤值。
  • ⻓度为 L 的⼀段需要的次数是 L/2,背包⼀下即可。

J. K 重排列

  • 考虑 i->p[i] 连边后,周期就是所有环的⻓度的 LCM,所以
    充要条件就是每个环的⻓度都是 K 的约数
  • 每次枚举最⼩点所在的环的⻓度,⽤组合数学的⽅法求⽅
    案数

K. 最⼤权值排列

  • 越靠中间对答案影响越⼤
  • 所以⼤的数尽量往中间放

L. 你吓到我的⻢了.jpg

  • BFS

M. ⾃闭

  • 注意读清楚题意

N. 合并

  • 很多奇奇怪怪的贪⼼交上来了
  • 其实⽆论怎么进⾏合并,最后的答案⼀定是 a[1…n] 两两的
    乘积之和
  • 所以只要你写的贪⼼没算错答案就肯定是对的
全部评论

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
5 1 评论
分享
牛客网
牛客企业服务