poj 1012 Joseph环问题

来源:互联网 发布:雪球小小辛巴 知乎 编辑:程序博客网 时间:2024/06/02 02:23

题意:有k个好人和k个坏人,问想要先处死k个坏人的最小间隔为多少?

思路:k比较小(k<=14),所以对于k进行枚举计算,注意把结果存一下。枚举时的递推式还是需要想一下的。b=(a+m-1)%(n-i+1); (i>=1 , 总人数2n,人编号从0~2n-1,则n-i为第i轮剩余的人数),相当于每轮都把比死者序号大的人的序号减1。

#include <stdio.h>#include <string.h>int res[16];int n;int main(){    memset(res,0,sizeof(res));    while(scanf("%d",&n) && n){        int i,m,a,b;        if(res[n]){            printf("%d\n",res[n]);            continue;        }        a = 0;        for(i = 1,m = 1;i<=n;i++){            b = (a+m-1)%(2*n-i+1);            a = b;            if(b < n){                i = a = 0;                m++;            }        }        res[n] = m;        printf("%d\n",m);    }    return 0;}


0 0
原创粉丝点击