3 条题解

  • 3
    @ 2024-2-10 18:42:12

    好像不用写的像@那样复杂吧,只需要定义一个mapmap用来统计名字个数,在用一个结构体来定义一个setset,用小于运算符的重载来对setset排序,最后输出setset中的所有元素即可

    #include <bits/stdc++.h>
    using namespace std;
    struct T
    {
        string x;
        int y;
    };
    bool operator <(T a, T b)
    {
        if (a.y == b.y)
            return a.x > b.x;
        return a.y > b.y;
    }
    map<string, int> mp;
    set<T> t;
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        int n;
        string s;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> s;
            mp[s]++;
        }
        for (auto b : mp)
            t.insert({b.first, b.second});
        for (auto b : t)
            cout << b.x << " " << b.y << endl;
        return 0;
    }
    
    • 0
      @ 2022-4-19 22:49:15

      严禁抄题解,发现后取消成绩

      • 0
        @ 2021-12-28 14:43:32
        
        首先用一个map容器,以名字为key,个数为value
        
        存进去。这时候会自动排序,但是是按照key排序的
        
        我们这道题想要首先按value排序,value相等
        
        按照key排序。
        
        想直接用sort排序是做不到的,sort只支持数组、vetctor等的排序,
        
        所以我们可以先把map装进pair里,
        
        然后再放入vector,自定义sort实现排序
        
        代码:
        #include<bits/stdc++.h>
        using namespace std;
        map<string,int> m;
        int n;
        string x; 
        vector<pair<string,int> > vec;
        map<string,int>::iterator iter;
        vector<pair<string,int> >::iterator curr;
        bool cmp(pair<string,int> a,pair<string,int> b)
        {
        	if(a.second==b.second) return a.first>b.first;
        	return a.second>b.second;
        }
        int main()
        {
            ios::sync_with_stdio(false);
            cin.tie(0);	
        	cin>>n;
        	for(int i=1;i<=n;i++)
        	{
        		cin>>x;
        		m[x]++;
        	}
        	for(iter=m.begin();iter!=m.end();++iter)
        	{
        		vec.push_back(pair<string,int>(iter->first,iter->second));
        	}
        	sort(vec.begin(),vec.end(),cmp);
        	for(curr=vec.begin();curr!=vec.end();++curr)
        	{
        		cout<<curr->first<<" "<<curr->second<<endl;
        	}
        	return 0;
        }
        • 1

        信息

        ID
        496
        时间
        1000ms
        内存
        128MiB
        难度
        1
        标签
        递交数
        46
        已通过
        38
        上传者