poj 1781 In Danger

    技术2022-05-20  31

    约瑟夫问题

    下面的博客写了常规的约瑟夫问题求解:http://blog.foreverzeus.com/?p=993

    而这题比较蛋疼,o(n)竟然超时,最后找了规律,过了

    #include<iostream> using namespace std; #include<cstring> #include<cmath> int mypow(int m,int n) { int i,sum=1; for(i=1;i<=n;i++) sum*=m; return sum; } int mylog(int n) { return (int)(log(n*1.0)/log(2.0)); } int main() { int n; char ch[5]; while(scanf("%s",ch)) { if(!strcmp(ch,"00e0")) break; n=(ch[0]-'0')*mypow(10,ch[3]-'0'+1)+ (ch[1]-'0')*mypow(10,ch[3]-'0'); printf("%d/n",2*(n-mypow(2,mylog(n)))+1); } return 0; }


    最新回复(0)