Codeforces Round #240 (Div. 1) ABCD

转载请注明出处

题目链接

A:

把分数尽量放在第一对数对上,然后让剩下的数对两两互质即可,注意一些特殊情况(m=0或者n=1)

B:

dp[长度][当前最后一个数的大小],这样去转移:dp[len][x] = sigma(dp[len-1][y,y是x的因数]),因为每个数的约数都不多。

C:

建立归并树,求一下每一层新产生顺序对和逆序对

然后注意到,进行操作x时,只会影响归并树中第[x,n]层的逆序关系,那么就把对应层的逆序对和顺序对数量交换一下就好了,最后再O(n)统计一下当前的逆序对数,就是答案了

D:

容易知道答案只与树节点的层次分布有关,和树的形状无关,因此先预处理出dep[i]表示在dfs树中深度为i的节点有多少

然后这样得到答案:枚举每一层,考虑让最后这一层的水滴数最大,那么就是通过硬币让位于前面层的水滴延迟到这一层,代价为两层深度差,这里用线段树维护一下就好了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值