1002. A+B for Polynomials (25)
输入:两个多项式,第1个多项式在第1行,第2个在第2行,格式形如
多项式项数 指数N1 系数an1 指数N2 系数an2 ... (K取值范围[1,10],指数Ni取值范围[0, 1000],题目保证指数的输入是递减的,即N(i-1)<N(i))
输出:两个多项式的和,格式和输入时候一样。
# define _CRT_SECURE_NO_WARNINGS # include <iostream> # include <string> # include <sstream> # include <vector> # include <algorithm> # include <functional> # include <iomanip> # include <ctime> # include <map> # include <math.h> # include <string.h> using namespace std; bool com1(int a, int b) { return a >= b; } int main(void) { int K1, K2; int numOfX; double num; int i = 0; int cnt; //出现过的指数个数 int aCnt; //实际输出个数 double numX[1001]; //指数范围[0,1000],所以用该数组记录 int headX[20]; //记录出现过的指数 memset(numX, 0, 1001*sizeof(double)); cin >> K1; for (i = 0; i < K1; i++) { cin >> numOfX >> num; headX[i] = numOfX; numX[numOfX] += num; } cnt = i; aCnt = i; cin >> K2; for (i = 0; i < K2; i++) { cin >> numOfX >> num; if (numX[numOfX] == 0) //若该数为0,说明该指数没有出现过 { headX[cnt++] = numOfX; aCnt++; } numX[numOfX] += num; //计算过后,若该数为0,则该指数不会被输出 if (numX[numOfX] == 0) aCnt--; } sort(headX, headX+cnt, com1); //对出现过的指数排列 // qSort(headX, 0, cnt - 1, com1); /* //原本认为当两式子抵消之后,输出会是 if (aCnt == 0) //这个样子的,但实际上,只需要输出aCnt就可以了。 cout << "0 0 0.0" << endl; //这样输出最后1个测试点不能通过。 else */ { cout << aCnt; for (i = 0; i < cnt; i++) { if (numX[headX[i]] != 0) printf(" %d %.1lf", headX[i], numX[headX[i]]); } cout << endl; } return 0; }
时间: 2024-10-11 00:05:35