测试点 0一直没通过调试后发现 测试点 0 有负数,
在对数据处理的时候,没有考虑负数加正数和正好为0的情况!!!
这次用vector代替set发现去重和去零没有find函数需要遍历,但是排序方便了很多
#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 5000;
double p[N];
vector<int> p_n;
bool cmp(int a,int b){//从大到小
return a>b;
}
int main(){
// freopen("data.txt","r",stdin);
fill(p,p+N,0);
int n,m;
double a;
map<int ,double> pa;
scanf("%d" ,&m);
for(int i = 0;i<m;i++){
scanf("%d %lf",&n,&a);
if(a!=0) pa.insert(make_pair(n,a));
}
scanf("%d" ,&m);
for(int i = 0;i<m;i++){
scanf("%d %lf",&n,&a);
for(map<int,double>::iterator it = pa.begin();it!=pa.end();it++){
int tempn = it->first+n;
double tempa = it->second*a;
if(p[tempn]==0&&tempa!=0){
p_n.push_back(tempn);
}
p[tempn] += tempa;
if(p[tempn]==0){
for(int j = 0;j<p_n.size();j++){
if(p_n[j]==tempn){
p_n.erase(p_n.begin()+j);
}
}
}
}
}
if(p_n.size()==0) printf("0");
else{
sort(p_n.begin(),p_n.end(),cmp);
printf("%d",p_n.size());
for(int i = 0;i<p_n.size();i++){
printf(" %d %.1f",p_n[i],p[p_n[i]]);
}
}
return 0;
}