pat-1141

#include<iostream>
#include<cctype>
#include<unordered_map>
#include<algorithm>
#include<vector>
using namespace std;
struct node{
	string s;
	int score;
	int num;
}; 
bool cmp(node&a,node&b){
	if(a.score!=b.score) return a.score>b.score;
	else if(a.num!=b.num) return a.num<b.num;
	else return a.s<b.s;
}
int main(){
	int n;
	cin>>n;
	string id,scool;
	unordered_map<string,int> sn;
	unordered_map<string,double> ss;
	double sc;
	for(int i=0;i<n;i++){
		cin>>id>>sc>>scool;
		for(int i=0;i<scool.size();i++){
			scool[i]=tolower(scool[i]);
		}
		sn[scool]++;
		if(id[0]=='B') sc=sc/1.5;
		else if(id[0]=='T') sc=sc*1.5;
		ss[scool]+=sc;
	}
	vector<node>ans;
	for(auto it=sn.begin();it!=sn.end();it++){
		ans.push_back({it->first,(int)ss[it->first],sn[it->first]});
    }
    sort(ans.begin(),ans.end(),cmp);
    int rank=0;int pre=-1;
    printf("%d\n",ans.size());
    for(int i=0;i<ans.size();i++){
    	if(ans[i].score==pre) printf("%d %s %d %d\n",rank,ans[i].s.c_str(),ans[i].score,ans[i].num);
    	
    	else if(ans[i].score!=pre){
    		rank=i+1;
    		printf("%d %s %d %d\n",rank,ans[i].s.c_str(),ans[i].score,ans[i].num);
		}
		pre=ans[i].score;
	}
	return 0;
} 

c++小问题   如果是两个string类型用cmp直接比较

in alphabetical order

他会直接按照首字母的字典序a b c d e.......比较   

总结

1.这种题大体的思路是多个性质,要分别建立键值对map最好直接用unordered_map,最后再集成到一个结构体中,编写好cmp函数再进行排序

2.注意找规律,找关系

3.注意cctype里面的一些大小写转换的函数的应用,小写用小写转小写也没有问题

英语

 

 

问题  总结题型的套路 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值