省选测试6
作者:互联网
A:Colorado Potato Beetle
考试连暴力都不会打了……
首先考虑20pts暴力怎么写
因为总走的路程不会超过30×30
所以可以直接模拟走的方法,然后人为框定一个范围
考试时想的是怎么去做框住了什么,但是显然不好做
所以很好的一个东西是,可以模拟虫侵害的过程bfs
即选取一个起点,如果旁边的格子没有被撒过药,就把这个格子加进队列
大约是\(O(2000*2000)\)的复杂度
然后发现暴力去跑每一个格子打标记是没必要的
因为很大一部分的格子是等价于一个的,类似离散化的思想
然后离散化之后 可以把一条路径缩成一个点
这样一个点就对应着一个区域,然后发现n很小
离散化之后类似暴力就可以直接\(n^2\)做了
B:Distinct Paths
这个数据范围显然是假的 因为 n+m-1 > k 一定不合法
然后就发现n+m <= 11了
然后发现其实状态就不算很多了,直接记搜就可以了
两个减枝:
1.如果到某个位置,剩下的颜色已经不够放剩下的格子了 直接返回
2.如果某几种颜色都没有出现过,那么这几种颜色都是等价的,直接跑一个然后乘上系数就可以了
C:不好不坏题
考试的时候打了线性筛的算法
觉得中间过程还是挺有纪念意义的
内存只够开1.3e8左右,所以直接线性筛空间一定会炸
最开始的想法是把low数组改成short类型,然后预处理\(i^j\)
i小于等于1e4时预处理,后面的部分到线性筛时暴力算 这样可以压掉0.5e8的空间
然后发现此时空间为1e8的(int) f数组,1e8的(short) low数组, 1e8的(bool) vis数组
发现还是不行
考虑继续优化
然后YY了 f数组只开到5e7,对于后面的函数值, vis标记显然是正确的
所以质数是可以判掉的,而非质数的数,一定可以由两个小于的等于5e7的数乘起来
所以感觉就可以做了
线性筛时只跑到5e7,但是vis和low数组标记到1e8级别
这样是0.5e8(int) 1e8(short) 1e8(bool)
表面看来空间是满足了 但是发现后面还要标记最小质因子 然后又死了
再然后发现因为积性函数的过程是乘起来的
所以对于\(f[pq] = f[p] * f[q]\)(p,q互质)
只要有其中一个满足\(\% mod\)等于0, 那么\(f[pq]\)也一定合法
所以只需要记录一个bool类型,表示是否mod p等于
但是发现对于\(i \% pri = 0\)的情况又死掉了
考虑怎么处理 low数组处理好了显然就可以做
但是对于i=low[i]的情况是判不掉的
所以要特殊处理 , 对于mod=2的情况
发现一个数\(p^k\)要满足:
- p不为2 ,因为p为2的情况函数值一定是奇数
- p是奇素数且k为偶数 ,因为函数值是\(1+p+p^2+...+p^k\),又p为奇数,所以容易知道k要为偶数
对于mod=2017的情况,不是很好做
但是发现如果要函数值\(\% mod\)等于0
要满足条件很苛刻:
1.i为合数
2.i函数值\(/% p\)为0
3.i是\(p^k\)的形式
所以拿会MLE的代码去跑一遍,发现只有三个数:5340721,12008989,13980121 ,特判掉就可以了
考虑正解
上面的做法是否能够扩展呢?
显然是可以的
首先2的做法可以扩展,因为对于一个数,不满足条件,当且仅当它所有质因子的指数都是偶数,(2的指数随意
所以这个数一定是\(2^k\)乘一个平方数的形式
所以直接根号枚举平方数,把它所有2的次方倍筛掉就可以了
但是还不够,因为会筛重
一个数的4次方可能会是另一个数的平方,所以只用筛掉平方就可以了
对于2017的情况
因为积性函数是可乘的
所以和上面一样只要有一个满足,乘起来也满足
所以只要找出一个数满足\(f[i]%p=0\),那么i的所有倍数都满足了
只考虑i为质数的次方的情况,因为合数一定可以被质数标记
首先考虑次方为1:那么就是\((i+1)\% 2017 = 0\)
所以质数的枚举可以直接隔4034枚举一个
枚举复杂度是\(/frac{n}{4034}\)的
然后miller_rabin判质数
如果合法就累加到答案里
但是还有算重的
两种:
1.\(i*i\)的情况,因为i,i不互质所以前提不成立,算出来的函数值是不对的
2.\(i*j\) \(j*i\) 这两种显然等价,但是算了两次
所以把质数都有哪些记录下来,然后再减掉一半的贡献就可以了
对于指数为2一样枚举就可以了
然后发现这时候最小满足条件的质数是2311,立方已经炸掉n的范围了,所以没必要去重
但是指数为3的时候最小的质数是229,4次方项是小于n的,所以也要容斥一下去掉贡献
后面的情况不用枚举 (打表证明
标签:所以,省选,质数,然后,枚举,测试,1e8,可以 来源: https://www.cnblogs.com/2004-08-20/p/14311423.html