比赛 2024国庆练习2 评测结果 AAAAAAAAAWWWWAAAAWWW
题目名称 战棋 最终得分 65
用户昵称 dream 运行时间 0.270 s
代码语言 C++ 内存使用 3.38 MiB
提交时间 2024-10-05 17:49:47
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=55;
int n,xx,AA,BB,CC;

int Getid() { return xx = (xx * AA + BB) % CC;}

struct qizi{
	int gj,sm,zz,sx;
}xrfy[N],xrdq[N],xsfy[N],xsdq[N];
int aaaa[105];
int getsums(){
	int sum=0;
	for(int i=1;i<=n;i++){
		if(xsdq[i].sm>0){
			sum++;
		}
	}	
	return sum;
}
int getsumr(){
	int sum=0;
	for(int i=1;i<=n;i++){
		if(xrdq[i].sm>0){
			sum++;
		}
	}	
	return sum;
}
int getsid(int x){
	int sum=-1;
	for(int i=1;i<=n;i++){
		if(xsdq[i].sm>0){
			sum++;
		}
		if(sum==x){
			return i;
		}
	}
}
int getrid(int x){
	int sum=-1;
	for(int i=1;i<=n;i++){
		if(xrdq[i].sm>0){
			sum++;
		}
		if(sum==x){
			return i;
		}
	}	
}
void hddzr(int x){
	if(xrdq[x].zz!=-2){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xrdq[i].sm>0&&xrdq[i].sx==4&&i!=x){
			xrdq[x].gj+=20;
			xrdq[x].sm+=20;
		}
	}
}
void hddzs(int x){
	if(xsdq[x].zz!=-2){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xsdq[i].sm>0&&xsdq[i].sx==4&&i!=x){
			xsdq[x].gj+=20;
			xsdq[x].sm+=20;
		}
	}
}
void hdzhs(int x){
	if(xsdq[x].sm>0){
		return;
	}
	if(xsdq[x].zz!=-2){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xsdq[i].sx==5&&i!=x&&xsdq[i].sm>0){
			xsdq[i].gj+=50;
		}
	}
}
void hdzhr(int x){
	if(xrdq[x].sm>0){
		return;
	}
	if(xrdq[x].zz!=-2){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xrdq[i].sx==5&&i!=x&&xrdq[i].sm>0){
			xrdq[i].gj+=50;
		}
	}
}
void yrgws(int x){
	if(xsdq[x].sx!=3){
		return;
	}
	if(xsdq[x].sm>0){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xsdq[i].zz==-1&&i!=x&&xsdq[i].sm>0){
			xsdq[i].gj+=20;
			xsdq[i].sm+=20;
		}
	}
}
void yrgwr(int x){
	if(xrdq[x].sx!=3){
		return;
	}
	if(xrdq[x].sm>0){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xrdq[i].zz==-1&&i!=x&&xrdq[i].sm>0){
			xrdq[i].gj+=20;
			xrdq[i].sm+=20;
		}
	}
}
int sjf,rjf;
void jss(){
	for(int i=1;i<=n;i++){
		if(xsdq[i].sm>0){
			sjf++;
		}
	}
}
void jsr(){
	for(int i=1;i<=n;i++){
		if(xrdq[i].sm>0){
			rjf++;
		}
	}
}
void yrljs(int x){
//	if(xsdq[x].sx!=2){
//		return;
//	}
//	for(int i=1;i<=n;i++){
//		if(xsdq[i].zz==-1&&i!=x&&xsdq[i].sm>0){
//			xsdq[i].gj+=20; 
//		}
//	}
	if(xsdq[x].zz!=-1){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xsdq[i].sm>0&&xsdq[i].sx==2&&i!=x){
			xsdq[x].gj+=20; 
		}
	}	
}
void yrljr(int x){
//	if(xrdq[x].sx!=2){
//		return;
//	}
//	for(int i=1;i<=n;i++){
//		if(xrdq[i].zz==-1&&i!=x&&xrdq[i].sm>0){
//			xrdq[i].gj+=20; 
//		}
//	}
	if(xrdq[x].zz!=-1){
		return;
	}
	for(int i=1;i<=n;i++){
		if(xrdq[i].sm>0&&xrdq[i].sx==2&&i!=x){
			xrdq[x].gj+=20; 
		}
	}
}
signed main(){
	freopen("chess.in","r",stdin);
	freopen("chess.out","w",stdout);
	aaaa['M']=-1;
	aaaa['P']=-2;
	aaaa['B']=1;
	aaaa['L']=2;
	aaaa['K']=3;
	aaaa['C']=4;
	aaaa['G']=5;
	cin>>n>>xx>>AA>>BB>>CC;
	for(int i=1;i<=n;i++){
		int a,b;
		char c,d;
		cin>>a>>b>>c>>d;
		xsfy[i]={a,b,aaaa[c],aaaa[d]};
	}
	for(int i=1;i<=n;i++){
		int a,b;
		char c,d;
		cin>>a>>b>>c>>d;
		xrfy[i]={a,b,aaaa[c],aaaa[d]};
	}	
	for(int i=1;i<=500;i++){
		for(int j=1;j<=n;j++){
			xrdq[j]=xrfy[j];
			xsdq[j]=xsfy[j];		
		}
			for(int j=1;j<=n;j++){
					yrljs(j);
					yrljr(j);
			}
		while(1){
			int qqq=getsums(),www=getsumr();
			if(!qqq||!www){
				break;
			}
			int x,y;
			x=Getid(),y=Getid();
			int dqs,dqr;
			dqs=getsid(x%getsums());
			dqr=getrid(y%getsumr());
//			cout<<dqs<<" "<<dqr<<"\n";
//			cout<<"dqs:"<<xsdq[dqs].gj<<" "<<xsdq[dqs].sm<<"\n";
//			cout<<"dqr:"<<xrdq[dqr].gj<<" "<<xrdq[dqr].sm<<"\n";			
		
//			yrljs(dqs);
//			yrljr(dqr);	
//			for(int j=1;j<=n;j++){
//				cout<<"s:"<<j<<" "<<xsdq[j].gj<<" "<<xsdq[j].sm<<"\n";
//				cout<<"r:"<<j<<" "<<xrdq[j].gj<<" "<<xrdq[j].sm<<"\n";			
//			}
					
			hddzs(dqs);
			hddzr(dqr);
//			cout<<"dqs:"<<xsdq[dqs].zz<<" "<<xsdq[dqs].gj<<" "<<xsdq[dqs].sm<<"\n";
//			cout<<"dqr:"<<xrdq[dqr].zz<<" "<<xrdq[dqr].gj<<" "<<xrdq[dqr].sm<<"\n";
			xsdq[dqs].sm-=xrdq[dqr].gj;
			xrdq[dqr].sm-=xsdq[dqs].gj;	
				
			hdzhs(dqs);
			hdzhr(dqr);
			
			yrgws(dqs);
			yrgwr(dqr);	
//			cout<<"hdqs:"<<xsdq[dqs].gj<<" "<<xsdq[dqs].sm<<"\n";
//			cout<<"hdqr:"<<xrdq[dqr].gj<<" "<<xrdq[dqr].sm<<"\n";			

		}
		jss();
		jsr();
	}
	cout<<sjf<<" "<<rjf;
	return 0;
}
/*
5 152 139 51 611
97 668 M K
54 754 M L
116 884 M G
102 454 M K
111 500 M C
132 618 M K
122 451 M B
111 523 M G
118 101 M K
57 972 M L
*/