WA+RE 40 pts求调。
查看原帖
WA+RE 40 pts求调。
361141
_JF_殉情楼主2023/5/22 13:01
#include<bits/stdc++.h>
using namespace std;
const int N =2001;
#define int long long 
vector<int> g[N<<1];
int c[N][N],d[N],vis[N],step[N],a[N];
signed 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 sum1=m,sum2=m,now1=1,now2=1,tot=0,pre1=0,pre2=0;
	int x,y;
	while(scanf("%d%d",&x,&y)!=EOF){
		if(x==1)	tot++,g[tot].push_back(y);
		else if(x==2)	g[tot].push_back(y);
	}
	for(int i=1;i<=tot;i+=2){
		for(int j=1;j<=g[i][0];j++){
			now1++;
			if(now1==n+1)	now1=1;	
			if(vis[now1]==2)	sum1-=a[now1],sum2+=a[now1];
			if(sum1<0)	cout<<"Renko"<<endl,exit(0);
			if(vis[now1]==1)	sum1+=a[now1];
		}
		if(g[i].size()==2){
			if(vis[now1]==0||vis[now1]==1){
				bool f1=false;
				if(vis[now1]==1)	f1=true;
				if(sum1>=c[now1][1]&&vis[now1]==0)	step[now1]=1,sum1-=c[now1][1],a[now1]=c[now1][1],vis[now1]=1,g[i][1]--,f1=true,pre1+=d[now1];
				if(f1==true){
					for(int j=step[now1]+1;j<=min(L,step[now1]+g[i][1]);j++){
						if(sum1>=c[now1][j])	sum1-=c[now1][j],step[now1]=j,a[now1]=a[now1]+c[now1][j];
						else	break;
					}
				}
			}
		}
		sum1+=pre1;
		for(int j=1;j<=g[i+1][0];j++){
			now2++;
			if(now2==n+1)	now2=1;	
			if(vis[now2]==1)	sum1+=a[now2],sum2-=a[now2];
			if(sum2<0)	cout<<"Merry"<<endl,exit(0);
			if(vis[now2]==2)	sum2+=a[now2];
		}
		if(g[i+1].size()==2){
			if(vis[now2]==0||vis[now2]==2){
				bool f=false;
				if(vis[now2]==2)	f=true;
				if(sum2>=c[now2][1]&&vis[now2]==0)	step[now2]=1,sum2-=c[now2][1],a[now2]=c[now2][1],vis[now2]=2,pre2+=d[now2],g[i+1][1]--,f=true;
				if(f==true){
					for(int j=step[now2]+1;j<=min(L,step[now2]+g[i+1][1]);j++){
						if(sum2>=c[now2][j])	sum2-=c[now2][j],step[now2]=j,a[now2]=a[now2]+c[now2][j];
						else	break;
					}
				}
			}
		}
		sum2+=pre2;
		
	}
	cout<<sum1<<" "<<sum2<<endl;
}
2023/5/22 13:01
加载中...