弹跳蚂蚱 Jumping Grasshopper

题目描述

现在,有一只蚱蜢位于一个数轴上 {x}_0 处。

因为它无事可做,便灵机一动,开始在数轴上进行弹跳训练。因为蚱蜢非常喜欢正整数,因此,在最开始的第一分钟,它会向前跳 1 个单位的长度,在第二分钟,它会向前跳 2 个单位的长度,以此类推。而蚱蜢觉得一直的往前跳跃也没啥意思,因此,它规定,如果在这一次跳跃前,它处于的点坐标为偶数,那么,它就会向左跳,否则,它才会向右跳。

例如:如果在连续的18次跳跃之后,蚱蜢到达了坐标点7,在它进行第19次跳跃时,因为它当前所处的位置是奇数,所以,它会往右跳跃19个单位长度到达坐标点19+7=26。在它进行第20次跳跃时,因为当前所处的坐标点26是偶数,所以,它会向左跳跃20个单位长度到坐标26-20=6.

现在,已知蚱蜢最初始的坐标点 {x}_0 的大小,请你求出当蚱蜢跳跃 n 次以后到达的位置。

输入格式

第一行输入一个数字t(1 \leq t \leq 10^{14}),表示样例的测试数量。

接下来 t 行,每行两个数字,第一个数字 {x}_0(-10^{14}\leq {x}_0\leq 10^{14}),表示蚱蜢的初始位置,第二个数字n(1\leq n \leq10^{14}) ,表示跳跃的次数。

输出格式

对于每一个问题,输出跳跃 n 次后到达的坐标点位置。

样例

样例输入

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 次就会回到 {x}_0 .

所以, 这其实就是一道找规律的题, 很水 .  

贴代码

#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;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值