2019牛客暑期多校训练营第九场
2019-08-16 / Luo Jinrong
进度
A | B | C | D | E | F | G | H | I | J |
---|---|---|---|---|---|---|---|---|---|
∅ | ∅ | √ | ∅ |
E. All men are brothers
1 |
|
B. Quadratic equation
题意
给定两个整数$b$,$c$,求$x$,$y$满足$(x+y) mod p=b$,$(x*y) mod p=c$,其中$p=1000000007$。
做法
由
$$
(x+y)\mod p =b
$$
可得
$$
(x+y)^2\mod p=b^2\mod p
$$
又因为
$$
xy\mod p=c
$$
得
$$
((x+y)^2-4xy)\mod p=(x-y)^2\mod p=b^2-4c\mod p
$$
于是问题转化为求二次剩余
- 如果$b^2-4c$是模$p$的二次剩余,因为$p\mod 4=3$,则$x-y=(b^2-4c)^{(p+1)/4}$,因为$x-y+b\mod p=2x\mod p$,所以可以通过$(x-y+b)*inv\mod p$得到$x$,其中$inv$为$2$的逆元;$y$就可通过$b-x$得到。
- 如果$b^2-4c$是模$p$的二次非剩余,则不存在这样的$x$,$y$,输出$-1 -1$。
1 |
|
D. Knapsack Cryptosystem
题意
给定一个整数数列$a_i$和一个整数$sum$,求数列中哪些数的和恰好为这个整数,以01串形式输出。
做法
因为$1\leq n\leq 36$,如果直接暴力做的话复杂度为$O(2^n)$,显然会T。这个时候我们就可以想到分块暴力做,即折半枚举,我们先枚举前一半的每种情况求和$s1$,用map存下来,map分别存每种情况的和以及对应的01串的十进制形式。然后枚举后一半,每种情况求和$s2$,对于每一个和查找map里面存不存在$s1=sum-s2$,如果存在就直接输出s1对应的01串及s2对应的01串。
1 |
|
J. Symmetrical Painting
题意
给定n个宽度在x轴方向且为1的矩形,将这些矩形的部分区域涂掉使得其成为一个对称轴在水平方向的轴对称图像,求这个轴对称图形的最大面积。
1 |
|
return 0;
本文链接:
https://luojinrong.github.io/2019/08/16/2019牛客暑期多校训练营第九场/