题意:
每行给出一个人名和一个int值,人名可重复出现。要求对同一个人名统计int值,最大的先输出,若相同,则按照人名出现次数,若再相同,则按照人名字典序。
思路:
输入完全部进行排序,写个比较函数传进去sort即可。
1 #include2 using namespace std; 3 4 struct node 5 { 6 char nam[22]; 7 int lik; 8 int tim; 9 }a[5500];10 11 map mapp2;//名字映射为int比较好处理12 13 int cmp(node ll,node rr)14 {15 if(ll.lik rr.lik)18 return 1;19 20 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 ::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 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