o.boj 1437 Mr.Fang的播放器

注:最近这一系列ACM的内容,都是2年多之前的代码,自己回顾一下。
 
 
 
Mr.Fang的播放器
 
Submit: 621    Accepted:175
Time Limit: 1000MS  Memory Limit: 65536K
Description
厌倦了无休止的北邮的工作后,房教决定着手MP3播放器市场推出他的新iCow。这是一款MP3播放器能储存N(1<=N<=1,000)首歌乱序,从1到N进行编号,这是由房教自己的算法所决定的:
 每一首歌曲i都有一个初始等级Ri(1<=Ri<=10,000)。
 下一首将要被播放的歌曲总是等级最高的那一首(如果出现等级相同的情况,选择标号较小的)。
 歌曲被播放之后,这首歌的等级将被设置成0,并且,他原来的等级值将被分配给所有其他的N-1首歌。
 如果等级值不能平均的分配(即,不能被N-1整除),假设分配完后还剩余k分,那么多出的等级值将被按照标号从小到大分配给其它的k首歌曲,每个一分,(即,第一首,第二首,等等)——刚播放过的歌曲除外,直到没有多出的分数剩余为止。
这个过程一直重复。
试决定iCow最先播出的T(1<=T<=1000)首歌。


Input
多组数据测试 每组数据第一行是两个整数N和T
后面N+1行,第i+1行包行一个整数Ri,表示标号为i的歌曲等级为Ri
输入的最后以两个0结束,这组数据不用处理


Output
每组数据输出T行,第i行输出一个整数,表示iCow播放第i首歌的编号。


Sample Input

3 4
10
8
11
0 0


Sample Output

3
1
2
3


Source

模拟题
 
#include <iostream>

using namespace std;


int main()
{
    int song[1001];
    int N, T;
    int a, b, c;
    
    cin >> N >> T;
    
    while (N || T)
    {
        for (int i = 1; i <= N; i++)
        {
            cin >> song[i];            
        }
        
        if (N == 1)        
            for (int j = 1; j <= T; j++)
                cout << N << endl;
            
        else{
        for (int j = 1; j <= T; j++)
        {
            int max = 1;
            for (int i = 2; i <= N; i++)
            {
                if (song[max] < song[i])
                    max = i;
            }
            
            cout << max << endl;    
           
            a = song[max] / (N - 1);
            b = song[max] % (N - 1);            
            
            for (int i = 1; i <= N; i++)
                song[i] += a;    
            song[max] = 0;
            
            c = 1;  
            if (b != 0)
            {
                while (b--)
                {
                    if (c == max)
                       c++;
                    song[c] += 1;
                    c++;
                 }
            }
        }
        }
        cin >> N >> T;
    }
     system("pause");
    return 0;
    
    
}


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值