C1048 - 领取助学金

题目描述

大学给每个学生发放助学金,每名学生都会被发放一张学生ID卡,其背面有一个磁条,记录着学生助学金的支取情况。卡的余额最初为0美元,每年的上限是40美元,并在学生生日最近的工作日支付给学生。因此,在工作日,总是会看到多达25名学生出现在附件的学生补助部门办公室领取他们的助学金。

助学金可以通过自动取款机ATM进行提取,这种自动取款机经过特殊的设计。结构上,它由内外两部分组成,内部为保险柜,其中存放着大量的1美元硬币,外部为存储箱,用于发放这些硬币。为了减少ATM被盗时的损失,只有当存储箱中的硬币被支取完毕后,保险箱才向其输出硬币

每天早上ATM开机时,存储箱变为空,保险箱向存储箱输出一枚硬币,当此枚硬币被取走后,输出两枚硬币,然后是三枚硬币,每次增加一枚硬币,直到达到预设的上限 - k枚硬币,之后输出到存储箱的硬币数量重置为一枚,然后是两枚,按此循环。

每名学生依次排队,插入他的ID卡在ATM上取款,ATM会把该学生已经支取的助学金的总额写到ID卡上,如果学生支取的总额尚未达到每年设定的40美元上限值,那么他拿回自己的卡片,并重新排队(到队尾重新排队),继续等待取款。如果存储箱中的现金加上学生已经支取的现金数量超过40美元,学生只能支取与40美元之间的差额,剩余在存储箱中的现金将留给下一位学生支取,取足40美金的学生会离开队伍,不再继续排队了。

每个学生在取足40美金后离开队伍

现在请你编写一个程序,输入学生的数量N和ATM单次输出金币数量上限k,请输出这些学生离开排队序列的先后顺序。

输入格式

1行,包含两个正整数N和k,分别代表学生的数量和ATM单次输出金币数量上限,用空格分开

输出格式

输出1行,代表完成取款后依次离开队伍的学生序号,学生的序号按最开始排队时的先后顺序确定,第一个学生的序号为1。

输出的每个序号按右对齐输出,输出宽度为3(域宽为3)

输入输出样例

输入样例 输出样例
5 3   1  3  5  2  4
6 5   3  4  2  1  5  6
12 3   3  6  9 12 11  2  8  5  1  4  7 10

注意输出结果是右对齐,输出宽度为3,以5 3的输出为例,输出的是:

空格空格1空格空格3空格空格5空格空格2空格空格4

如果输出的数字是2位数,比如输出的是12,则输出的格式为:空格12,正好保证输出的宽度为3

数据范围与提示

100%的数据:$1 \le N \le 25$,$1 \le k \le 40$

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:C1048.in,输出文件名为:C1048.out