这道题我一开始的思路就是混乱的,居然写出了三层嵌套循环...不过幸好后来看了柳神的思路分析,才发现之前做过类似解法的题目,但这个思路还是没有在脑子里形成一个套路,因此借助这道题来总结一下:
涉及到同项或同类型累加或各种计算问题时,建立数组并进行同项操作是一个非常简单的方法。
除此之外还有很多小问题,比如第一次提交时居然没看清题目要求输出多项式非零项数导致结果错误等,也是平时做题时需要注意的问题。
#include <iostream>
#include<vector>
using namespace std;
int main() {
int k,n,a = 0;
int c[1001] = {0};
float num;
scanf("%d", &k);
for(int i = 0; i < k; i++){
scanf("%d%f", &k, &num);
c[k] += num;
}
for(int i = 0; i < n; i++){
scanf("%d%f", &n, &num);
c[n] += num;
}
for(int i = 0; i < 1001; i ++){
if(c[a] != 0) a++;
}
for(int i = 1000; i >= 0; i--){
if(c[i] != 0.0)
printf(" %d %.1f", i, c[i]);
}
return 0;
}
同类型的题目还有b1032 挖掘机技术哪家强:
#include <iostream>
using namespace std;
int main() {
int n,id, score, maxid = 1;
cin >> n;
int school[100001] = {0};
for(int i = 0; i < n; i++){
cin >> id >> score;
school[id] += score;
}
int max = school[1];
for(int i = 2; i <= n; i++){
if(max < school[i]){
maxid = i;
max = school[i];
}
}
cout << maxid << " "<< max;
return 0;
}