混进杭二训练——Day4

废话

今天模拟赛被吊打,我果然是个蒟蒻。

都是数论题,真是拿命。。

正题

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 1T5

1 ≤ x , y , z ≤ 1 0 8 1 \leq x,y,z \leq 10^8 1x,y,z108

【题解】

特判 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 1T105

1 ≤ n ≤ 1 0 18 1 \leq n \leq 10^{18} 1n1018

0 ≤ a , b , c , d ≤ 1000 0 \leq a,b,c,d \leq 1000 0a,b,c,d1000

a + b ≥ 1 , c + d ≥ 1 a+b \geq 1,c+d \geq 1 a+b1,c+d1

【题解】

考虑对 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 ca

那么上面的式子就变成 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+(dbca)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 1n104

1 ≤ m ≤ 1 0 5 1 \leq m \leq 10^5 1m105

− 10000 ≤ w i , c i ≤ 10000 -10000 \leq w_i,c_i \leq 10000 10000wi,ci10000

【题解】

同时考虑边和点很麻烦,于是考虑将边的贡献算到点里面去,这样就可以贪心了。

显然,黑点提供正的贡献,白点提供负的贡献。

考虑将一条边的贡献分两半分别给连接的两个点。

然后将所有点的贡献排序,奇数位的是正贡献,偶数位的为负贡献。

显然,如果一条边两边的点都是黑色,这条边的贡献就是正的了,如果都是白色,他就是负的贡献,如果一黑一白,那么我们加上了它的一半贡献,减去了它一半贡献,相当于这条边没有贡献,正是我们想要的。


今天的模拟赛真是太要命了。(还是不提了吧

下午讲了树状数组ST表,很简单,没什么扩展。但是老师的讲树状数组时的引入很好,先以线段树为例子,用二分的方式分块,多个块套在一起,再说了分块算法,以 n \sqrt n n 一块来分,而树状数组,就是以二进制为基础的分块。

希望明天的模拟赛。。希望明天我脑子好使一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值