您的位置:首页 > 其它

1056. Mice and Rice (25)解题报告

2016-10-30 11:11 330 查看
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;

struct player {
int index, w, rank;
};

bool comp1(player p1, player p2);
bool comp2(player p1, player p3);
int main(void) {
int np, ng, i, j;
player *arr;
scanf("%d %d", &np, &ng);
arr = new player[np];
for (i = 0; i < np; i++) {
arr[i].index = i;
scanf("%d", &arr[i].w);
}
vector<int> p, winner;
for (i = 0; i < np; i++) {
scanf("%d", &j);
p.push_back(j);
}
int rank = 1, max, index;
while (p.size() != 1) {
for (i = 0; i < p.size(); i++) {
arr[p[i]].rank = rank;
}
for (i = 0; i < p.size(); i += ng) {
max = -1;
for (j = i; j < i + ng && j < p.size(); j++) {
if (arr[p[j]].w > max) {
max = arr[p[j]].w;
index = p[j];
}
}
winner.push_back(index);
}
rank++;
p = winner;
winner.clear();
}
arr[p[0]].rank = rank;
rank++;
int cnt = 1, newrank = 0;
sort(arr, arr + np, comp1);
for (i = 0; i < np; i++) {
if (rank != arr[i].rank) {
rank = arr[i].rank;
newrank += cnt;
arr[i].rank = newrank;
cnt = 1;
}
else {
arr[i].rank = newrank;
cnt++;
}
}
sort(arr, arr + np, comp2);
printf("%d", arr[0].rank);
for (i = 1; i < np; i++) {
printf(" %d", arr[i].rank);
}
putchar('\n');
return 0;
}

bool comp2(player p1, player p2) {
return p1.index < p2.index;
}

bool comp1(player p1, player p2) {
return p1.rank > p2.rank;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: