衡水老哥们有点强啊。
A. 解码
对于\(x^c\equiv m(mod\ n)\),这显然是一个经典的\(c\)次剩余问题。显然有\(x\equiv \sqrt[c]{m}(mod\ n)\),即\(x\equiv m^{\frac{1}{c}}(mod\ n)\)。
根据欧拉定理,如果\(\frac{1}{c}\)在\(mod\ \varphi(n)\)意义下存在,那么\(m^{\frac{1}{c}}\)在\(mod\ n\)就存在。注意到题目中保证了\(c\perp \varphi(n)\),于是\(c\)在\(mod\ \varphi(n)\)意义下存在逆元;于是我们只需要求出\(d\)满足\(cd\equiv 1(mod\ \varphi(n))\),那么\(x\equiv m^d(mod\ n)\)。
逆元可以用扩欧来求,\(m^d\)直接快速幂即可,问题在于求出\(\varphi(n)\)。注意到\(n=pq\)且\(q-p\leq 3\times 10^5\),我们设\(x=\frac{p+q}{2}\),由于\(p,q\)都是奇素数,于是\(x\)肯定是整数,再设\(y=q-x=x-q\),显然有\((x+y)(x-y)=n\),即\(x^2=n+y^2\),那么\(y=\sqrt{x^2-n}\)。
我们直接从\(\sqrt{n}\)开始枚举\(x\)的值,看一下\(\sqrt{x^2-n}\)是否为整数即可。分析一下\(x\)的范围,显然有\(x\in [\sqrt{n},\sqrt{n+(q-p)^2}]\),当\(n\)越大时,这个范围就越小,于是就非常科学地做完了这道题。代码。
B. 排列
C.安排
设\(A_{i,j}=\sum_{k=1}^j[b_k=i]a_k,B_j=-\sum_{k=1}^j[b_k=1]mid\times a_k\),我们需要找到最大的\(mid\)使得\(\min_{i=2}^m\{\sum_{j=1}^n(A_{i,j}+B_j)c'_j\}\geq 0\),且\(\forall j\in [1,n],c'_j\geq 0\)。这里不需要保证\(c'\)序列单调不升是因为我们做了一个前缀和,这里的\(c'_j\)就代表令\(j\)之前的\(c\)都加\(c'_j\)。即\(c_i=\sum_{j=i}^nc'_j\),这样的\(c\)序列肯定是单调不升的。
对于\(m=2\)的情况,如果存在一个\(A_{2,j}+B_j\geq 0\),那么我们令\(c'_j>0\),其余的\(c'\)都等于\(0\)即可。
对于\(m=3\)的情况,我们就得到了一些形如\((A_{2,j}+B_j,A_{3,j}+B_j)\)的向量,我们需要把这些向量线性组合,使得其在第一象限。如果存在第一象限中的点,那么令其余点的\(c'\)均为\(0\)即可,否则的话,我们分情况考虑一下各个象限。
- 第三象限:显然这些向量都很垃圾,会使得答案更劣,令他们的\(c'\)全为\(0\)即可。
- 第二象限:不难发现对于两个向量靠近\(y\)轴的更优,于是我们只取极角最小的向量即可。
- 第四象限:发现靠近\(x\)轴的向量更优,于是保留极角最大的向量即可。
于是我们从二、四象限各保留了一个向量,可以得到一个不等式组,解一下不等式组看一下解集是否为空即可。
对于\(m=4\)的情况,题解里说是半平面交,所以有没有好心人交交我啊。前60分的代码。