P8918 『MdOI R5』Jump
只有第一秒走的长度为奇数,后面每一秒走的长度都为偶数,因此所有除
当
证明:
初始令每一秒都是往右走的,我们需要将某一些秒调整为往左走使得最终恰好走到
设
我们需要找到一些秒,使得这些秒中走的距离之和恰好为
只需要找出
时间复杂度
参考代码:
#include <bits/stdc++.h>
using namespace std;
int T,n;
void slv()
{
scanf("%d",&n);
if(n&1) printf("%d\n",32-__builtin_clz(n));
else printf("-1\n");
}
int main()
{
scanf("%d",&T);
while(T--) slv();return 0;
}