2 solutions

  • 0
    @ 2025-5-9 17:21:38

    #include <bits/stdc++.h> using namespace std;

    // 处理单个测试用例的函数 void solve() { int n, k, q; // 涉及参数:n(总长度),k(位移量),q(查询位置) cin >> n >> k >> q; k %= 2 * n; // 周期优化:位移具有2n的周期性

    int ans; // 存储最终结果
    
    /* 特殊边界条件处理 */
    if (k == 0) // 无位移情况
    {
        cout << q << endl; // 直接返回原位置
    }
    else if (k == n) // 半周期反转
    {
        cout << n - q + 1 << endl; // 位置镜像翻转(如1↔n)
    }
    /* 正向位移逻辑(k < n) */
    else if (k < n)
    {
        if (q & 1) // 奇数位置处理分支
        {
            /* 当剩余空间不足时 */
            if (k >= n - q + 1) // 剩余空间计算:n - q + 1
            {
                // 消耗全部剩余空间
                k -= n - q + 1; 
                // 回绕到尾部继续计算
                ans = n - k; 
            }
            else // 正常前移
            {
                ans = q + k;
            }
        }
        else // 偶数位置处理分支
        {
            /* 当位移量超过当前位置值时 */
            if (k >= q) 
            {
                // 消耗全部当前值
                k -= q;
                // 转换移动方向
                ans = k + 1; 
            }
            else // 正常后移
            {
                ans = q - k;
            }
        }
        cout << ans << endl;
    }
    /* 反向位移逻辑(k > n)*/
    else if (k > n)
    {
        k -= n; // 转换为反向位移量
        if (q & 1) // 奇数位置处理分支
        {
            /* 剩余空间不足时 */
            if (k > n - q) 
            {
                // 消耗剩余空间
                k -= n - q;
                // 回绕到头部处理
                ans = k; 
            }
            else // 正常反向移动
            {
                ans = (n - q) - k + 1;
            }
        }
        else // 偶数位置处理分支
        {
            /* 转换剩余空间计算方式 */
            int effective = n - (n - q + 1); 
            if (k > effective)
            {
                // 消耗有效空间
                k -= effective;
                // 反向回绕计算
                ans = n - k + 1; 
            }
            else
            {
                // 正常逆向偏移
                ans = (n - q + 1) + k; 
            }
        }
        cout << ans << endl;
    }
    
    return;
    

    }

    signed main() { int _T = 1; // 测试用例数 cin >> _T; while (_T--) { solve(); // 处理每个用例 } return 0; } 注释

    Information

    ID
    1471
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    53
    Accepted
    9
    Uploaded By