arc117C~F

31 篇文章 0 订阅

arc117

C

  • 假设三种颜色分别为0,1,2,那么操作相当于在模3意义下取-x-y,满足结合律,直接组合数算一下即可。

D

  • 考虑将最后的点权按照从小到大的顺序排列,那么只需要考虑相邻的距离是否满足条件。
  • 因此对于相邻的直接取它们的距离即可。
  • 等价于求一个排列,点权即为上一个加上两者之间距离,等价于求从某个点开始到某个点结束经过所有点的路径长度最小,那么只有一条路径不会经过两遍,取直径即可。

E

  • 考虑最后的折线,一层一层DP即可,设 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示当前有 i i i段中间可以继续放,一共放了 j j j个,总共的对数是 k k k,转移相当于是合并 x x x段,插入 y y y个点,形成 i − x + y i-x+y ix+y段,并且在下一层有 2 i − x + y 2i-x+y 2ix+y个点。发现只与 x − y x-y xy有关,因此枚举 x − y x-y xy转移,贡献可以预处理。最后复杂度 O ( n 6 ) O(n^6) O(n6)
  • 实际上不用枚举到了多少层,就可以做到 O ( n 5 ) O(n^5) O(n5)了。

F

  • 首先把环变成链,然后求一个前缀和,假设下标从 1 1 1开始,对于 a i ( 1 ≤ i < n ) a_i(1\leq i<n) ai(1i<n),要求 L [ i + 1 ] = a i + 1 ≤ S i + n − S i ≤ S 2 n − a i + n + 1 = R [ i + 1 ] L[i+1]=a_{i+1}\le S_{i+n}-S_i\le S_{2n}-a_{i+n+1}=R[i+1] L[i+1]=ai+1Si+nSiS2nai+n+1=R[i+1],对于 a 1 a_1 a1要求 L [ 1 ] = a n + 1 ≤ S 2 n − S n ≤ S 2 n − a 1 = R [ 1 ] L[1]=a_{n+1}\le S_{2n}-S_n\le S_{2n}-a_1=R[1] L[1]=an+1S2nSnS2na1=R[1],以及有 S i ≤ S i + 1 S_{i}\le S_{i+1} SiSi+1
  • 因此我们可以二分 S 2 n S_{2n} S2n,然后建出上面的差分约束模型,以 S 2 n S_{2n} S2n为起点,判断一下 S 1 ≥ 0 S_1\ge0 S10是否满足即可。
  • 由于这个图十分特别, i i i i + n i+n i+n R [ i ] R[i] R[i] i + n i+n i+n i i i − L [ i ] -L[i] L[i] i i i i − 1 i-1 i1连0,可以用一些特殊的方法跑最短路。
  • 首先判负环:不存在 L [ i ] > R [ i ] L[i]>R[i] L[i]>R[i],不存在一个 [ 1 , n ] [1,n] [1,n]的子序列 p [ 1..2 k + 1 ] p[1..2k+1] p[1..2k+1]使得 R [ p [ 1 ] ] − L [ p [ 2 ] ] + R [ p [ 3 ] ] . . . − L [ p [ 2 k ] ] + R [ p [ 2 k + 1 ] ] < 0 R[p[1]]-L[p[2]]+R[p[3]]...-L[p[2k]]+R[p[2k+1]]<0 R[p[1]]L[p[2]]+R[p[3]]...L[p[2k]]+R[p[2k+1]]<0
  • 接下来的最短路只需要同时跑 i , i + n i,i+n i,i+n,按照 i i i递减的顺序即可。
  • 证明?不知道。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值