PAT (Advanced Level) Practice
注意:
- 计算结果中,系数为0的就不要输出了。
方法1:
#include<bits/stdc++.h>
using namespace std;
const int maxn=15;
struct Node{
int exp;
float idx;
Node(int e,float i):exp(e),idx(i){
}
bool operator<(const Node & e)const{
return exp>e.exp;
}
};
vector<Node>a;
vector<Node>b;
vector<Node>ans;
int main(){
int k1,k2;
scanf("%d",&k1);
int e;
float idx;
for(int i=0;i<k1;++i){
scanf("%d %f",&e,&idx);
a.push_back(Node(e,idx));
}
sort(a.begin(),a.end());
scanf("%d",&k2);
for(int i=0;i<k2;++i){
scanf("%d %f",&e,&idx);
b.push_back(Node(e,idx));
}
sort(b.begin(),b.end());
int i=0,j=0;
while (i<a.size() && j<b.size()){
if(a[i].exp==b[j].exp){
if(a[i].idx+b[j].idx!=0) ans.push_back(Node(a[i].exp,a[i].idx+b[j].idx));
i++,j++;
}else if(a[i].exp>b[j].exp){
ans.push_back(Node(a[i].exp,a[i].idx));
i++;
}else{
ans.push_back(Node(b[j].exp,b[j].idx));
j++;
}
}
while(i<a.size()){
ans.push_back(a[i++]);
}
while(j<b.size()){
ans.push_back(b[j++]);
}
printf("%d",ans.size());
for(int i=0;i<ans.size();++i){
printf(" %d %.1f",ans[i].exp,ans[i].idx);
}
printf("\n");
return 0;
}
方法2:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
double a[maxn];
int main(){
int k;
int e;
double idx;
scanf("%d",&k);
while(k--){
scanf("%d %lf",&e,&idx);
a[e]+=idx;
}
scanf("%d",&k);
while(k--){
scanf("%d %lf",&e,&idx);
a[e]+=idx;
}
int ans=0;
for(int i=1000;i>=0;--i){
if(a[i]!=0) ++ans;
}
printf("%d",ans);
for(int i=1000;i>=0;--i){
if(a[i]!=0) printf(" %d %.1f",i,a[i]);
}
printf("\n");
return 0;
}