前言
巨难受
本来以为可以上紫的
但是Efail了。。
于是只上了12分。。
我已经在1880+卡了四场比赛了。。
这次就不写整场题解了
写一题吧
我的rat是长这样的。。
看来还是实力不够啊
题解
我们考虑一下第i位是怎么来的
如果他是奇数位,那么显然地,肯定没有动过
如果他是偶数位,那他是怎么来的呢?
肯定是别的跳过来的,那是从哪里跳过来的呢
容易知道,当我们要跳到某一个偶数位的时候,一定是长成这样的
黄色代表有数字
然后第F位肯定是从第L位跳过来的
可以知道,F位之前有i/2个数
那么后面就是n-i/2了
那么他就是从i+(n-i/2)=n+i/2这个地方跳过来
跳到奇数就停下来
这样的话每一次会扩大1.5倍
指数函数的力量啊
CODE:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
LL n,q;
int main()
{
scanf("%I64d%I64d",&n,&q);
while (q--)
{
LL x;
scanf("%I64d",&x);
while (x%2==0)
{
x=n+(x/2);
}
printf("%I64d\n",(x+1)/2);
}
return 0;
}