Description
Input
Output
Sample Input
Sample Output
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAX = 300; struct edge{ char s[60]; int num; int id; int id1; }a[MAX]; bool cmp1(edge i, edge j){ return i.num > j.num; } int main() { int n; while(~scanf("%d",&n)&&n){ memset(a,0,sizeof(a)); getchar(); for(int i = 1; i <= n; i++){ scanf("%s%d",a[i].s,&a[i].num); a[i].id = 1; } sort(a+1,a+n+1,cmp1); for(int i = 1; i < n;i++){ for(int j = i + 1; j <= n;j++){ int temp = strcmp(a[i].s,a[j].s); if(a[i].num == a[j].num){ if(temp > 0){ a[i].id++; char s2[MAX]; strcpy(s2,a[i].s); strcpy(a[i].s,a[j].s); strcpy(a[j].s,s2); } } } } for(int i = 1; i <= n ;i++) printf("%s %d\n",a[i].s,a[i].num); for(int i = 1; i <= n ;i++) a[i].id = 1; for(int i = 1; i < n ;i++){ for(int j = i + 1;j <= n;j++){ if(a[i].num == a[j].num){ if(strcmp(a[i].s,a[j].s)< 0) a[j].id ++; else a[i].id++; } } } for(int i = 1; i <= n ;i++) a[i].id1 = i; int m; scanf("%d",&m); getchar(); char s1[MAX]; for(int i = 1; i <= m;i++){ scanf("%s",s1); for(int j = 1; j <= n ;j++){ if(strcmp(a[j].s,s1) == 0){ if(a[j].id == 1) printf("%d\n",a[j].id1); else { printf("%d %d\n",a[j].id1-a[j].id+1,a[j].id); break; } } } } } return 0; }
原文:http://www.cnblogs.com/zero-begin/p/4372416.html