zoukankan      html  css  js  c++  java
  • NBUT 1118 Marisa's Affair (排序统计,水)

    题意:

      每行给出一个人名和一个int值,人名可重复出现。要求对同一个人名统计int值,最大的先输出,若相同,则按照人名出现次数,若再相同,则按照人名字典序。

    思路:

      输入完全部进行排序,写个比较函数传进去sort即可。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 struct node
     5 {
     6     char nam[22];
     7     int lik;
     8     int tim;
     9 }a[5500];
    10 
    11 map<string, int> mapp2;//名字映射为int比较好处理
    12 
    13 int cmp(node ll,node rr)
    14 {
    15     if(ll.lik<rr.lik)
    16         return 0;
    17     else if(ll.lik>rr.lik)
    18         return 1;
    19 
    20     if(ll.tim<rr.tim)
    21         return 0;
    22     else if(ll.tim>rr.tim)
    23         return 1;
    24 
    25 
    26     if(strcmp(ll.nam, rr.nam)>0)
    27         return 0;
    28     else    return 1;
    29 }
    30 
    31 int main()
    32 {
    33     //freopen("input.txt", "r", stdin);
    34 
    35     //按照可能性排序,再按照时间排序,再按字典序排序。
    36 
    37     int n, like;
    38     char s[22];
    39     string temp;
    40     map<string,int>::iterator it;
    41 
    42     while(cin>>n)
    43     {
    44         memset(a,0,sizeof(a));
    45         mapp2.clear();
    46 
    47         int k=0;
    48         for(int i=0; i<n; i++)
    49         {
    50             scanf("%s%d",s,&like);
    51             temp=s;
    52             it=mapp2.find(temp);
    53 
    54             if(it==mapp2.end())      //新来的
    55             {
    56                 mapp2[temp]=k;
    57 
    58                 a[k].lik=like;
    59                 a[k].tim=1;
    60                 strcpy(a[k].nam, s);
    61                 k++;
    62             }
    63             else
    64             {
    65                 a[it->second].lik+=like;
    66                 a[it->second].tim++;
    67             }
    68         }
    69         sort(a,a+k,cmp);
    70         printf("%d
    ",k);
    71         for(int i=0; i<k; i++)
    72             printf("%s %d %d
    ", a[i].nam, a[i].lik, a[i].tim);
    73     }
    74     return 0;
    75 }
    AC代码
  • 相关阅读:
    安装yum源和gcc编译器遇到的问题
    (转)Linux下C++开发初探
    (转)求模和求余
    scanf———while(scanf ("%lu",&num) = =1)什么意思
    【Eclipse】 Alt+/ 代码提示问题解决方案
    【正则表达式】常用正则表达式
    【JAVA】Quartz中时间表达式的设置
    【Oracle】如何导库
    【JAVA】JMX简单使用方法
    【JAVA】Math.Round()函数常见问题“四舍5入”
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4538772.html
Copyright © 2011-2022 走看看