递归处理[想象中的]字符串,因为只需要知道其中一个元素最后的位置,
可以只调用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;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
本文介绍了一种使用递归算法处理字符串的方法,通过调用log2N次递归得出指定元素在字符串中的位置,展示了递归在算法设计中的高效应用。
195

被折叠的 条评论
为什么被折叠?



