社区讨论
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 条回复,欢迎继续交流。
正在加载回复...