首页 > 代码库 > HDU 5131 Song Jiang's rank list (结构体+MAP,2014广州现场赛)
HDU 5131 Song Jiang's rank list (结构体+MAP,2014广州现场赛)
题目链接:HDU 5131 Song Jiang‘s rank list
题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排。M个询问,询问名字输出对应的主排名和次排名。(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个数加1,(也就是杀敌数相等,但是字典序比他小的人数加1)。
AC代码:
#include <stdio.h> #include <string> #include <map> #include <string.h> #include <algorithm> using namespace std; struct node { char name[100]; int num; }; struct node p[310]; map<string,int> rak1; map<string,int> rak2; bool cmp(node a,node b) { if(a.num!=b.num) return a.num>b.num; return strcmp(a.name,b.name)<0; } int main() { int n,m,i,j; while(scanf("%d",&n)!=EOF,n) { rak1.clear(); rak2.clear(); for(i=0;i<n;i++) scanf("%s %d",p[i].name,&p[i].num); sort(p,p+n,cmp); int temp=p[0].num,cont=1,rr=0; rak1[p[0].name]=cont; for(i=0;i<n;i++) printf("%s %d\n",p[i].name,p[i].num); for(i=0;i<n;i++) { cont=0; for(j=0;j<i;j++) { if(p[i].num<p[j].num) cont++; } rak1[p[i].name]=cont+1; } for(i=0;i<n;i++) { cont=0; for(j=0;j<i;j++) { if(p[i].num==p[j].num) cont++; } rak2[p[i].name]=cont+1; } scanf("%d",&m); while(m--) { char quy[100]; scanf("%s",quy); if(rak2[quy]==1) printf("%d\n",rak1[quy]); else printf("%d %d\n",rak1[quy],rak2[quy]); } } return 0; }
HDU 5131 Song Jiang's rank list (结构体+MAP,2014广州现场赛)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。