这道题思想很简单就是贪心,不过其中遇到比较重要的地方是用到了map的排序(定义一个vector存放map,然后对vector排序),所以做个笔记好让自己回来复习。
#include<cstring>
#include<string>
#include<cstdio>
#include<map>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
string s;
map<char,int> m;
typedef pair<char,int> PAIR;///先定义一个pair
int ans,t;
struct compare{///结构体重写比较函数
bool operator()(const PAIR& lhs,const PAIR& rhs){
return lhs.second>rhs.second;
}
};
int main(){
s.resize(10000);
while(scanf("%s",&s[0])!=EOF){
m.clear();
ans=0;
t=26;
for(int i=0;i<s.length();i++){
if(s[i]>='a')
m[s[i]]++;
else if(s[i]>='A')
m[s[i]+32]++;
}
vector<PAIR> str(m.begin(),m.end());///vector的快速初始化方式,学习了
sort(str.begin(),str.end(),compare());
for(int i=0;i<str.size();i++){
ans=ans+str[i].second*t--;
}
printf("%d\n",ans);
str.clear();
s.clear();
s.resize(10000);
}
return 0;
}