10.31

Posted hzoi2018-xuefeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.31相关的知识,希望对你有一定的参考价值。

技术图片

 

 加油(话说为什么前段时间天天改不完题无法颓博客考的贼烂,现在天天改题稍快颓博客成绩上升)

 

A. 简单计算


 

首先,看到向下取整我们想到了整除分块....

正解:考虑如何计算

技术图片

 

 很容易的可以想到,我们的技术图片=$(i*q-i*q\\% p)/p$

 

那么我们的技术图片就等价于技术图片$(i*q-i*q\\% p)/p$

 

通过一番愉悦的打表,我们发现技术图片$(i*q\\% p)$有着一个奇妙的循环节。

 

并且发现:循环节长度就是$p/gcd$,循环节个数就是$gcd$。

既然这样那么O(1)柿子就可以推了。

核心代码:技术图片

 d为gcd(p,q)

 

B. 格式化

 首先考虑a<b的情况,因为每次我们取这样的物品得到的物品一定是更多的。

那么我们只需要让最开始我们借的容量越少越好,后面的不够再添的话也不会使答案更劣的。

即按照a升序。

其次我们考虑a>b的情况,考虑如何证明按照b降序是正确且最优的。

我们设1在2前面更优,那么设rem表示当前剩余的容量,设cost表示b-a即我们添这个物品能得到的贡献,设st表示a。

那么如果1在2前面更优,考虑一种极端情况,即1可以在2前面,然而2在1前不可以。

即$$rem+cost_1>=st_2 rem+cost_2<st_1$$

$$rem>=st_2-cost_1 rem<st_1-cost_2$$

$$st_2-cost_1<=rem<st_1-cost_2$$

$$st_1+cost_1>st_2+cost_2$$

那么st+cost不就是b吗?

核心代码:

技术图片

 

 

C. 真相

首先我们可以考虑一种特殊情况:没有第一种人,即咩有”$“

那么我们可以发现,对于所有人的关系已经确定,也就是说我们给最后一个人一个属性:说真话/谎话

那么我们就可以通过递推的形式把所有人说真话/谎话确定,知道最后我们判断戳来第一个人说真话/谎话,那么与最后一个人对第一个人的意淫做比较就可以得到是否矛盾。

现在考虑有“¥”的情况。

如果有$的话,那么我们发现最后就不会是一个环?的形式了,而是很多条被$拦腰“桀”断的链式结构,我们想要让这些链式结构在同一种情况下成立。

发现:同一种情况下只会有一种情况的K成立。

其实吧,这样的话我们可以清楚的知道,一定有很多条链的末尾的‘$‘是谎话。

那么我们可以递推预处理出来K相同的链在$是真话的前提下说真话的人数和说谎话的人数。

然后枚举是哪个K是真话,然后判断说真话的人数是否等于K。

这个可以O1判断,就是用所有¥都说谎话时候的说真话的人数(可以直接预处理)-这个K说真话时说谎话的人数(就是等价于这个K说谎话的时候说真话的人数)+这个K说真话时说真话的人数即可。

核心代码:

技术图片

 

以上是关于10.31的主要内容,如果未能解决你的问题,请参考以下文章

10.31

10.31 总结

10.31

学习笔记10.31

达内 10.31linux基础学习笔记

10.31