约瑟夫问题
下面的博客写了常规的约瑟夫问题求解: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;
}