http://acm.hdu.edu.cn/showproblem.php?pid=5131
现场赛第一个题,水题。题意:给水浒英雄排序,按照杀人数大到小,相同按照名字字典序小到大。输出。然后对每个查询的名字,计数有多少人杀人数大于他,输出个数加1,计数有多少人杀人数相同,但名字小,如果没有不输出,否则输出个数加1。
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespace std; 5 struct G{ 6 string name; 7 int kill; 8 friend bool operator <(const G a,const G b){ 9 return a.kill>b.kill||(a.kill==b.kill&&a.name<b.name); 10 } 11 }g[512]; 12 string str; 13 int main(){ 14 int n,m,id; 15 while(~scanf("%d",&n),n){ 16 for(int i=0;i<n;i++){ 17 cin>>g[i].name>>g[i].kill; 18 } 19 sort(g,g+n); 20 for(int i=0;i<n;i++){ 21 cout<<g[i].name<<" "<<g[i].kill<<endl; 22 } 23 scanf("%d",&m); 24 while(m--){ 25 cin>>str; 26 for(int i=0;i<n;i++){ 27 if(str==g[i].name){ 28 id=i; 29 break; 30 } 31 } 32 int ansa=1,ansb=1; 33 for(int i=0;i<id;i++){ 34 if(g[i].kill>g[id].kill){ 35 ansa++; 36 } 37 else{ 38 ansb++; 39 } 40 } 41 printf("%d",ansa); 42 if(ansb>1){ 43 printf(" %d",ansb); 44 } 45 puts(""); 46 } 47 } 48 return 0; 49 }