递归处理[想象中的]字符串,因为只需要知道其中一个元素最后的位置,
可以只调用
log2N
次递归就得出答案
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
//phi(W) = phi(wNwN-1...wK+1) + phi(wKwK-1...w1).
int f(const int ni,const int qi)
{
if(ni == 1)return 1;
int mid = ni>>1;
if(qi <= mid)
{
return (ni - mid) + f(mid , mid - qi + 1);
}
else
{
return f((ni - mid),ni - qi + 1);
}
}
int main()
{
int n , q;
#ifndef ONLINE_JUDGE
freopen("sgu175.in","r",stdin);
freopen("sgu175.out","w",stdout);
#endif
scanf("%d%d",&n,&q);
printf("%d\n",f(n , q));
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return 0;
}