CodeForces - 105A

81 阅读1分钟

题意:

一个人生前学会了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;
}


\