9.7 腾讯笔试
作者:互联网
t3
题目大意:给n个字符串,然后统计出,出现次数前k多和前k少的(出现次数不能为0)的字符串
输入:
第一行n和k
下面n行,每行一个字符串
解题思路:用map存一下字符串出现次数,然后都拿到结构体里面,然后结构体排序,注意当次数一样的时候,要按字典序排序
具体看代码
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
const int N = 3e5 + 10;
string s[N];
map<string , int>ans;
struct degfe
{
int cnt;
string s;
bool operator < (const degfe & a) const
{
if(cnt==a.cnt)
return s<a.s;
return cnt < a.cnt;
}
} e1[N];
bool cans(degfe a , degfe b)
{
if(a.cnt==b.cnt)
return a.s<b.s;
return a.cnt > b.cnt;
}
signed main()
{
int n , k;
cin >> n >> k;
for(int i=1; i<=n; i++)
{
string str;
cin >> str;
ans[str] ++ ;
}
int cnt = 0;
for(auto i : ans)
e1[++ cnt] = degfe {i.se , i.fi};
sort(e1 + 1 , e1 + 1 + cnt , cans);
for(int i=1; i<=k; i++)
{
cout << e1[i].s << " " << e1[i].cnt << endl;
}
sort(e1 + 1 , e1 + 1 + cnt);
for(int i=1; i<=k; i++)
{
cout << e1[i].s << " " << e1[i].cnt << endl;
}
return 0;
}
标签:cnt,const,int,笔试,degfe,腾讯,9.7,e1,define 来源: https://www.cnblogs.com/QingyuYYYYY/p/13626229.html