模拟

题意分析

我们可以先画图,就可以知道在 为偶数的情况下,他们永远不会重叠,直接计算 。(当 的情况下,直接计算 会导致等于 0,因此需要先

对于 为奇数的情况下,我们先计算它在可以重叠的情况下需要移动多少次,再计算挪位置的次数。我们可以发现,在 的情况下,移动 次就需要移位置,那么在 的情况下,移动 次就需要换一次位置,总共需要换位置的次数是 ,按照之前的方式取模即可。

代码

#include <iostream>
using namespace std;
 
int t, n, k, p;
 
int main() {
  for (cin >> t; t; --t) {
    cin >> n >> k;
    if (!(n & 1)) {  // 如果不会重叠
      p = (k - 1) % n + 1;  // 直接计算
    } else {
      p = ((k - 1)               // 原本需要走的次数,这里提前-1
        + ((k - 1) / (n >> 1)))  // 需要多走的步数
        % n + 1;                 // 取模
    } 
    cout << p << '\n';
  }
  return 0;
}