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\n",k);
71         for(int i=0; i<k; i++)
72             printf("%s %d %d\n", a[i].nam, a[i].lik, a[i].tim);
73     }
74     return 0;
75 }

AC代码

NBUT 1118 Marisa's Affair (排序统计,水)

时间: 2024-08-28 12:33:46

NBUT 1118 Marisa's Affair (排序统计,水)的相关文章

NBUT 1114 Alice&#39;s Puppets(排序统计,水)

题意:给一棵人名树,按层输出,同层则按名字的字典序输出. 思路:首先对每个人名做索引,确定其在哪一层,按层装进一个set,再按层输出就自动排好序了. 1 #include <bits/stdc++.h> 2 using namespace std; 3 vector< set<string> > ord; //每层一个set,自动按照字典序排好了 4 map<string,int> mapp; //作哈希用 5 6 int main() 7 { 8 //fr

NBUT 1122 Shameimaru&#39;s Candid Camera(水)

题意:给n*m个格子,初始时每个格子中有个数值为0,部分格子中含有炸弹,每个炸弹爆炸可以将周围的8个非炸弹格子中的数值加1,求全部炸弹炸完后那些非0且非炸弹格子中的数是多少. 思路:另开一个矩阵,每炸弹一炸就9个格子全加1,全炸完后再输出时判断是否为0,若是则输出'-',否则,若是炸弹格子则输出'*',若是数字就输出该数字. 1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[550][550];//统计数值 4 int n, m

NBUT 1115 Cirno&#39;s Trick (超水)

题意:给出多个double数,去掉其最小的和最大的,再对余下的求均值. 思路:再输入时将最大和最小去掉,顺便统计非最值的和,输出时除一下个数即可. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 //freopen("input.txt", "r", stdin); 7 int n; 8 while(~scanf("%d",&n))

nyist oj 540 奇怪的排序(水题)

奇怪的排序 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情.惟独对自然数的理解与人类不一样,它是从右往左读数.比如,它看到123时,会理解成321.让它比较23与15哪一个大,它说15大.原因是它的大脑会以为是32与51在进行比较.再比如让它比较29与30,它说29大. 给定Bill两个自然数A和B,让它将 [A,B] 区间中的所有数按从小到大排序出来.你会认为它如何排序? 输入 第一

linux 下简单常用文件查看/处理/排序/统计等命令

cat命令:即查看文件命令 选项:-n:显示行号 -E: 显示每行结束符$ 2.more命令: 分屏显示文件命令 space:空格键向后翻一屏 b:向前翻一屏 Enter:回车键向下显示一行 3.less命令:分屏显示文件命令,使用方法如同man命令 space:向后翻一屏 b: 向前翻一屏 Enter:回车键向后显示一行 k: 向前显示一行 4.head命令:查看头几行 -n:显示头几行,默认显示头10行 例:      head -n 10 /etc/passwd 也可以写成 head -1

日志查找排序统计

背景:查找10万个请求中,异常返回的请求get 1是否与省份有关?集中在部分省份还是所有省份? 命令:head -n 100000 test.log|grep  "get 1" |awk '{print $8}'|cut -d = -f 3|sort|uniq -c|sort -r 1.head -n 100000 test.log:显示test.log中开头的10万行 延伸阅读转载:https://www.cnblogs.com/zdz8207/p/linux-log-tail-ca

codevs 1487 大批整数排序(水题日常)

时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.) 输入描述 Input Description 第一行表示将下排序

hdu 1106 排序(水题)

题目描述: 输入一行数字,如果我们把这行数字中的'5'都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0).你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出. 输入: 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000.输入数据保证:分割得到的非负整数不会大于100000000:输入数据不可能全由'5'组成. 例如:005123

nyoj 114某种排序(水 大数+优化大数)

某种序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 A2, 计算A99 输入 输入包含多行数据 每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000) 数据以EOF结束 输出 对于输入的每一行输出A99的值 样例输入 1 1 1 样例输出 69087442470169316923566147 来源 水