3 条题解

  • 1
    @ 2024-3-2 11:55:59

    懒得解释,送给看得懂得有缘人

    from collections import Counter
    from typing import List, Tuple
    
    # dt: DefaultDict[str, int] = defaultdict(int)
    # l: List[str] = input().split()
    
    # for i in l: dt[i] -= 1
    
    # newdt: List[Tuple[str, int]] = sorted(dt.items(), key=lambda item: (-item[1], item[0]))
    
    c = Counter(input().split()).most_common()
    newdt: List[Tuple[str, int]] = sorted(c, key=lambda item: (-item[1], item[0]))
    
    t, n = 0, 0
    for (i, j) in newdt:
        if n < 5 or t == j:
            t = j
            n += 1
            print(f"{i} {j}")
        else: break
    
    • @ 2024-3-2 12:03:00

      还是解释一下吧:(打脸)

      1. defaultdict(int)创建的字典可以看做所有键都在创建之前就有默认值0,所以第一个for循环可以直接自减1以计数
      2. 题目要求数字逆序排序,同时相同次数的单词正序排序,所以我采用负数计数以简单的逆转排序结果。
      3. 或者使用Counter可以更方便快捷地统计出现次数。
      4. itemgetter(1, 0)相当于分别取出dt.items()中每个元素的第1第0个元素分别排序。
      5. 同时,sorted()函数的返回值为列表
    • @ 2024-3-2 12:05:32

      输出也可以采用这种形式,因为sorted()返回的是列表

      t = 0
      for i in range(len(newdt)):
          if i < 5 or t == dt[i][1]:
              t = dt[i][1]
              print(f"{dt[i][0]} {-dt[i][1]}")
          else: break
      
  • 1
    @ 2023-2-21 10:59:22

    s=input().split() dic={} #存储每个单词的出现次数 for word in s: #统计每个单词的出现次数 if word in dic: dic[word]+=1 else: dic[word]=1 info=[] for i in dic.items(): info.append([i[0],i[1]]) #将字典元素转换成列表 n=len(info) #print(info) #按要求统计出现频率最高的前5个单词 for i in range(n-1): for j in range(n-1,i,-1): if info[j][1]>info[j-1][1] or info[j][1]==info[j-1][1] and info[j][0]<info[j-1][0]: info[j],info[j-1]=info[j-1],info[j] for i in range(n): if i>=5 and info[i][1]!=info[i-1][1]: break print(info[i][0],info[i][1])

    • 0
      @ 2023-4-14 18:54:27

      朴素哈希,看不懂建议进厂(doge)。话说这道题的代码量为什么比我某道紫题还多啊喂!

      #include <bits/stdc++.h>
      using namespace std;
      #define int long long
      
      unordered_map<string,int> s;
      
      string words[100000];
      
      bool cmp(string l,string r){
          if(s[l]==s[r])return l<r;;
          return s[l]>s[r];
      }
      signed main()
      {
          string n,m;
          int t=1,k;
          while(cin>>n){
              if(!s[n])words[t++]=n;
              s[n]++;
          }
          sort(words+1,words+t,cmp);
          for(int i=1;i<=5;i++){
              k=s[words[i]];
              cout<<words[i]<<" "<<s[words[i]]<<endl;
          }
          for(int i=6;i<t;i++){
              if(s[words[i]]!=k)break;
              cout<<words[i]<<" "<<s[words[i]]<<endl;
          }
          return 0;//为,美,0
      }
      
      • 1

      信息

      ID
      807
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      593
      已通过
      155
      上传者