P8671 [蓝桥杯 2018 国 AC] 约瑟夫环 题解
设 $f_{n,k}$ 表示 $n$ 个人,$k$ 次一出的约瑟夫问题答案。
则有 $f_{n,k}=f_{n-1,k}+k-1\bmod n + 1$。
证明:考虑第一个人出去后,问题变成 $n-1$ 个人,$k$ 次一出的约瑟夫问题,
算出该问题的答案 $f_{n-1,k}$ 后,原问题的答案即为 $f_{n-1,k}$ 向后平移开始报的 $k$ 位。
#include <cstdio>
int n, k, q;
int main()
{
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i)
q = (q + k - 1) % i + 1;
return !printf("%d", q);
}