描述
假设有两只猫:猫 A 和猫 B ,共同拥有 n 个休息地点排成一个环,位置顺时针编号为 1 至 n,他们要选择休息位置。
对于选择休息位置,两只猫有不同的策略:猫 A 在第 1 小时会选择休息位置 n,接下来每过一小时它就会逆时针移一个位置,也就是说它选择的位置的序列为 n,n−1,n−2,…,3,2,1,n,n−1,…。
猫 B 在第 1 小时会选择休息位置 1,接下来每过一小时它就会顺时针移一个位置,也就是说它选择的位置的序列为 1,2,3,…,n−1,n,1,2,…。
特别的,因为猫 A 比猫 B 老,所以猫 A 比猫 B 地位高一些,因此当两只猫相中了同一个位置时,由猫 A 占领这个位置,猫 B 会再顺时针移一个位置到下一个位置。
给定 n,k,求出第 k 小时猫 B 在哪个位置。
输入描述
第一行包含一个整数 T ( 1≤T≤10 4 ) ,表示测试数据的组数,接下来给出 T 组测试数据的具体信息,每组测试数据仅有一行,包含两个整数 n 和 k ( 2≤n≤10 9 , 1≤k≤10 9 ) 。
输出描述
对于每个测试数据,打印一个整数表示猫B将在一小时内休眠位置的索引。
用例输入
7
2 1
2 2
3 1
3 2
3 3
5 5
69 1337
用例输出
1
2
1
3
2
2
65
蒟蒻用这段代码WA了o(╥﹏╥)o
#include <cstdio>
int main() {
int t, n, k, g;
scanf("%d", &t);
for (int i = 0; i < t; i++) {
scanf("%d %d", &n, &k);
k--;
if (k == 0) {
printf("1\n");
continue;
}
if (!(n % 2)) {
if (k % n == 0) {
printf("%d\n", n);
continue;
}
printf("%d\n", k % n);
continue;
}
g = 2 * n - 1;
printf("%d\n", (1 + k / (g) * (g + 1) + k % (g)) % n + 1);
}
return 0;
}