PAT-1002
题目描述:
解法一:
1 #include<bits/stdc++.h> 2 using namespace std; 3 float x[1010]; 4 int main() 5 { 6 int k1,k2,n1,n2,count=0; 7 float a1,a2; 8 memset(x,0,sizeof(x)); 9 cin>>k1; 10 for(int i=0;i<k1;i++) 11 { 12 cin>>n1>>a1; 13 x[n1]=a1; 14 } 15 cin>>k2; 16 for(int i=0;i<k2;i++) 17 { 18 cin>>n2>>a2; 19 x[n2]+=a2; 20 } 21 for(int i=0;i<1001;i++) 22 { 23 if(x[i]!=0) count++; 24 } 25 cout<<count; 26 for(int i=1000;i>=0;i--) 27 { 28 if(x[i]!=0) 29 { 30 printf(" %d %.1f",i,x[i]); 31 } 32 } 33 return 0; 34 }
解法二(用数据结构map优化,两个循环合并成一个):
1 #include<bits/stdc++.h> 2 #include<map> 3 using namespace std; 4 int main() 5 { 6 map< int,double,greater<double> > x; 7 for(int i=0;i<2;i++) 8 { 9 int k; 10 cin>>k; 11 for(int j=0;j<k;j++) 12 { 13 int n; 14 double a; 15 cin>>n>>a; 16 x[n]+=a; 17 if(x[n]==0)//删除防止相加得0的系数 18 { 19 x.erase(n); 20 } 21 } 22 } 23 cout<<x.size(); 24 map<int,double>::iterator ptr; 25 for(ptr=x.begin(); ptr!=x.end(); ptr++) 26 { 27 printf(" %d %.1f",ptr->first,ptr->second); 28 } 29 return 0; 30 }