poj 1060
http://poj.org/problem?id=1060
题意:多项式的运算的题目,不过这个运算有个特点,就是只要是同项的多项式,无论相加还是相减,都为0,给你三个多项式,分别为a,b,c。
要你求(a*b)%c。
思路:首先吧a*b算出来,然后,求某个项数乘以c会等于a*b的,然后把a*b的最大的幂降到c以下,求出来的就是答案。
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 5 #define me(x) memset(x,0,sizeof(x)) 6 7 int a[2009],b[2009],c[2009],d[2009]; 8 9 int main() 10 { 11 int n,ade,bde,cde,dde; 12 scanf("%d",&n); 13 while(n--) 14 { 15 me(a),me(b),me(c),me(d); 16 scanf("%d",&ade); 17 for(int j=--ade;j>=0;j--) //这里是为了把幂和其位置相等,便于乘法计算。 18 scanf("%d",&a[j]); 19 scanf("%d",&bde); 20 for(int j=--bde;j>=0;j--) 21 scanf("%d",&b[j]); 22 scanf("%d",&cde); 23 for(int j=--cde;j>=0;j--) 24 scanf("%d",&c[j]); 25 for(int i=ade;i>=0;i--) 26 for(int j=bde;j>=0;j--) 27 { 28 if(a[i]&&b[j]){ //多项式的乘法,这里还要用上那个他给定你的多项式运算的规则。 29 if(d[i+j]) d[i+j]=0; 30 else d[i+j]=1; 31 } 32 } 33 dde=ade+bde; //d是a*b的答案。dde也就是说这个答案的最高次幂是多少。 34 while(dde>=cde) //把d的最高次幂比c小。 35 { 36 int tmp; 37 for(int i=cde;i>=0;i--)
38 if(c[i]){ 39 if(d[dde+i-cde]) d[dde+i-cde]=0; 40 else d[dde+i-cde]=1; 41 } 42 for(int i=dde;i>=0;i--) //找d的最高次幂。 43 if(d[i]) { 44 dde=i; 45 break; 46 } 47 } 48 printf("%d",dde+1); 49 for(int i=dde;i>=0;i--) 50 printf(" %d",d[i]); 51 printf("\n"); 52 } 53 return 0; 54 }