这场彻底跪了。下文贴了很多莫名WA掉的代码们。如果读者能找到到底是哪里WA掉了,麻烦您联系我一下。
唯一一道过了的水题。
以下是补题。
这个题TLE掉了。原因是单调队列不熟练,还需要一个记忆化的小技巧。
记忆化技巧代码加单调队列:
注意,样例在5000范围,5000乘5000的gcd数组不用short的话会爆内存。
我觉得从奇顶点开始DFS一定没错。但是评测机不这么认为……
后记:我知道错到哪里了!我一直以为是不重复的覆盖……
其实重复也是可以的,也就是说我硬生生拔高了原题的难度……
唉,怪不得。那么代码就更简单了,low的不谈
上面这个代码是不重复覆盖的优秀代码。
下面来源于隔壁队伍的通关代码。我不知道为什么里面DFS还用到队列等等一大堆的东西。
储存斜率用了两种做法。开longlong那个TLE掉了,double那个WA了,实在无语……
WA的double已经改正了。那么错的就不留了,只留下错的longlong存斜率版本。
后记:这种采用了反演的写法要考虑eps——
事实证明,没有通过就是eps的问题。唉,太悲伤了……
以下是修改后的通关代码:
我们需要学习在map中引入自定义运算符,从而实现map中的eps控制。
我一开始想手算积分,结果发现这个多元积分上下限有绝对值判定,换句话说积不出来。那么就只能使用积分算法了。
积分算法原来也不难,模拟就好了。反正要求精度不高……
集合中可重复取数,求异或的最大值,集合大小很大。
有一个与FFT、NTT非常相似的东西叫FWT,比前两者简单,用于解决数组异或(不进位加法)卷积的问题。
FWT和它的逆,将数组异或(不进位加法)的卷积变为了乘法。
对给定置换A开k次方,k是个大素数。
由群论知,对大素数k,k次方运算是一一映射,所以实质是个求数论倒数的运算。
由于模不是素数,用费马欧拉定理不方便,只能改用一次不定方程的扩展来求逆。