8+5+0=13
没有除以10
T1:
比赛的时候,推了一下样例和一个小数据,感觉答案好像很好求
比较难描述,大概就是:一段路程,记路过人数为x
当x=0时,只需经过一次,x>0时,要经过2x-1次
挺好证伪的,但是我开始了思考,这可以用差分来做
一开始想用线段树,但是太大了,想了一会优化了一下思路
就真变成差分了,将一个区间拆成两段,头+1尾-1
如果头位置在尾后面就调换位置
然后跑一遍,由于我太相信那个规律,觉得是对的
全程在肝这题,T23无话可说
发现错了的时候很绝望
正解:
T1:
设一个人的起点是x_i,终点是y_i
上述解法中,我把x_i<y_i与x_i>y_i当成一类情况了(因为我出小数据时完全没考虑到)
但实际上两者不能混为一谈
设走到位置i,有o个人从i到i+1,有p个人从i+1到i
1.如果p>=o
p的每个人都会让车经过这段路(i~i+1)一次,共2*p次(同时每次从i到i+1都可以带走o中的一个人)
但由于p是从右往左,我们还得先从i走到i+1,所以最后共2*p+1次(同时可以带走o中的一个人)
很明显一次次从右到左的过程中就可以把从左到右的人给带完,所以只需考虑p
2.如果o>p
o中除了第一个人都会让车经过这段路一次,共2*o-2次
而第一个人只会经过一次,最后共2*o-1次
很明显每次从i+1回到i时把p的人带上可以带完
而我就是只想到了1,恰好样例里2等价为1
gg
T2:
ans可以表示为q*p
要求最小质因数不能小于p
我们可以用q减去2~q中最小质因数小于p的数的个数(容斥)
至于怎么求:
例如我们将2,3,5的倍数减去,会发现6,10,15的倍数减多了,要加回来
加回去后又发现30的倍数加多了,要减回来
设a为小于q的质数
x为其中i个数的积
若i为奇数,则减去q/x,否则加上q/x
即可求出q*p是第几大
二分q即可
由于:p小时,小于p的质数很少
p大时,ans/p很小,质数的积很容易爆掉
所以不会时超