题目名称 142. [USACO Jan08] iCow播放器
输入输出 icow.in/out
难度等级
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 GravatarBYVoid 于2008-10-04加入
开放分组 全部用户
提交状态
分类标签
USACO 基本 模拟
分享题解
通过:321, 提交:945, 通过率:33.97%
GravatarTA 100 0.000 s 0.00 MiB Pascal
GravatarTA 100 0.000 s 0.00 MiB Pascal
GravatarTA 100 0.000 s 0.00 MiB Pascal
Gravatar毕之 100 0.000 s 0.00 MiB Pascal
Gravatar毕之 100 0.000 s 0.00 MiB Pascal
Gravatar5007 100 0.000 s 0.00 MiB Pascal
GravatarHyoi_0Koto 100 0.000 s 0.00 MiB C++
Gravatarleon 100 0.000 s 0.00 MiB C++
Gravatar牛先生 100 0.000 s 0.00 MiB C++
Gravatar35435444 100 0.000 s 0.00 MiB C++
本题关联比赛
20170919普及组
关于 iCow播放器 的近10条评论(全部评论)
平民代码↓↓↓
Gravatarqyd
2022-10-02 10:04 16楼
王老师真帅
Gravatarzhenxian
2018-11-16 15:11 15楼
Pascal好快
Gravatar落痕
2018-08-05 10:35 14楼
做个这题真的是把能踩的坑都踩了一遍,第一次权值没置成0,第二次分余数的时候忘了跳过自己。。。。
写个这么个水题用了半个小时。。可以回炉了。。
顺便粘一下代码
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
freopen("icow.in","r",stdin);
freopen("icow.out","w",stdout);
int n,m,q[1005],max=0,qwq,yu,zheng,k,aa[1005],nn=0;
cin>>n>>m;
k=n-1;
for(int i=1;i<=n;i++)
cin>>q[i];
for(int i=1;i<=m;i++)
{for(int i=1;i<=n;i++)
{if(q[i]>max)
{qwq=i;
max=q[i];}}
max=0;
nn++;
aa[nn]=qwq;
yu=q[qwq]%k;
zheng=q[qwq]/k;
q[qwq]=0;
for(int i=1;i<=n;i++)
{if(i!=qwq)
q[i]+=zheng;}
for(int i=1;i<=yu;i++)
{if(i!=qwq)
q[i]++;
else
yu++;
}
/*for(int i=1;i<=n;i++)
{cout<<q[i]<<' ';
if(i%n==0)cout<<endl;}*/}
for(int i=1;i<=m;i++)
cout<<aa[i];
return 0;
}
GravatarShallowDream雨梨
2018-03-04 19:53 13楼
好多的细节问题。。。果然我太ruoji了T_T
Gravatarliuyu
2017-09-19 16:31 12楼
写一次这题少活好几年0.0。
那个啥,分配余数“applepen”的时候,如果上一次输出的那首歌在[1,applepen]中间,则分配到[1,applepen+1]。就酱。
看楼上好多人这么错然后就那么W着……我以为我这辈子都调不对了orzzzzzzzzz
GravatarMealy
2016-10-19 10:45 11楼
回复 @奶猹 :
哪里是行数和输出??
Gravatar翟佳麒
2015-08-16 12:32 10楼
和LSS一样啊。。
@@ -314 +313,0 @@
-700
@@ -315,0 +315 @@
+700
@@ -340 +339,0 @@
-632
@@ -341,0 +341 @@
+632
@@ -366 +365,0 @@
-881
@@ -367,0 +367 @@
+881
@@ -821 +820,0 @@
-601
@@ -822,0 +822 @@
+601
@@ -831 +830,0 @@
-666
@@ -832,0 +832 @@
+666
@@ -865 +864,0 @@
-676
@@ -866,0 +866 @@
+676
@@ -894 +893,0 @@
-415
@@ -895,0 +895 @@
+415
@@ -904 +903,0 @@
-920
@@ -905,0 +905 @@
+920
Gravatar翟佳麒
2015-08-16 12:31 9楼
回复 @奶猹 :
逗死我了。。。。
Gravatarstone
2015-08-13 20:26 8楼
回复 @hzoi_Inkheart :
你没发现你和答案的输出行数不一样么。。
Gravatar奶猹
2014-10-17 08:10 7楼

142. [USACO Jan08] iCow播放器

☆   输入文件:icow.in   输出文件:icow.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】

被无止境的农活压榨得筋疲力尽后,Farmer John打算用他在MP3播放器市场 新买的iCow来听些音乐,放松一下。FJ的iCow里存了N(1 <= N <= 1,000)首曲子,按1..N依次编号。至于曲子播放的顺序,则是按一个Farmer John自己设计的算法来决定:

  • 第i首曲子有一个初始权值Ri(1 <= Ri <= 10,000)。
  • 当一首曲子播放完毕,接下来播放的将是所有曲子中权值最大的那首(如果有两首或多首曲子的权值相同,那么这些曲子中编号最小的那首会被选中)。
  • 一首曲子在播放结束后,它的权值会被平均地分给其他N-1首曲子,它本身的权值清零。
  • 如果一首曲子的权值无法被平均分配(也就是说,无法被N-1整除),那么被N-1除的余数部分将会以1为单位,顺次分配给排名靠前的曲子(也就是说,顺序为曲目1、曲目2...依次下去。当然,刚播放过的那首曲子需要被跳过),直到多出的部分被分配完。

在选定的下一首曲子播放完毕后,这个算法再次被执行,调整曲子的权值,并选出再接下来播放的曲目。

请你计算一下,按FJ的算法,最先播放的T(1 <= T <= 1000)首曲子分别是哪些。

【输入格式】

  • 第1行: 2个用空格隔开的整数:N 和 T
  • 第2..N+1行: 第i+1行为1个整数:Ri

【输入样例】

3 4
10
8
11

【输入说明】

iCow里存了3首曲子,初始权值依次为10,8,11。你的任务是指出它播放的前4首曲子依次是哪些。

【输出格式】

  • 第1..T行: 第i行为1个整数,表示iCow播放的第i首曲子

【输出样例】

3
1
2
3 

【输出说明】

每一首曲子播放前,三首曲子的权值分别为:

R1   R2   R3
10    8   11  -> 播放 #3  11/2 = 5, 权值余量 = 1
16   13    0  -> 播放 #1  16/2 = 8
 0   21    8  -> 播放 #2  21/2 = 10, 权值余量 = 1
11    0   18  -> 播放 #3  ...