PAT 1002. A+B for Polynomials (25) 简单模拟
1002. A+B for Polynomials (25)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
This time, you are supposed to find A+B where A and B are two polynomials.
Input
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.
Output
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.
Sample Input2 1 2.4 0 3.2 2 2 1.5 1 0.5Sample Output
3 2 1.5 1 2.9 0 3.2
思路:
简单题目。注意格式。如果某一项系数为0,不输出。最后一种情况,没有存在项,输出"0\n"
源代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 int main() { 6 int na,nb; 7 scanf("%d",&na); 8 int flag[1001]={0}; 9 double res[1001]={0}; 10 int index;double data; 11 for(int i=0;i<na;++i) { 12 scanf("%d %lf",&index,&data); 13 flag[index]=1; 14 res[index]+=data; 15 } 16 scanf("%d",&nb); 17 for(int i=0;i<nb;++i) { 18 scanf("%d %lf",&index,&data); 19 flag[index]=1; 20 res[index]+=data; 21 } 22 int cnt=0; 23 for(int i=0;i<=1000;++i) { 24 if(flag[i]&&fabs(res[i])>1e-6) 25 cnt++; 26 } 27 if(cnt==0) { 28 printf("0"); 29 } else { 30 printf("%d ",cnt); 31 } 32 for(int i=1000;i>=0;--i) { 33 if(flag[i]&&fabs(res[i])>1e-6) { 34 printf("%d %.1lf",i,res[i]); 35 cnt--; 36 if(cnt==0) { 37 break; 38 } else { 39 printf(" "); 40 } 41 } 42 } 43 printf("\n"); 44 return 0; 45 }