链接:cf#469
C
题目大意
1 |
|
D
题目大意
- n个数字,每两个数字中间插一个空,每次将最右边的数移动到最右边的空格处,q个询问,问最后在xi位置的元素
题解
- 数据范围是1e18次方,显然需要找规律,显然n/2左边的数字都是不动的,对于第x(i)个位置的元素,他会转移到2*(x(i)-n)的位置
- 上去,即是P(x)=n+x/2 (x位置上的元素由P(x)转移过来)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using namespace std;
ll n,q,x;
int main(){
while(~scanf("%I64d%I64d",&n,&q)){
while(q--){
scanf("%I64d",&x);
while(!(x&1))x+=n-x/2;
printf("%I64d\n",(x+1)/2);
}
}
return 0;
}
总结
- 考场上两道题都没做出来,没状态,code能力太弱。
- 再弱小也还是要努力地活下去。