社区讨论

20pts 码风良好求调 玄关!

B3767 [语言月赛202305] 你的牌太多了 2参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m272x5a1
此快照首次捕获于
2024/10/13 12:22
去年
此快照最后确认于
2025/11/04 17:18
4 个月前
查看原帖
B3767 [语言月赛202305] 你的牌太多了 2
CPP
#include<bits/stdc++.h>
using namespace std;
int T,n,m,r,S;
int f[3][105],p[3][105],cnt[3],bj[3][105];
void cp(int ds,int hs,int last){
	int nw,ds_nw=200,sum=0;
	if(last==1) nw=2;
	else nw=1;
	for(int i=1;i<=n;i++){
		if(p[nw][i]==hs&&f[nw][i]<ds_nw&&f[nw][i]>ds&&bj[nw][i]==0){
			ds_nw=f[nw][i];
			sum=i;
		}
	}
	if(sum==0){
		S=last;
		return;
	} 
	else{
		cnt[nw]--;
		if(cnt[nw]==0){
			if(nw==1) printf("FS wins!\n");
			else printf("FR wins!\n");
			return;
		}
		bj[nw][sum]=1;
		cp(ds_nw,hs,nw);
	}
}
void gamee(int s){
//	if(cnt[1]==0||cnt[2]==0){
	//	if(cnt[1]==0) printf("FS wins!\n");
//		else printf("FR wins!\n");
//		return;
//	}
	//发牌 
	int ds=200,hs=200,sum;
	for(int i=1;i<=n;i++){
		if((f[s][i]<ds||(f[s][i]==ds&&p[s][i]<hs))&&bj[s][i]==0){
			ds=f[s][i];
			hs=p[s][i];
			sum=i;
		}
	}
	cnt[s]--;
	if(cnt[s]==0){
		if(s==1) printf("FS wins!\n");
		else printf("FR wins!\n");
		return;
	}
	bj[s][sum]=1;
	//出牌 
	cp(ds,hs,s); 
	if(cnt[1]==0||cnt[2]==0) return;
	gamee(S);
}
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d%d",&n,&m,&r,&S);
		memset(f,0,sizeof(f));
		memset(p,0,sizeof(p));
		memset(cnt,0,sizeof(cnt));
		cnt[1]=cnt[2]=n;
		for(int i=1;i<=n;i++) scanf("%d",&p[1][i]);
		for(int i=1;i<=n;i++) scanf("%d",&f[1][i]);
		for(int i=1;i<=n;i++) scanf("%d",&p[2][i]);
		for(int i=1;i<=n;i++) scanf("%d",&f[2][i]);
		gamee(S);
	}
	return 0;
} 

回复

1 条回复,欢迎继续交流。

正在加载回复...