题意:
假设你和两只猫住在一起:A 和 B。有n个两只猫通常睡觉的午睡点。
你的猫喜欢睡觉,也喜欢所有这些地方,所以它们每小时都会周期性地改变睡点:
- 猫A按顺序改变它的午睡位置: n , n − 1 , n − 2 , ... , 3 , 2 , 1 , n , n − 1 , ...n,n-1,n-2,…,3,2,1,n,n-1,… 换句话说,在第一个小时它就在 n 然后循环递减;
- 猫 B 按顺序改变它的午睡位置: 1 , 2 , 3 , … , n − 1 , n , 1 , 2 , …1,2,3,…,n-1,n,1,2,… 换句话说,在第一个小时它就在1 然后循环递增。
猫 B 更年轻,所以它们有严格的等级制度:A 和 B 不会躺在一起。换句话说,如果两只猫都想去X 然后 A 占据这个位置,B 按B的移动顺序到下一个位置。
计算K小时后,B的位置在哪里;
题解:
step=k-1表示B移动的步伐。
分成两种情况:
- n为奇数,AB会相遇。step/(n/2)表示AB相遇的次数,step+step/(n/2)表示移动的长度。
- n为偶数,AB不相遇。
//#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
const int N = 2e5+5;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, k;
cin >> n >> k;
int step = k - 1, ans;
if (n & 1)
{
int meet = step / (n / 2);
ans = (meet + step) % n + 1;
}
else
{
ans = (k - 1) % n + 1;
}
cout << ans << endl;
}
}