今天A组难度直达D组
7.13(7.12要去被虐)的比赛要注意:
0. 摆好蒟蒻心态,不要自以为是。
1. 先打暴力再打正解,有助于思考与查错。 (每一题都先打了暴力)
2. 首次思考时间控制在1h, 每一题都要保证至少思考20分钟。 (第三题最后大半小时才思考,应该先思考好)
3. 记得多根据数据范围与问题想一下学过的算法。(今天第二题就是这么切的)
第一题
神tm原题,直接二分答案,然后判断有多少个比它小。时间
O(nlogk)
第二题
给出了一堆神奇的式子,一开始没看懂,想贪心构造题目中的e数组。 想了差不多10分钟没啥收获。
后面再了一下dp,发现这好像就是一个多重背包.. 于是就直接上了单调队列。(拆物品好像会T)
打得十分繁琐,常数还很大。其实还可以加两个优化:
1.先枚举余数,再枚举取了多少个
2.可以先把范围为a[i]..b[i]转换为0..b[i]-a[i]的问题。这样打起来十分简洁
第三题是一道玄学题。首先我们可以打表得到规律: 0,1,6,质数与2的幂数
(如果是质数绝对是,否则先预处理phi,然后算公差,再一个个判,只需要0.5s就可以把所有都判完了)
然后尴尬的地方就在操作2. 一直没有想到mod与这个规律有什么可以相通的地方。 其实压根没啥关系: 一个数n最多只会被小于他的数模log n次。于是我们只需要每一次找到需要模的地方然后暴力修改。 找这个可以用线段树。 维护一个区间最大值mx,若a< mo则这个区间不用做。 否则就先暴力修改mx,然后分治l..loc[mx]-1与loc[mx]+1..r。这一步可以直接在线段树上完成。
时间复杂度就是
n(logx)2+mlogn
,前一部分是取mod的时间复杂度,后一部分是线段树上分治操作的复杂度。
(码的时候忘了在线段树上二分,直接对区间分治了,于是第二部分就多个log)
7.14的比赛要注意:
0. 摆好蒟蒻心态,不要自以为是。
1. 先打暴力再打正解,有助于思考与查错。
2. 首次思考时间控制在1h, 每一题都要保证至少思考20分钟。 不能在最后没事干了才想没想过的题目
2.1. 先把所有题都看一遍再思考,把握一下时间。
3. 记得多根据数据范围与问题想一下学过的算法。