95pts求调。WA第15
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int>PII;
const int mod = 998244353;
const int inf = 2147483647;
const int N = 1e5 + 10;
int n, m, q, L;
int c[N][110];
int d[N];
int level[N];
int a[N];
bool mas[N];
bool build[N];
int have[2];
int plc[2];
int got[2];
signed main()
{
cin >> n >> m >> q >> L;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < L; ++j)
{
cin >> c[i][j];
}
}
for (int i = 0; i < n; ++i)
{
cin >> d[i];
}
int op, k;
int cur = 1;
int loser = -1;
have[0] = have[1] = m;
if (have[0] < 0)
{
loser = 0;
}
while (cin >> op && op)
{
cin >> k;
if (loser != -1)
{
continue;
}
if (op == 1)
{
cur ^= 1;
if (!cur)
{
have[0] += got[0];
have[1] += got[1];
}
for (int i = 1; i <= k; ++i)
{
plc[cur]++;
plc[cur] %= n;
int p = plc[cur];
if (build[p])
{
if (mas[p] == cur)
{
have[cur] += a[p];
}
else {
have[cur] -= a[p];
have[cur ^ 1] += a[p];
if (have[cur] < 0)
{
loser = cur;
break;
}
}
}
}
}
else
{
int p = plc[cur];
if (build[p] && mas[p] != cur)continue;
mas[p] = cur;
if (!build[p])
{
got[cur] += d[p];
build[p] = 1;
}
while (k-- && have[cur] >= c[p][level[p]] && level[p] < L)
{
a[p] += c[p][level[p]];
have[cur] -= c[p][level[p]];
++level[p];
}
if (have[cur] < 0)
{
loser = cur;
continue;
}
}
}
have[0] += got[0];
have[1] += got[1];
if (loser != -1)
cout << (loser ? "Merry" : "Renko");
else cout << have[0] << " " << have[1] << endl;
}