【HDOJ】5131 Song Jiang's rank list
STL的使用。
1 /* 5131 */ 2 #include <iostream> 3 #include <map> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cstring> 7 #include <string> 8 #include <algorithm> 9 using namespace std; 10 11 #define MAXN 205 12 13 typedef struct { 14 string s; 15 int i, n; 16 } hero_t; 17 18 typedef struct node_t { 19 int mmin, mmax; 20 node_t() {} 21 node_t(int a, int b) { 22 mmin = a; mmax = b; 23 } 24 } node_t; 25 26 hero_t heros[MAXN]; 27 28 bool comp(hero_t a, hero_t b) { 29 if (a.n == b.n) 30 return a.s < b.s; 31 else 32 return a.n > b.n; 33 } 34 35 int main() { 36 int n, m; 37 int i, j, k, id = 0; 38 string s; 39 node_t nd; 40 41 ios::sync_with_stdio(false); 42 43 #ifndef ONLINE_JUDGE 44 freopen("data.in", "r", stdin); 45 #endif 46 47 while (cin>>n && n) { 48 for (i=0; i<n; ++i) { 49 heros[i].i = i; 50 cin >>heros[i].s>>heros[i].n; 51 } 52 53 sort(heros, heros+n, comp); 54 for (i=0; i<n; ++i) 55 cout <<heros[i].s<<' '<<heros[i].n<<endl; 56 57 map<string, node_t> tb; 58 i = 0; 59 while (i < n) { 60 j = 1; 61 while ((i+j)<n && heros[i+j].n == heros[i].n) 62 ++j; 63 if (j > 1) { 64 for (k=0; k<j; ++k) { 65 tb[heros[i+k].s] = node_t(k+1, i+1); 66 } 67 i += j; 68 } else { 69 tb[heros[i].s] = node_t(1, i+1); 70 ++i; 71 } 72 } 73 cin >>m; 74 while (m--) { 75 cin >>s; 76 nd = tb[s]; 77 if (nd.mmin == 1) 78 cout <<nd.mmax<<endl; 79 else 80 cout <<nd.mmax<<' '<<nd.mmin<<endl; 81 } 82 id = 0; 83 } 84 85 return 0; 86 }