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);
}
posted @ 2023-06-17 18:48  5k_sync_closer  阅读(6)  评论(0编辑  收藏  举报  来源