hdu 5131 Song Jiang's rank list

http://acm.hdu.edu.cn/showproblem.php?pid=5131

题意:按照所杀的敌人排名,所杀敌人相等的时候字典序小的排名在上,然后M个询问。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <string>
 4 #include <map>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 int n,k,mm;
 9 char g[500][500];
10 int num[500];
11 struct node
12 {
13     char str[500];
14     int m;
15     bool operator <(const node a)const
16     {
17         return (m>a.m)||(m==a.m&&strcmp(str,a.str)<0);
18     }
19 }p[100000];
20 
21 bool cmp(node a,node b)
22 {
23     return (num[a.m]<num[b.m])||(num[a.m]==num[b.m]&&strcmp(a.str,b.str)<0);
24 }
25 
26 int main()
27 {
28      while(scanf("%d",&n)!=EOF)
29      {
30          if(n==0) break;
31           map<string,int>q;
32           for(int i=0; i<n; i++)
33           {
34               scanf("%s %d",g[i],&k);
35               strcpy(p[i].str,g[i]);
36               p[i].m=k;
37           }
38           sort(p,p+n);
39           for(int i=0; i<n; i++)
40           {
41               num[p[i].m]++;
42               q[p[i].str]=p[i].m;
43           }
44           for(int i=0; i<n; i++)
45           {
46               printf("%s %d\n",p[i].str,p[i].m);
47               q[p[i].str]=i;
48           }
49           scanf("%d",&mm);
50           for(int i=1; i<=mm; i++)
51           {
52               char s[1000];
53               scanf("%s",s);
54               int cnt=0;
55               int k=p[q[s]].m;
56               for(int j=q[s]; j>=0; j--)
57               {
58                   if(p[j].m==k)
59                   {
60                       cnt++;
61                   }
62                   else break;
63               }
64               if(cnt==1)
65               {
66                   printf("%d\n",q[s]+1);
67               }
68               else
69               {
70                   printf("%d %d\n",q[s]+1-cnt+1,cnt);
71               }
72           }
73      }
74      return 0;
75 }
View Code

 

posted @ 2015-01-16 10:13  null1019  阅读(146)  评论(0编辑  收藏  举报