3 条题解
-
0
信息
- ID
- 1384
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 234
- 已通过
- 24
- 上传者
因为本题Q <= 10,所以可以考虑对于每一次查询,记录初始位置,如果下一次查询的结果=已知初始位置,则找出循环节 下面是本人的代码,可能有多余,但已经AC
#include<bits/stdc++.h>
using namespace std;
const long long maxq = 100, maxn = 1e6 + 5; long long n, t, q, a[maxq], flag, sum[maxn], cnt, b, ans[maxn];
int main() { long long i, j, num = 1;
cin >> n >> t >> q;
for(i = 1; i <= q; i++)
{
cin >> a[i];
}
for(i = 1; i <= q; i++)
{
j = a[i];
b = t;
cnt = 0;
memset(sum, 0, sizeof(sum));
memset(ans, 0, sizeof(ans));
num = 1;
while(1)
{
ans[num] = j;
num++;
sum[j]++;
if(sum[j] == 2)
{
break;
}
else
{
cnt++;
}
if(j % 2 == 0)
{
j = j / 2 + (n + 1) / 2;
}
else
{
j = j / 2 + 1;
}
}
b = b % cnt + 1;
cout << ans[b] << " ";
}
return 0;
}