题意:给每个编号的歌曲赋权值,每次歌曲播放完之后权值平均分配到其余的N-1首歌曲上,余数不为零的从第一首开始依次赋权值1,直到余数为零。
分析:模拟赋值的过程
收获:一开始以为每次赋值完之后要排序,但是发现余数不为零时的赋值时从样例给出的顺序开始赋值的,所以不改变顺序,直接遍历找最大值更方便。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
using namespace std;
int r[1222];
int main ()
{
memset(r,0,sizeof(r));
int n,t;
cin >> n >> t;
for(int i=0;i<n;i++)
{
cin >> r[i];
}
while(t--)
{
int maxn=-1,kase=0;
for(int i=0;i<n;i++)
{
if(maxn<r[i])
{
maxn=r[i];
kase=i;
}
}
cout << kase+1<< endl;
int k1 = maxn/(n-1);
int k2 = maxn%(n-1);
for (int i=0;i<n;i++)
{
if(i!=kase)
{
r[i]+=k1;
if(k2)
{
r[i]++;
k2--;
}
}
}
r[kase]=0;
}
return 0;
}