废话
今天模拟赛被吊打,我果然是个蒟蒻。
都是数论题,真是拿命。。
正题
T1
【题目大意】
有一个多项式 F F F,每一项的系数都是非负整数,满足 F ( a ) = b , F ( b ) = c F(a)=b,F(b)=c F(a)=b,F(b)=c,满足条件的多项式有多少个,无数多个时输出 − 1 -1 −1。
T组询问。
【样例输入】
2
2 2 2
2 3 3
【样例输出】
2
1
【数据范围】
1 ≤ T ≤ 5 1 \leq T \leq 5 1≤T≤5
1 ≤ x , y , z ≤ 1 0 8 1 \leq x,y,z \leq 10^8 1≤x,y,z≤108
【题解】
特判 a = b = c = 1 a=b=c=1 a=b=c=1的情况。
特判 b = c b=c b=c的情况。
设多项式 F = ∑ i = 1 n p i x i F=\sum_{i=1}^n p_ix^i F=∑i=1npixi,因为每一项的系数都是非负整数,且 F ( a ) = b F(a)=b F(a)=b,所以显然 p i < b p_i<b pi<b。
又因为 F ( b ) = c F(b)=c F(b)=c,于是将 c c c转化成b进制数,每一位与 F F F的系数都相对应。
再判断一下得到的多项式满不满足 F ( a ) = b F(a)=b F(a)=b即可。
打个比方:
设 a = 2 , b = 5 , c = 26 a=2,b=5,c=26 a=2,b=5,c=26。
将 c c c转化为 b b b进制数,就是 101 101 101。
那么对应 F F F的系数就是: F = 1 x 2 + 0 x + 1 = x 2 + 1 F=1x^2+0x+1=x^2+1 F=1x2+0x+1=x2+1
将 a a a带进去算出来是 5 5 5,发现满足 F ( a ) = b F(a)=b F(a)=b,于是这是一组可行的解。
T2
【题目描述】
设 f f f为斐波那契数列,其中 f ( 1 ) = f ( 2 ) = 1 f(1)=f(2)=1 f(1)=f(2)=1,现在给出 n , a , b , c , d n,a,b,c,d n,a,b,c,d,要你求 g c d ( a f n + b f n + 1 , c f n + d f n + 1 ) gcd(af_n+bf_{n+1},cf_n+df_{n+1}) gcd(afn+bfn+1,cfn+dfn+1)。
T T T组询问。
【样例输入】
3
1 2 3 5 5
10 5 3 4 2
8 10 6 4 3
【样例输出】
5
2
6
【数据规模】
1 ≤ T ≤ 1 0 5 1 \leq T \leq 10^5 1≤T≤105
1 ≤ n ≤ 1 0 18 1 \leq n \leq 10^{18} 1≤n≤1018
0 ≤ a , b , c , d ≤ 1000 0 \leq a,b,c,d \leq 1000 0≤a,b,c,d≤1000
a + b ≥ 1 , c + d ≥ 1 a+b \geq 1,c+d \geq 1 a+b≥1,c+d≥1
【题解】
考虑对 g c d ( a f n + b f n + 1 , c f n + d f n + 1 ) gcd(af_n+bf_{n+1},cf_n+df_{n+1}) gcd(afn+bfn+1,cfn+dfn+1)进行化简。
设 c ≥ a c \geq a c≥a。
那么上面的式子就变成 gcd ( ( c \gcd((c gcd((c m o d mod mod a ) f n + ( d − b ⌊ a c ⌋ ) f n + 1 , a f n + b f n + 1 ) a)f_n+(d-b\lfloor \frac a c \rfloor)f_{n+1},af_n+bf_{n+1}) a)fn+(d−b⌊ca⌋)fn+1,afn+bfn+1),经过 l o g 2 ( c ) log_2(c) log2(c)次转化后,得到形如 gcd ( a f n + b f n + 1 , c f n + 1 ) \gcd(af_n+bf_{n+1},cf_{n+1}) gcd(afn+bfn+1,cfn+1)的柿子。(注意这里的 a b c abc abc和上面的 a b c abc abc的意义是不一样的)
和 c f n + 1 cf_{n+1} cfn+1做 gcd \gcd gcd比较麻烦,分开来做,先和 f n + 1 f_n{+1} fn+1做。
因为
f
n
f_n
fn和
f
n
+
1
f_{n+1}
fn+1互质,那么有:
gcd
(
a
f
n
+
b
f
n
+
1
,
f
n
+
1
)
=
gcd
(
a
f
n
,
f
n
+
1
)
=
gcd
(
a
,
f
n
+
1
)
\gcd(af_n+bf_{n+1},f_{n+1})\\ =\gcd(af_n,f_{n+1})\\ =\gcd(a,f_{n+1})
gcd(afn+bfn+1,fn+1)=gcd(afn,fn+1)=gcd(a,fn+1)
发现
f
n
+
1
f_{n+1}
fn+1很大,这个
gcd
\gcd
gcd做不了,所以进一步转化:
=
gcd
(
f
n
+
1
m
o
d
a
,
a
)
=\gcd(f_{n+1}\mod a,a)
=gcd(fn+1moda,a)
那么 f n + 1 m o d a f_{n+1}\mod a fn+1moda是可以用矩阵快速幂搞出来的。设求出来的这个 gcd \gcd gcd为 g g g。接下来考虑 c c c。
gcd
(
a
f
n
+
b
f
n
+
1
,
c
f
n
+
1
)
=
g
×
gcd
(
a
f
n
+
b
f
n
+
1
g
,
c
f
n
+
1
g
)
=
g
×
gcd
(
a
f
n
+
b
f
n
+
1
g
,
c
)
=
gcd
(
a
f
n
+
b
f
n
+
1
,
c
g
)
\gcd(af_n+bf_{n+1},cf_{n+1})\\ =g \times \gcd\left(\frac{af_n+bf_{n+1}}{g},c\frac{f_{n+1}}{g}\right)\\ =g \times \gcd\left(\frac{af_n+bf_{n+1}}{g},c\right)\\ =\gcd(af_n+bf_{n+1},cg)
gcd(afn+bfn+1,cfn+1)=g×gcd(gafn+bfn+1,cgfn+1)=g×gcd(gafn+bfn+1,c)=gcd(afn+bfn+1,cg)
因为
a
f
n
+
b
f
n
+
1
af_n+bf_{n+1}
afn+bfn+1也很大没法做,于是跟上面一样,求出
(
a
f
n
+
b
f
n
+
1
)
m
o
d
(
c
g
)
(af_n+bf_{n+1})\mod(cg)
(afn+bfn+1)mod(cg),然后再做
gcd
\gcd
gcd即可,做完之后得到的就是答案。
T3
【题目大意】
有一张图,n个点m条边,小A和小B轮流染色,小A把点染成黑色,小B把点染成白色,小A先染。
每个点每条边各有一个权值 w i , c i w_i,c_i wi,ci。染完色后,黑色点的权值和加上两端都是黑色点的边的权值和就是小A的收获,小B的同理。
显然最后小A的收获会更大,现在两人都按最优策略染色,问最后小A的收获减小B的收获是多少。
【样例输入】
4 4
6
4
-1
-2
1 2 1
2 3 6
3 4 3
1 4 5
【样例输出】
3
【数据范围】
1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1≤n≤104
1 ≤ m ≤ 1 0 5 1 \leq m \leq 10^5 1≤m≤105
− 10000 ≤ w i , c i ≤ 10000 -10000 \leq w_i,c_i \leq 10000 −10000≤wi,ci≤10000
【题解】
同时考虑边和点很麻烦,于是考虑将边的贡献算到点里面去,这样就可以贪心了。
显然,黑点提供正的贡献,白点提供负的贡献。
考虑将一条边的贡献分两半分别给连接的两个点。
然后将所有点的贡献排序,奇数位的是正贡献,偶数位的为负贡献。
显然,如果一条边两边的点都是黑色,这条边的贡献就是正的了,如果都是白色,他就是负的贡献,如果一黑一白,那么我们加上了它的一半贡献,减去了它一半贡献,相当于这条边没有贡献,正是我们想要的。
今天的模拟赛真是太要命了。(还是不提了吧
下午讲了树状数组和ST表,很简单,没什么扩展。但是老师的讲树状数组时的引入很好,先以线段树为例子,用二分的方式分块,多个块套在一起,再说了分块算法,以 n \sqrt n n一块来分,而树状数组,就是以二进制为基础的分块。
希望明天的模拟赛。。希望明天我脑子好使一点。