POJ Problem 3931 Classmates题解

来源:互联网 发布:inputselect.js 编辑:程序博客网 时间:2024/06/05 02:15

类似于约瑟夫环问题,输入Mike的编号m和在环中剩余的人数k(包含Mike),求解Mike最少有多少名同学。


#include<iostream>using namespace std;typedef long long LL;LL joseph(LL m, LL k){    if(m == 1) return 2*k-1;    else if(m%2 == 0){        LL n = m/2-1+k;        if(n >= m) return n;        else return 0;    }    else{        LL n1 = joseph((m+1)/2, k)*2;        LL n2 = joseph((m-1)/2, k)*2+1;        if(n2 == 1) n2 = 0;        if(n1 > 0 && n2 > 0)            return min(n1, n2);        else            return max(n1, n2);    }}int main(){    LL m, k;    while(cin >> m >> k){        if(m == 0 && k == 0) break;        LL ans = joseph(m, k);        if(ans > 0)            cout << ans << endl;        else            cout << "Impossible" << endl;    }    return 0;}


0 0
原创粉丝点击