传送门
http://codeforces.com/contest/1316/problem/C
题意
给定两个数组和一个素数p,表示两个多项式a[0]+a[1]x+…a[n-1]xn-1次方,b[0]+b[1]x…b[n-1]xn-1次方。两个多项式的乘积会得到一个多项式f(c )=c[0]+c[1]x…c[n-1]xn-1次方。求c[i]不能被p整除,打印i即可。如果有多个则打印任何一个。
思路
不需要求出f( c),题目让我们求任意一个不满足的被p的,则遍历一遍a,在遍历一编b,从这两个数组中找到第一个不被p,这样a[i]*b[j]肯定是最优解。但我们会想到a[i]*b[j]不是c[t]的常数项。但其多项式的哪一项是肯定构不成被p整除的系数。这样想,如果想构成c[t]的常数项则需从前面的被p的项乘以后面的某一项加上去还是不被p的。
代码
#include<cstdio>
using namespace std;
const int MAXN=1e6+5;
int a[MAXN],b[MAXN];
int main()
{
int n,m,p;
scanf("%d%d%d",&n,&m,&p);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<m;i++) scanf("%d",&b[i]);
int i=0,j=0;
while(a[i]%p==0) i++;
while(b[j]%p==0) j++;
printf("%d",i+j);
return 0;
}
昨天打比赛看了一下题没思路就没写,今早看大佬的代码才恍然大悟。