1 条题解

  • 1
    @ 2025-9-22 21:32:36

    由于玩家数量固定(12个),但k可能很大(最大10000),直接模拟整个游戏过程是可行的。我们使用队列来模拟循环计数的过程:

    1. 初始化队列,包含所有12名玩家及其当前伤害值

    2. 从1开始计数,每次从队列头部取出一个玩家

    3. 如果计数达到n,则当前玩家受到1点伤害:

    4. 如果伤害达到k,该玩家离队,否则重新入队

    5. 重置计数为1

    6. 如果计数未达到n,玩家直接重新入队,计数加1

    重复直到只剩1名玩家。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n, k;
        cin >> n >> k;
        queue<pair<int, int>> q;
        for (int i = 1; i <= 12; i++)
            q.push({i, 0});
        int cnt = 1;
        int lst = -1;
        while (!q.empty())
        {
            auto [idx, cur] = q.front();
            q.pop();
            if (cnt == n)
                cnt = 1, cur++;
            else
                cnt++;
            if (cur == k)
                lst = idx;
            else
                q.push({idx, cur});
        }
        cout << lst << endl;
        return 0;
    }
    
    • 1

    你是谁,请支持魔法少女的魔女审判

    信息

    ID
    2727
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    2
    已通过
    2
    上传者