#include <bits/stdc++.h>
using namespace std;
using ll=long long;

struct stu
{
    string word;//单词
    int num;//出现次数
};

bool com(stu a,stu b)
{
    if(a.num!=b.num) return a.num>b.num;//频次从高到低
    return a.word<b.word;//字典序升序
}

int main() {
    map<string,int> m;//哈希表<单词,出现次数>
    string s;
    while(cin >> s)//输入每个单词
    {
        m[s]++;//单词出现次数增加
    }
    vector<stu> lie;//初始化‘期望搜索单词’数组
    for(auto it:m)//遍历哈希表
    {
        if(it.second>=3)
        {
            lie.push_back({it.first,it.second});//满足条件的放入数组
        }
    }
    sort(lie.begin(),lie.end(),com);//条件排序
    for(auto i:lie)//遍历数组
    {
        cout << i.word << '\n';
    }
}
// 64 位输出请用 printf("%lld")

思路:

1,将所有单词插入哈希表中

2,把哈希表中满足条件的单词及频率放入结构体数组中

3,将数组条件排序后输出