95pts求助
查看原帖
95pts求助
1183074
xzy_AK_IOI楼主2024/10/4 21:25
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10;
struct player{int money,point;}players[2];
string mp[2]={"Renko","Merry"};
int n,m,q,l,flag,k;
int C[N][N];
struct building{
	int own;
	int pay;
	int deng;
}d[N];
int b[N];
signed main(){
	players[0].point=players[1].point=1;
	cin>>n>>m>>q>>l;
	players[0].money=players[1].money=m;
	for (int i=1;i<=n;i++){
		for (int j=0;j<=l-1;j++){
			cin>>C[i][j];
		}
	}
	for (int i=1;i<=n;i++) cin>>b[i],d[i].own=-1,d[i].deng=0;
	int now_play=-1;
	while (cin>>flag>>k,flag){
		if (flag==1){
			now_play++;
			if (now_play>=2){
				for (int i=1;i<=n;i++){
					if (d[i].own!=-1){
						players[d[i].own].money+=b[i];
					}
				}
				now_play=0;
			}
			for (int i=1;i<=k;i++){
				players[now_play].point=players[now_play].point+1;
				if (players[now_play].point==0) players[now_play].point=n;
				int np=players[now_play].point;
				if (d[np].own==(!now_play)){
					players[now_play].money-=d[np].pay;	
					if (players[now_play].money<0){
						cout<<mp[now_play];
						return 0;
					}
					players[!now_play].money+=d[np].pay;
				}
				if (d[np].own==now_play) players[now_play].money+=d[np].pay;
			}
		}
		else{
			int np=players[now_play].point;
			if (d[np].own==(!now_play)) continue;
			for (int i=1;i<=k && d[np].deng<l;i++){
				if (C[np][d[np].deng]>players[now_play].money) break;
				players[now_play].money-=C[np][d[np].deng];
				d[np].pay+=C[np][d[np].deng];
				d[np].deng++;
			}
			d[np].own=now_play;
		}
	}
	for (int i=1;i<=n;i++){
		if (d[i].own!=-1){
			players[d[i].own].money+=b[i];
		}
	}
	cout<<players[0].money<<" "<<players[1].money;
	return 0;
}
2024/10/4 21:25
加载中...