HIHO #1296 : 数论三·约瑟夫问题

来源:互联网 发布:java 数据结构和特点 编辑:程序博客网 时间:2024/04/28 03:47

题目链接

#include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define fastIO ios::sync_with_stdio(false);cin.tie(0);#define LL long long#define pb push_back#define gcd __gcd#define For(i,j,k) for(int i=(j);i<k;i++)#define lowbit(i) (i&(-i))#define _(x) printf("%d\n",x)const double EPS = 1e-8;const int maxn = 1e6+10;const int inf  = 1 << 28;/*约瑟夫问题可以解决n很大的*/int solve(int n,int k){    if(n==1)return 0;    if(n<k){        int ret = 0;        for(int i=2;i<=n;i++)ret = (ret+k) % i;        return ret;    }    int ret = solve(n-n/k,k);    if(ret < n%k){        ret = ret - n % k + n;    }    else {        ret = ret - n % k + (ret - n % k) / (k - 1);    }    return ret;}int main(){    int T;scanf("%d",&T);    while(T--){        int n,k;        scanf("%d%d",&n,&k);        printf("%d\n",solve(n,k));    }    return 0;}
0 0
原创粉丝点击