首页 > 代码库 > LA 4727

LA 4727

约瑟夫题目变形,思路和前面白书那个例题差不多~~

#include<algorithm>#include<cstdio>#include<cstring>#include<queue>#define maxn 500009using namespace std;int dp1[maxn];int dp2[maxn];int dp3[maxn];int main(){    int t,n,k;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&k);        dp1[1]=1;        if(k%2)dp2[2]=1;        else dp2[2]=2;        if(k%3==1)            dp3[3]=1;        else if(k%3==2)            dp3[3]=2;        else dp3[3]=3;        for(int i=2; i<=n; i++)        {            dp1[i]=(dp1[i-1]+k)%i;            if(dp1[i]==0)                dp1[i]=i;        }        for(int i=3;i<=n;i++)        {            dp2[i]=(dp2[i-1]+k)%i;            if(dp2[i]==0)                dp2[i]=i;        }        for(int i=4;i<=n;i++)        {            dp3[i]=(dp3[i-1]+k)%i;            if(dp3[i]==0)                dp3[i]=i;        }        printf("%d %d %d\n",dp3[n],dp2[n],dp1[n]);//        printf("%d %d %d\n",dp[n-2],dp[n-1],dp[n]);    }    return 0;}
View Code