名字的漂亮度_牛客题霸_牛客网 (nowcoder.com)
蓝桥杯之后马上期末考试 平常不听课 期末各种找资源背题库 25号之后才恢复正常刷题 。
同时因为很多因素,省赛的ACM队伍要退掉了。五味杂陈。
说正事:
题目很简单,出现最多的单词 *的权重越大
任务分成三块
统计
排序
加权
统计
统计采用桶排做的,在统计的时候没有做大小写处理,这个任务留到了排序里面去做 。
排序
使用堆去做 (这里感觉可以优化)理论上堆排序和sort不差多少 ,直接用堆应该要慢一点,不懂STL但是这里肯定会有内存的多次申请和释放,开一个数组(多次使用)sort肯定会快一点
加权
int quan=26
while(堆.size()){
按堆顶*quan
quan–;
堆.pop()
}
源码
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<cstring>
using namespace std;
string a;
const int maxn=130;
priority_queue< int,vector<int>,less<int> > q;
int t[maxn]{0};
int main(){
int T;cin>>T;
while(T--){
memset(t,0,sizeof(t));
cin>>a;
for(int i=0;i<a.size();i++){
t[a[i]]++;
}
for(int i=0;i<27;i++){
q.push({t['a'+i]+t['A'+i]});
}
int quan=26;
int ans=0;
while(q.size()){
ans+=quan*q.top();
quan--;
q.pop();
}
cout<<ans<<endl;
}
}