7-20 奥运排行榜
每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同。比如中国金牌总数列第一的时候,中国媒体就公布“金牌榜”;而美国的奖牌总数第一,于是美国媒体就公布“奖牌榜”。如果人口少的国家公布一个“国民人均奖牌榜”,说不定非洲的国家会成为榜魁…… 现在就请你写一个程序,对每个前来咨询的国家按照对其最有利的方式计算它的排名。
#include #include #include #include using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 300;struct Data { int id, a, b; double c, d;}data[maxn];bool cmp1(const Data &d1, const Data &d2) { if (d1.a != d2.a) return d1.a > d2.a; return d1.id < d2.id;}bool cmp2(const Data &d1, const Data &d2) { if (d1.b != d2.b) return d1.b > d2.b; return d1.id < d2.id;}bool cmp3(const Data &d1, const Data &d2) { if (d1.c != d2.c) return d1.c > d2.c; return d1.id < d2.id;}bool cmp4(const Data &d1, const Data &d2) { if (d1.d != d2.d) return d1.d > d2.d; return d1.id < d2.id;}int n, m, ans[maxn][10];void solve1(int index) { int cnt = 1; ans[data[0].id][index] = cnt; for (int i = 1; i < n; i++) { ++cnt; if (data[i].a == data[i-1].a) ans[data[i].id][index] = ans[data[i - 1].id][index]; else ans[data[i].id][index] = cnt; }}void solve2(int index) { int cnt = 1; ans[data[0].id][index] = cnt; for (int i = 1; i < n; i++) { ++cnt; if (data[i].b == data[i-1].b) ans[data[i].id][index] = ans[data[i - 1].id][index]; else ans[data[i].id][index] = cnt; }}void solve3(int index) { int cnt = 1; ans[data[0].id][index] = cnt; for (int i = 1; i < n; i++) { ++cnt; if (data[i].c == data[i-1].c) ans[data[i].id][index] = ans[data[i - 1].id][index]; else ans[data[i].id][index] = cnt; }}void solve4(int index) { int cnt = 1; ans[data[0].id][index] = cnt; for (int i = 1; i < n; i++) { ++cnt; if (data[i].d == data[i-1].d) ans[data[i].id][index] = ans[data[i - 1].id][index]; else ans[data[i].id][index] = cnt; }}int main() { scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { int x, y, z; scanf("%d %d %d", &x, &y, &z); data[i].id = i; data[i].a = x, data[i].b = y, data[i].c = 1.0*x/(1.0*z), data[i].d = 1.0*y/(1.0*z); } sort(data, data + n, cmp1); solve1(1); sort(data, data + n, cmp2); solve2(2); sort(data, data + n, cmp3); solve3(3); sort(data, data + n, cmp4); solve4(4); for (int kase = 0; kase < m; kase++) { int x; scanf("%d", &x); int minv = INF, pos = -1; for (int i = 1; i <= 4; i++) { if (ans[x][i] < minv) { minv = ans[x][i]; pos = i; } } if (kase) printf(" "); printf("%d:%d", minv, pos); } printf("\n"); return 0;}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~