题意:
一个人生前学会了n个技能,每个技能还有技能等级a,死了并重生之后,技能等级会掉到a*k。如果a*k小于100的话,那么这个技能将会丢失。重生之后可以再学m个技能,如果这个技能前世学过的话就继承等级(注意是等级不小于100才可以继承),如果没有学过那么等级为0,按照字典序输出一个人重生之后身上所拥有的技能。
思路:
强烈推荐使用map容器,map的key是默认字典序排列的,连输出排序都省了,用技能名字当key,技能等级当value。还有就是a*k的精度会丢失,所以最好再加个比0.01还小的数。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#define ee 1e-6
using namespace std;
int main(){
map<string,int>ma;
double n,m,k,exp;
char name[38];
cin>>n>>m>>k;
// cout<<"nmk="<<n<<" "<<m<<" "<<k<<endl;
for(int i=0;i<n;i++){
scanf("%s %lf ",name,&exp);
int temp=exp*k+ee;
if(temp>=100)
ma[name]=temp;
}
for(int i=0;i<m;i++){
scanf("%s",name);
if(ma[name]==0) ma[name]=0;
}
cout<<ma.size()<<endl;
map<string,int>::iterator it;
it = ma.begin();
while(it != ma.end())
{
cout<<it->first<<" "<<it->second<<endl;
it ++;
}
return 0;
}