题目:按照所杀的敌人排名,所杀敌人相等的时候字典序小的排名在上,然后M个询问。
sort 可以对结构体排序,数组字符串比较s1<s2,strcmp(s1,s2)=-1,string类字符串大小比较可以直接比。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef struct { char name[50]; int k; }Pe; int num[205]; Pe a[205]; int cmp(Pe x,Pe y) { if(x.k!=y.k) return x.k>y.k;//按k的降序排列 else return strcmp(x.name,y.name)<0;//按字典序从小到大排列 } int main() { int n; while(scanf("%d",&n),n) { for(int i=0;i<n;i++) { scanf("%s",a[i].name); scanf("%d",&a[i].k); } sort(a,a+n,cmp); for(int i=0;i<n;i++) printf("%s %d ",a[i].name,a[i].k); int t; scanf("%d",&t); int g=0; while(g<n) { num[g]=1; int c=2; while(a[g].k==a[g+1].k&&g+1<n) { num[g+1]=c; c++; g++; } g++; } for(int i=0;i<t;i++) { char s[50]; scanf("%s",s); for(int i=0;i<n;i++) { if(!(strcmp(s,a[i].name))) { if(num[i]==1) printf("%d ",i+1); else printf("%d %d ",i-num[i]+2,num[i]); } } } } return 0; }