无聊的英语阅读题:
大意:
1.每首歌均有其对应权值:Ri
2.当前要播放的歌必须是当前所有歌曲中权值最大的一首(若最高值出现多个,则取编号最小的)
3.当一首歌播放完毕时,该歌的权值平均分给其他(N-1)首歌,当前歌曲权值变为0
4.若3中当前歌曲的权值不能整除(N-1),则先把能整除的部分按3的要求分配,余数部分从编号1
/*
* POJ_3665.cpp
*
* Created on: 2013年11月26日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1005;
struct cow {
int val;
int id;
} c[maxn];
int main() {
int n, t;
while (scanf("%d%d", &n, &t) != EOF) {
int i;
for (i = 1; i <= n; ++i) {
scanf("%d", &c[i].val);
c[i].id = i;
}
while (t--) {
int maxm = -10;
int index = 0;
for (i = 1; i <= n; ++i) {//寻找分数最高的...
if (c[i].val > maxm) {
maxm = c[i].val;
index = c[i].id;
}
}
cout << index << endl;
int num = c[index].val;
int k = num / (n - 1);
int r = num % (n - 1);
c[index].val = 0;
/**
* 以下实现将他的分数分给别人..
*
*/
for (i = 1; i <= n; ++i) {//处理整除的部分
if (i != index) {
c[i].val += k;
}
}
for (i = 1; i <= r; ++i) {//处理不整除的部分
if (i == index) {
r++;
} else {
c[i].val += 1;
}
}
}
}
return 0;
}