Codeforces Round #140 (Div. 1)

转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove 

本来是要掉rate的,结果因为SB被取消资格了。。逃过一劫,不过下次估计要禁赛或者封号了,TAT

A :lying Saucer Segments

表示真心看不懂题,类似汉诺塔的问题,然后就直接YY个结论Fn=(3*Fn-1)+2,貌似是这样的吧

Fn=3^n-1。好吧,虽不明但觉厉地过了,差点爆0 。


B:Naughty Stone Piles

哈夫曼树,但是每一堆有一个叠加次数限制K。

可以考虑对于K很大,也就是没有限制的时候,我们是将重量递增排序,然后将前n-1轻的全部加到最重的上面 。

那么对于有限制K的。贪心

将除了最重的那K个重的,最终是叠加到最重的上面,然后对于除了这K+1个位置,也就相当于有K个位置,可以叠加,那么就再往前累计K*K个物品。


C:Anniversary

这题就不多说了,跪了全场,也让部分人CHA疯了的。

主要利用的以下性质

斐波那契数列的整除性与素数生成性

  每3个数有且只有一个被2整除,

  每4个数有且只有一个被3整除,
  每5个数有且只有一个被5整除,
  每6个数有且只有一个被8整除,
  每7个数有且只有一个被13整除,
  每8个数有且只有一个被21整除,
  每9个数有且只有一个被34整除,
  .......

另外注意不能二分,自己想反例吧,不是单调的

补充一下:比较说[1000,2000]   999的倍数只有一个,1000的倍数有两个,所以不能二分

然后为什么只需要枚举sqrt(r)呢,在适牛的教导下终于明白了

我们对于某一个x,需要满足r/x-(l-1)/x>=k,需要找出最大的x

首先r/x是只有sqrt(r)级别个的,而对于r/x==y的所有x中,r/x-(l-1)/x随着x的增大而增大,也就是局部单调,那么我们只需要判断最大的x是否满足>=k即可,这样既是满足>=k,又是最大的x


D:The table

一开始想法就对了,结果去跪了全场的C,哭~~~

贪心,每次选择sum最小的行或者列去置反,然后更新一下所有的行的和以及所有列的和

注意不能标记,也就是某一行某一列可能置反两次然后抵消的

直至所有的行和列都满足为止




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值