#include #include 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 约瑟夫问题 // 已修改为实验版本