50 lines
971 B
C
50 lines
971 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
int rs[105]; // 每个人的状态
|
|
int n; // 人数
|
|
|
|
int xcz; // 剩余人数
|
|
int m[105], m0; // 间隔
|
|
|
|
int zj(int a) {
|
|
// 寻找下一个活着的人
|
|
a++;
|
|
if (a > n)
|
|
a -= n;
|
|
while (rs[a] == 0 && xcz > 0) {
|
|
a++;
|
|
if (a > n)
|
|
a -= n;
|
|
}
|
|
return a;
|
|
}
|
|
|
|
int main() {
|
|
freopen("data.in", "r", stdin);
|
|
scanf("%d%d", &n, &m0);
|
|
for (int i = 1; i <= n; i++)
|
|
scanf("%d", &m[i]);
|
|
xcz = n;
|
|
for (int i = 1; i <= n; i++)
|
|
// 把每个人设置为活着
|
|
rs[i] = 1;
|
|
while (m0 > n) {
|
|
m0 -= n;
|
|
}
|
|
for (int i = m0; xcz > 0;) {
|
|
if (rs[i] == 1) {
|
|
rs[i] = 0;
|
|
xcz--;
|
|
printf("%d ", i);
|
|
}
|
|
int ls = m[i];
|
|
// printf("ls=%d\n", ls);
|
|
while (ls--)
|
|
i = zj(i);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// 尚未修改到课程版本
|
|
// Ref: P1996 约瑟夫问题
|