样例调半天才过,结果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';
}
}