约瑟夫问题[3]
测试数据来自 system/1702
作业已超过截止时间,您无法递交本题目。
时间限制:1秒 内存限制:256M
【题目描述】
\(M\) 个人围成一圈,任意指定一个人为其编号为 1,余下的人按顺时针依次编号为 2 到 \(M\) ,其中编号为 \(M\) 的左边是 \(1\),编号为 \(1\) 的右边是 \(M\);其他情况的 \(i(1 <i<M)\) ,其左边是 \(i+1\),右边是 \(i-1\)。
现在以编号为 \(S(0 < S ≤ M)\) 的人为起点,开始顺时针报数,报到 \(N\) 的人出列;然后以出列人的右边的人为起点,逆时针从 \(1\) 开始报数,报到 \(K\) 的人出列;接着再以出列的人左边的人为起点,顺时针从 \(1\) 开始报数,报到 \(N\) 的人出列……。就这样按顺时针和逆时针方向交替不断报数,直到全部人出列为止。请你输出出列人的编号序列。
【输入格式】
第一行包含四个整数 \(M,N,K\) 和 \(S(0 <S≤ M)\)。
【输出格式】
一行,包含 \(M\) 个数,表示出列人先后的编号序列,每两个数之间仅一个空格。
【输入输出样例】
Input
6 2 3 1
Output
2 5 1 3 6 4
【数据限制】
对于 \(100\%\) 的数据满足,\(0 < N,K,M ≤ 20000\)。
【来源】
Mr.he