CF1487B Cat Cycle 题解

发布时间 2023-07-04 21:27:16作者: Redefinition0726

CF1487B Cat Cycle 题解

思路分析

在这道题中,很明显是一道数学题,因为有十分明显的数据范围:

\[n \le 10 ^ {9} , k \le 10 ^ {9} \]

分析如下:

  • 对于 \(n\) 为偶数的情况下,猫 \(A\) 和猫 \(B\) 永远不可能相遇,所以直接输出 \(( k - 1 ) \mod n\)
  • 对于 \(n\) 为奇数的情况下,猫 \(A\) 和猫 \(B\) 的相遇周期如下:

\[cycle \gets \frac{n - 1}{2} \]

\(B\) 多走的路程为 \(\lfloor ( k - 1 ) \div cycle \rfloor\),最后猫 \(B\) 一共走的路程再对 \(n\) 取模后即为答案,即:

\[ans \gets ( k + \lfloor ( k - 1 ) \div cycle \rfloor - 1 ) \mod n + 1 \]

代码实现

#include <bits/stdc++.h>
using namespace std;
long long t;
long long n, k;
long long cycle;
int main()
{
    scanf("%lld", &t);
    for (long long i = 1; i <= t; i++)
    {
        scanf("%lld%lld", &n, &k);
        if (n % 2 == 0)
        {
            printf("%lld\n", (k - 1) % n + 1);
        }
        else
        {
            cycle = (n - 1) / 2;
            printf("%lld\n", ((k + (k - 1) / cycle) - 1) % n + 1);
        }
    }
    return 0;
}