poj 3665 icow

无聊的英语阅读题:
大意:
1.每首歌均有其对应权值:Ri
2.当前要播放的歌必须是当前所有歌曲中权值最大的一首(若最高值出现多个,则取编号最小的)
3.当一首歌播放完毕时,该歌的权值平均分给其他(N-1)首歌,当前歌曲权值变为0
4.若3中当前歌曲的权值不能整除(N-1),则先把能整除的部分按3的要求分配,余数部分从编号1
  开始每首歌曲得1分(不包括当前歌曲),直到全部分完为止。当前歌曲权值变为0。

我要抱怨一下了,本人是不是人品真有问题,昨天这题交了四次都WA,搞的我快疯了,今天又来写了一遍昨天的代码,令人称奇的事情发生了,居然1A了,我泪奔啊,。。。。。。。。。。。。

代码:

#include <iostream>
using namespace std;
struct node
{
    int v;
    int d;
}a[1005];

int main()
{
    int n,t;
    int i,r,max,num,k,id;
    while(cin>>n>>t)
    {
        for(i=1;i<=n;i++)
        {
            cin>>a[i].v;
            a[i].d=i;
        }
        while(t--)
        {
            max=0;
            for(i=1;i<=n;i++)
            if(a[i].v>max)
             {
                 max=a[i].v;
                 id=a[i].d;
             }
             cout<<id<<endl;
             num=a[id].v;
             k=num/(n-1);
             r=num%(n-1);
             a[id].v=0;
             for(i=1;i<=n;i++)
             {
                 if(i!=id)
                 a[i].v+=k;
             }
             for(i=1;i<=r;i++)
             {
                 if(i==id)
                 r++;
                 else
                 a[i].v+=1;
             }
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值