「2019.7.18 考试」关于压力下的加速度。

今天早上又考了一场。

现在题还没改完,先写一下考试路程。

我习惯性的先看完了三道题。

然后昨天教练还读了一下那个IOI选手的答题思路,就是先切第三题然后攻T2,我的话打算先把T3打个暴力就不管他,跑到考试结束连个6也没跑出来于是结束了。

然后我就开始写T1的暴力了。

看出来是欧拉路,但是我不会统计,然而用map判重一个傻逼重载运算符我卡了半天写不对,最后还是用了随机化hash的思想rand出了几百个数,挨个和边经过次数乘起来作为hash值这样的,然后判重过了,这道题就弃了开始干T2。

T2我的思路真的是一点一点来的。

T2是这次比较成功的一部分,虽然分数不是很理想(卡常不到位),我和天皇的暴力基本一样,但是他加了个clock然后70了。

说一下暴力的思路,我的期望得分是(80),但是这个数据稍微有点苟,大于1e5的数据全都是1e9的,导致我全都MLE。

1.首先狗掉了k==1和k==0的思路,k==0的话就直接GCD即可,k==1也同样是GCD,只需要枚举不同的集合GCD,然后判断不包含的那个是不是剪掉之后小于1,之后选出来最大的一个GCD即可。

2.在观察数据范围,1e5范围的值域其实可以暴力切掉,1e5*100暴力判断即可,到这里是40。

3.在接着qj不了数据范围了。

但是我找到了一个性质:如果一个数d不符合要求,那么他的倍数也不符合要求,这样我们就可以打个埃筛,筛掉很多后面的数。

复杂度变成了一个loglogn的,虽然还要判断,不过只需要判断质数也就是ln(n)的大小,虽然还是要循环O(n),但是判断只需要判断质数是否成立即可,因为前面的全部被他的最小质因子筛掉了,线筛会更优秀一些,基本接近线性了,所以我估分到了80,虽然是50,但是收获还是蛮大的。

正解是数论分块,学反演的时候学过一次,同样和筛是一起学的,不过我对筛的认识还是比分快清晰一些,这样考场上打了筛而不是分块。

猜你喜欢

转载自www.cnblogs.com/Lrefrain/p/11206408.html