- 题目描述:
-
输入两个多项式,计算它们的和。
每个多项式有若干对整数表示,每组整数中,第一个整数表示系数(非0),第二个整数表示该项的次数。
如由3 3 5 -2 1 4 0表示3x^5 - 2 * x + 4其中第一个3表示该多项式由三个整数对表示。
- 输入:
-
输入为两行,分别表示两个多项式。表示每项的整数对按照次数大小降序给出。(次数绝对值小于1000,系数绝对值小于10000)
- 输出:
-
按照降次顺序输出表示和多项式的整数对(系数为0的整数对不用输出,整数对由空格分隔,最后一个整数对后不添加空格)
- 样例输入:
-
3 3 5 -2 1 4 0 4 2 3 -1 2 1 1 3 0
- 样例输出:
-
3 5 2 3 -1 2 -1 1 7 0
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #include <cmath> 6 #include <algorithm> 7 8 #define MAX 2009 9 10 int xi[MAX]; 11 12 int main(int argc, char const *argv[]) 13 { 14 int n; 15 //freopen("input.txt","r",stdin); 16 while(scanf("%d",&n) != EOF) { 17 memset(xi,0,sizeof(xi)); 18 for(int i = 0; i < n; i++) { 19 int xiTemp; 20 int ciTemp; 21 scanf("%d %d",&xiTemp,&ciTemp); 22 if(ciTemp < 0) { 23 ciTemp = ciTemp + 2001; 24 } 25 xi[ciTemp] = xiTemp; 26 } 27 scanf("%d",&n); 28 for(int i = 0; i < n; i++) { 29 int xiTemp; 30 int ciTemp; 31 scanf("%d %d",&xiTemp,&ciTemp); 32 if(ciTemp < 0) { 33 ciTemp = ciTemp + 2001; 34 } 35 xi[ciTemp] = xi[ciTemp] + xiTemp; 36 } 37 bool isOne = true; 38 39 40 for(int i = 1000; i >= 0; i--) { 41 if(xi[i] != 0) { 42 if(isOne) { 43 printf("%d %d",xi[i],i); 44 isOne = false; 45 } 46 else { 47 printf(" %d %d",xi[i],i); 48 } 49 50 } 51 } 52 53 for(int i = MAX-1; i >= 1001; i--) { 54 if(xi[i] != 0) { 55 if(isOne) { 56 printf("%d %d",xi[i],i-2001); 57 isOne = false; 58 } 59 else { 60 printf(" %d %d",xi[i],i-2001); 61 } 62 63 } 64 } 65 66 printf(" "); 67 } 68 69 return 0; 70 }
主要注意是绝对值小于1000