2019.03.30【NOIP提高组】模拟 A 组 总结

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很小,质数的积很容易爆掉

所以不会时超

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值