约瑟夫环(klogn 和线性)
Posted thusloop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫环(klogn 和线性)相关的知识,希望对你有一定的参考价值。
int josephus(int n, int k) //O(n) n个人 数到k删除
int res = 0;
for (int i = 1; i <= n; ++i) res = (res + k) % i;
return res;
int josephus(int n, int k) //O(klogn)
if (n == 1) return 0;
if (k == 1) return n - 1;
if (k > n) return (josephus(n - 1, k) + k) % n; // 线性算法
int res = josephus(n - n / k, k);
res -= n % k;
if (res < 0)
res += n; // mod n
else
res += res / (k - 1); // 还原位置
return res;
以上是关于约瑟夫环(klogn 和线性)的主要内容,如果未能解决你的问题,请参考以下文章