无聊的英语阅读题:
大意:
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; }