题目描述
知识点
模拟题
我的实现
码前思考
就是模拟题了
代码实现
//使用后结构体来办事
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 2e3+10;
struct node{
int exp;
double coef;
node(){}
node(int e,double c):exp(e),coef(c){}
};
vector<node> first;
double res[maxn];
int main(){
//freopen("input.txt","r",stdin);
fill(res,res+maxn,0.0);
int k;
int exp;
double coef;
//第一次输入
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d %lf",&exp,&coef);
first.push_back(node(exp,coef));
}
//第二次输入
scanf("%d",&k);
for(int i=0;i<k;i++){
scanf("%d %lf",&exp,&coef);
for(int j=0;j<first.size();j++){
res[exp+first[j].exp] += coef*first[j].coef;
}
}
int cnt = 0;
for(int i=0;i<maxn;i++){
if(res[i]!=0.0){
cnt++;
}
}
printf("%d",cnt);
for(int i=maxn-1;i>=0;i--){
if(res[i]!=0.0){
printf(" %d %.1f",i,res[i]);
}
}
return 0;
}
码后反思
- 需要注意的是,两个指数相加之后可能会大于
1000
,所以数组的范围应该是大于2000
的,我第一次提交的时候最后两个测试用例出现了段错误,就是因为这个原因。