首页 > 代码库 > 【HDOJ】5131 Song Jiang's rank list

【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 20512 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     else32         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_JUDGE44         freopen("data.in", "r", stdin);45     #endif46     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             else80                 cout <<nd.mmax<< <<nd.mmin<<endl;81         }82         id = 0;83     }84     85     return 0;86 }

 

【HDOJ】5131 Song Jiang's rank list