☮✝☪☪🕉☸♈⛎🛐☦🕎🔯✡♉♊♋
2025-02-03 16:35:49
发布于:浙江
#include <iostream>
#include <vector>
using namespace std;
long long C[109][109], d[109], a[109], id[109], level[109];
vector<pair<int,int> >ve;
int main() {
long long n, m, q, L;
cin >> n >> m >> q >> L;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < L; j++) {
cin >> C[i][j];
}
}
for (int i = 1; i <= n; i++) {
cin >> d[i];
}
long long opt, k, player = 1, m1 = m, m2 = m;
while (cin >> opt >> k) {
ve.push_back({ opt,k });
}
int loc1 = 1, loc2 = 1;
for (int i = 0; i < ve.size(); i++) {
player ^= 1;
if (player == 0) {
for (int j = 1; j <= ve[i].second; j++) {
loc1++;
if (loc1 == n + 1) {
loc1 = 1;
}
if (id[loc1] == 1) {
m1 += a[loc1];
} else if (id[loc1] == 2) {
m1 -= a[loc1], m2 += a[loc1];
if (m1 < 0) {
cout << "JUN" << '\n';
return 0;
}
}
}
if (i + 1 < ve.size() && ve[i + 1].first == 2) {
i++;
if (id[loc1] <= 1) {
bool flag = false;
for (int j = level[loc1]; j < min(L, level[loc1] + ve[i].second); j++) {
if (m1 >= C[loc1][j]) {
m1 -= C[loc1][j], a[loc1] += C[loc1][j];
id[loc1] = 1;
} else {
level[loc1] = j;
flag = true;
break;
}
}
if (!flag) {
level[loc1] = min(L, level[loc1] + ve[i].second);
}
}
}
} else {
for (int j = 1; j <= ve[i].second; j++) {
loc2++;
if (loc2 == n + 1) {
loc2 = 1;
}
if (id[loc2] == 2) {
m2 += a[loc2];
}
else if (id[loc2] == 1) {
m1 += a[loc2], m2 -= a[loc2];
if (m2 < 0) {
cout << "JIANG" << '\n';
return 0;
}
}
}
if (i + 1 < ve.size() && ve[i + 1].first == 2) {
i++;
if (id[loc2] % 2 == 0) {
bool flag = false;
for (int j = level[loc2]; j < min(L, level[loc2] + ve[i].second); j++) {
if (m2 >= C[loc2][j]) {
m2 -= C[loc2][j], a[loc2] += C[loc2][j];
id[loc2] = 2;
}
else {
level[loc2] = j;
flag = true;
break;
}
}
if (!flag) {
level[loc2] = min(L, level[loc2] + ve[i].second);
}
}
}
for (int j = 1; j <= n; j++) {
if (id[j] == 1) {
m1 += d[j];
}
else if (id[j] == 2) {
m2 += d[j];
}
}
}
}
cout << m1 << " " << m2 << '\n';
return 0;
}
这里空空如也
有帮助,赞一个