注释部分的代码可以通过所有测试点。。。没有想明白为什么自己写的代码第一个测试点一直过不了。。。
#include <iostream> #include <vector> using namespace std; int main(void){ int k1,k2; //double a1[22],a2[22]; vector<double> num; vector<double> a1; cin>>k1; for(int j=0;j<k1*2;j++){ double tmp; cin>>tmp; a1.push_back(tmp); } cin>>k2; for(int j=0;j<k2*2;j++){ double tmp; cin>>tmp; a1.push_back(tmp); } int max=0; for(int j=0;j<a1.size();j+=2){ if(a1[j]>max){ max=a1[j]; } } double ans[max+1]; int flag=0,cnt=0; for(int j=0;j<=max;j++){ flag=0; for(int k=0;k<a1.size();k+=2){ if(a1[k]==j && a1[k+1]!=0.0){ ans[j]+=a1[k+1]; flag=1; } } if(flag==0 || ans[j]==0.0){ ans[j]=-1; }else{ cnt++; } } cout<<cnt; for(int k=max;k>=0;k--){ if(ans[k]>=0){ cout<<" "; int b=(int)ans[k]; if(b==ans[k]) cout<<k<<" "<<b<<".0"; else cout<<k<<" "<<ans[k]; } } return 0; } /* #include<iostream> using namespace std; double res[1000]; int ans[1000]; int main(){ int K,exp; double coe; int a=2; while(a--){ cin>>K; while(K--){ cin>>exp>>coe; res[exp]+=coe; } } K=0; for(int i=1000;i>=0;--i) if(res[i]!=0) ans[K++]=i; cout<<K; for(int i=0;i<K;++i) printf(" %d %.1f",ans[i],res[ans[i]]); cout<<endl; return 0; } */
原文:http://www.cnblogs.com/mqacm/p/4367575.html