题解 P2158 【[SDOI2008]仪仗队】

· · 题解

前言:

更不好的阅读

这篇题解真的写了很久,改了又改才成为这样的,我不会写题解但我正在努力去学,求通过,求赞。。。

题目:

BZOJ

Luogu

思路:

像我这样的数论菜鸡就不能一秒切这题,怎么办呢?

拿个栗子手玩一下:

假设n=6,我们看看主人公可以看到的人的位置和他自己的位置有什么关系

随便选几个点,(1,4),(2,6),(4,4),主人公在(6,1)

经过大于几分钟的时间,我发现了一个性质

|~x-x'~|\text{和}|~y-y'~|\text{互质时就能看到(设(x,y)表示主人公位置,(x',y')表示某同学位置)}

这样我们就可以枚举x-x'的值和y-y'的值了, 但是时间爆炸:

怎么办呢?

~~废话肯定有啊不然这题出出来了~~ 对噢,我们可以用欧拉函数来做呀! 下面有一篇写得比较好的洛谷日报链接,请**先阅读完本篇题解**,感兴趣的再点 [~~點❤開❤有❤驚❤喜~~](https://www.luogu.org/blog/Morning-Glory/ou-la-ji-lie-yang-xi-zheng-ming-post) 再给你们看一个东西: ![](https://s2.ax1x.com/2019/08/22/mwpop8.png) 它逆时针旋转45°后左右对称了! 也就是说它拥有对称性。 先放着不管(~~那你为什么现在放粗来呀~~) 上面说了,如果要看得到那么要满足$gcd(|~x-x'~|~,~|~y-y'~|) =1$。 我们假设$|~x-x'~|~<~|~y-y'~|$。 如果我们固定了$|~y-y'~|$要找满足条件的$|~x-x'~|$。那么这样一来答案不就是$3+2*\sum_{i=2}^{n-1}\varphi (i)$了?(这里乘$2$是因为我们只做了当$|~x-x'~|~<~|~y-y'~|$的部分,又因上文写道这满足对称性所以我们可以乘$2$。加$3$是因为我们特判了$(0,1),(1, 0),(1,1)$这$3$点。) 对于$\varphi$函数,$\varphi (i)$表示**小于i,且和i互质的数的个数**,~~好了,你看完这句你就可以点开上面那条链接了~~。 我们可以用一个$O(n~log~n)$的埃氏筛去预处理$\varphi$函数(见代码部分),或者使用一个$O(n)$的来预处理(~~请自行翻阅资料~~)。 # 代码: 关于埃氏筛$\varphi$函数: ![](https://s2.ax1x.com/2019/08/22/mwpL0s.png) 主程序(哎呀,$\texttt{int main()}$没截到QAQ): ![](https://s2.ax1x.com/2019/08/22/mwpO7n.png) ❤感谢收看❤