Codeforces CodeCraft-20 (Div. 2) C. Primitive Primes

链接:http://codeforces.com/contest/1316/problem/C
题意:
给出两个方程:
f ( x ) = a 0 + a 1 x + a 2 x 2 + . . . + a n − 1 x n − 1 g ( x ) = b 0 + b 1 x + b 2 x 2 + . . . + b m − 1 x m − 1 f(x) = a_0+a_1x+a_2x^2+...+a_{n-1}x^{n-1} \\ g(x) = b_0+b_1x+b_2x^2+...+b_{m-1}x^{m-1} f(x)=a0+a1x+a2x2+...+an1xn1g(x)=b0+b1x+b2x2+...+bm1xm1

g c d ( a 0 , a 1 , … , a n − 1 ) = g c d ( b 0 , b 1 , … , b m − 1 ) = 1 gcd(a_0, a_1, \dots, a_{n-1}) = gcd(b_0, b_1, \dots, b_{m-1}) = 1 gcd(a0,a1,,an1)=gcd(b0,b1,,bm1)=1

h ( x ) = f ( x ) ∗ g ( x ) h(x) = f(x)*g(x) h(x)=f(x)g(x)
输出 h ( x ) h(x) h(x) 中系数不可被k整除的一项,任意一项即可。
例如: k = 2 k = 2 k=2
f ( x ) = 2 x 2 + x + 1 g ( x ) = 2 x 2 + x + 1 h ( x ) = 2 x 3 + 5 x 2 + 3 x + 2 f(x) = 2x ^{2} + x + 1\\g(x) = 2x^2 + x + 1\\h(x) = 2x^3 + 5x^2 + 3x + 2 f(x)=2x2+x+1g(x)=2x2+x+1h(x)=2x3+5x2+3x+2
h ( x ) h(x) h(x)的第一项和第二项的系数5,3都不可被 k k k 整除,故输出 1 2皆可

思路:
一开始直接上了一个FFT的模板,很不出意料的WA了。然后开始优化,改错 结束了也并没有写出来。
后来接触了一种解法,找到 f , g f,g f,g的系数中 不可被 k k k 整除的最后一项假设为 a , b a,b ab,然后答案就是 a + b a+b a+b
后来我稍稍的证明了一下:
f , g f,g fg 中,第 a , b a,b ab项的系数是 c a , c b c_a,c_b ca,cb
因为 c a , c b c_a,c_b cacb 是不被 k k k 整除的,所以 c a ∗ c b c_a*c_b cacb肯定不会被 k k k 整除
同时如果 a , b a,b a,b 是系数不可被 k k k 整除的最后一项,那么 a , b a,b a,b后面要么没有项数,要么该项的系数是可以被 k k k 整除的。*******************************(结论1)

在计算 h h h,合并同阶时,跟第 a , b a,b a,b项的乘积同阶 p , q p,q p,q的乘积只用两种情况,

  1. p < a   a n d   q > b p<a \ and \ q>b p<a and q>b
  2. p > a   a n d   q < b p>a \ and \ q<b p>a and q<b

因为 (结论1) 可以知道 p , q p,q p,q乘积的系数肯定能够被 k k k 整除,再加上 a , b a,b a,b项的系数乘积那么,所得的最后乘积肯定是不会被 k k k 整除的。

#include<bitset>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
int n,m,k,t,ans1,ans2;
int main(){
    scanf("%d %d %d",&n,&m,&k);
    for(int i = 0; i < n;++i){
        scanf("%d",&t);
        if(t%k) ans1 = i;
    }
    for(int i = 0; i < m;++i){
        scanf("%d",&t);
        if(t%k) ans2 = i;
    }
    printf("%d",ans1+ans2);
    return 0;
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值