思维多项式系数CodeCraft-20 (Div. 2) C. Primitive Primes
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维多项式系数CodeCraft-20 (Div. 2) C. Primitive Primes相关的知识,希望对你有一定的参考价值。
- 博客主页: https://blog.csdn.net/qq_50285142
- 欢迎点赞👍收藏✨关注❤留言 📝 如有错误,敬请指正
- 🎈虽然生活很难,但我们也要一直走下去🎈
思路:
考虑 x i + j x^{i+j} xi+j的系数 c i + j c_{i+j} ci+j
c i + j = ( a 0 ∗ b i + j + a 1 ∗ b i + j − 1 + . . . ) + a i ∗ b j + ( a i + 1 ∗ b j − 1 + a i + 2 ∗ b j − 2 + . . . ) c_{i+j} = (a_0 * b_{i + j} + a_1 * b_{i + j - 1} + ...) + a_i * b_j + (a_{i + 1} * b_{j - 1} + a_{i + 2} * b_{j - 2} +...) ci+j=(a0∗bi+j+a1∗bi+j−1+...)+ai∗bj+(ai+1∗bj−1+ai+2∗bj−2+...)
我们找 f ( x ) f(x) f(x)系数中第一个%p
不等于0
的系数位置i
, g ( x ) g(x) g(x)系数中第一个%p
不等于0
的系数位置j
,那么 a i % p ≠ 0 , b i % p ≠ 0 , 得 a i ∗ b i % p ≠ 0 a_i \\%p ≠0,b_i \\% p≠0,得a_i*b_i \\%p≠0 ai%p=0,bi%p=0,得ai∗bi%p=0
( a 0 ∗ b i + j + a 1 ∗ b i + j − 1 + . . . ) (a_0 * b_{i + j} + a_1 * b_{i + j - 1} + ...) (a0∗bi+j+a1∗bi+j−1+...)中的a
系数都是p
的倍数
( a i + 1 ∗ b j − 1 + a i + 2 ∗ b j − 2 + . . . ) (a_{i + 1} * b_{j - 1} + a_{i + 2} * b_{j - 2} +...) (ai+1∗bj−1+ai+2∗bj−2+...)中的b
系数都是p
的倍数
但是 a i ∗ b j a_i*b_j ai∗bj不是p
的倍数,所以 x i + j x^{i+j} xi+j的系数不是p
的系数
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
const int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
const int inf = 0x3f3f3f3f;
const ll linf = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-6;
const int mod = 1e9+7;
const int N = 1e5+5,M = 2e5+5;
ll n,m,k,p;
void solve()
{
cin>>n>>m>>p;
bool is = true;
int res1,res2;
for(int i=0;i<n;i++)
{
int x;cin>>x;
if(is and x%p)
{
is = false;
res1 = i;
}
}
is = true;
for(int i=0;i<m;i++)
{
int x;cin>>x;
if(is and x%p)
{
is = false;
res2 = i;
}
}
cout<<res1+res2<<"\\n";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int _;
// cin>>_;
_ = 1;
while(_--)
{
solve();
}
return 0;
}
往期优质文章推荐
以上是关于思维多项式系数CodeCraft-20 (Div. 2) C. Primitive Primes的主要内容,如果未能解决你的问题,请参考以下文章