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 }

 

posted @ 2016-07-25 16:54  一个_小菜鸟  阅读(404)  评论(0编辑  收藏  举报