题目描述
现在,有一只蚱蜢位于一个数轴上 处。
因为它无事可做,便灵机一动,开始在数轴上进行弹跳训练。因为蚱蜢非常喜欢正整数,因此,在最开始的第一分钟,它会向前跳 1 个单位的长度,在第二分钟,它会向前跳 2 个单位的长度,以此类推。而蚱蜢觉得一直的往前跳跃也没啥意思,因此,它规定,如果在这一次跳跃前,它处于的点坐标为偶数,那么,它就会向左跳,否则,它才会向右跳。
例如:如果在连续的18次跳跃之后,蚱蜢到达了坐标点7,在它进行第19次跳跃时,因为它当前所处的位置是奇数,所以,它会往右跳跃19个单位长度到达坐标点。在它进行第20次跳跃时,因为当前所处的坐标点26是偶数,所以,它会向左跳跃20个单位长度到坐标
现在,已知蚱蜢最初始的坐标点 的大小,请你求出当蚱蜢跳跃
次以后到达的位置。
输入格式
第一行输入一个数字,表示样例的测试数量。
接下来 行,每行两个数字,第一个数字
,表示蚱蜢的初始位置,第二个数字
,表示跳跃的次数。
输出格式
对于每一个问题,输出跳跃 次后到达的坐标点位置。
样例
样例输入
9
0 1
0 2
10 10
10 99
177 13
10000000000 987654321
-433494437 87178291199
1 0
-1 1
样例输出
-1
1
11
110
190
9012345679
-87611785637
1
0
样例解释
对于第一个问题。蚱蜢的初始位置在坐标0处,因为0是一个偶数,因此,蚱蜢首先会向左跳1个单位长度,因此第一个问题的答案为-1.
对于第二个问题,蚱蜢的初始位置在坐标0初,因为0是一个偶数,因此,第一次向左跳一个单位长度到达-1,因为-1是一个奇数,因此,第二次向右跳2到达坐标点1,得到答案。
可见,每移动 4 次就会回到 .
所以, 这其实就是一道找规律的题, 很水 .
贴代码
#include <iostream>
using namespace std;
int main() {
long long t;
cin >> t;
for(int i=0; i<t; i++) {
long long x, fre, key; // 10^14 用 long long
cin >> x >> fre;
key = fre % 4; // 对4求余,看剩下几次(至于为什么,在前面说过)
for(long long j=0; j<key; j++)
if(x % 2 == 0) { // 偶数向 左 <--
x = x - (fre-key+1);
}
else { //奇数向 右 -->
x = x + (fre-key+1);
}
cout << x << endl;
}
return 0;
}