大模拟50ptsWA求调
查看原帖
大模拟50ptsWA求调
1125106
11514zbs楼主2025/8/30 10:16

样例调半天才过,结果40变50。

https://www.luogu.com.cn/record/233793789

#include <bits/stdc++.h>

using namespace std;

int c[110][110];
int along[110];
int level[110];
int d[110];
int a[110];

int main()
{
    int n, m, q, L;
    cin >> n >> m >> q >> L;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= L; j++)
            cin >> c[i][j];

    for (int i = 1; i <= n; i++)
        cin >> d[i];

    int renko = 1, merry = 1;
    int renkom = m, merrym = m;
    int now = 2;
    int lose = 0;
    int opt, k;
    int cnt = 1;
    while (!(lose) && cin >> opt >> k)
    {
        if (cnt % 2 == 1 && opt == 1)
        {
            for (int i = 1; i <= n; i++)
            {
                if (along[i] == 1)
                    renkom += d[i];
                else if (along[i] == 2)
                    merrym += d[i];
            }
        }
        if (opt == 1)
        {
            cnt++;
            now = 3 - now;
            if (now == 1)
            {
                for (int i = 1; i <= k; i++)
                {
                    renko = renko % n + 1;
                    if (along[renko] == 1)
                        renkom += a[renko];
                    else if (along[renko] == 2)
                    {
                        renkom -= a[renko];
                        merrym += a[renko];
                    }
                    if (renkom < 0)
                    {
                        break;
                    }
                }
            }
            else
            {
                for (int i = 1; i <= k; i++)
                {
                    merry = merry % n + 1;
                    if (along[merry] == 2)
                        merrym += a[merry];
                    else if (along[merry] == 1)
                    {
                        renkom += a[merry];
                        merrym -= a[merry];
                    }
                    if (merrym < 0)
                    {
                        break;
                    }
                }
            }

            if (lose == 0)
            {
                if (renkom < 0)
                    lose = 1;
                else if (merrym < 0)
                    lose = 2;
            }
        }
        else 
        {
            if (now == 1)
            {
                if (along[renko] != 2)
                {
                    int ans = 0;
                    int j = level[renko] + 1;
                    for (; j <= level[renko] + k && j <= L && ans + c[renko][j] <= renkom; j++)
                        ans += c[renko][j];
                    renkom -= ans;
                    level[renko] = j - 1;
                    a[renko] += ans;
                    along[renko] = 1;
                }
            }
            else
            {
                if (along[merry] != 1)
                {
                    int ans = 0;
                    int j = level[merry] + 1;
                    for (; j <= level[merry] + k && j <= L && ans + c[merry][j] <= merrym; j++)
                        ans += c[merry][j];
                    merrym -= ans;
                    level[merry] = j - 1;
                    a[merry] += ans;
                    along[merry] = 2;
                }
            }
        }
    }

    
    if (lose == 1)
        cout << "Renko\n";
    else if (lose == 2)
        cout << "Merry\n";
    else
    {
        for (int i = 1; i <= n; i++)
        {
            if (along[i] == 1)
                renkom += d[i];
            else if (along[i] == 2)
                merrym += d[i];
        }
        cout << renkom << " " << merrym << '\n';
    }
}

2025/8/30 10:16
加载中...