题意:
定义phi(W) 为以下函数(W为字符串):
1.如果W的长的为1,那么phi(W)就是W;
2.令W=w1w2...wN且K=N/2(向下取整);
3.phi(W)=phi(wNwN-1...wK+1)+phi(wKwK-1...w1).
例如, phi('Ok') = 'kO', phi('abcd') = 'cdab'.
你的任务是找到原来在位置q的字符在phi(W)中的位置。
分析:
二分模拟,超级大水题一道。
晚上最后一题,睡觉去...
定义phi(W) 为以下函数(W为字符串):
1.如果W的长的为1,那么phi(W)就是W;
2.令W=w1w2...wN且K=N/2(向下取整);
3.phi(W)=phi(wNwN-1...wK+1)+phi(wKwK-1...w1).
例如, phi('Ok') = 'kO', phi('abcd') = 'cdab'.
你的任务是找到原来在位置q的字符在phi(W)中的位置。
分析:
二分模拟,超级大水题一道。
晚上最后一题,睡觉去...
#include <cstdio>
#include <iostream>
using namespace std;
void binary(int l, int r, int q)
{
if(l == r)
{
cout << l << endl;
return ;
}
int mid = (l+r-1)>>1;
if(q > mid) binary(l, l+r-mid-1, r-q+l);
else binary(r-mid+l, r, r-q+l);
}
int main()
{
int n, q;
cin >> n >> q;
binary(1, n, q);
return 0;
}