其他分享
首页 > 其他分享> > 省选测试6

省选测试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\)要满足:

  1. p不为2 ,因为p为2的情况函数值一定是奇数
  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