3 条题解
-
0
因为本题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;
}
信息
- ID
- 1384
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 234
- 已通过
- 24
- 上传者