0分求调,悬关
查看原帖
0分求调,悬关
800712
BC_114514楼主2024/1/20 20:15

rt

#include <cstring>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <limits.h>
#include <list>
#include <set>
#include <map>
using namespace std;
#define tr true
#define fa false
#define str string
#define itn int
const int MAXN=-1;
const int MINN=999999999;
//s=heitao	h=hongxin	d=fangkuai	c=meihua
int h[14]={-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40};
int n1,n2,n3,n4;//用于输入
int v1[105],v2[105],v3[105],v4[105];//输入
char c1[105],c2[105],c3[105],c4[105];//用于输入花色
int c10(){//寻找c10所在的人的手上
	for(int i=0;i<n1;i++)
		if(c1[i]=='C' and v1[i]==10)
			return 1;
	for(int i=0;i<n2;i++)
		if(c2[i]=='C' and v2[i]==10)
			return 2;
	for(int i=0;i<n3;i++)
		if(c3[i]=='C' and v3[i]==10)
			return 3;
	for(int i=0;i<n4;i++)
		if(c4[i]=='C' and v4[i]==10)
			return 4;
	return 0;
}
int d11(){//寻找d11所在的人的手上
	for(int i=0;i<n1;i++)
		if(c1[i]=='D' and v1[i]==11)
			return 1;
	for(int i=0;i<n2;i++)
		if(c2[i]=='D' and v2[i]==11)
			return 2;
	for(int i=0;i<n3;i++)
		if(c3[i]=='D' and v3[i]==11)
			return 3;
	for(int i=0;i<n4;i++)
		if(c4[i]=='D' and v4[i]==11)
			return 4;
	return 0;
}
int s12(){//寻找s12所在的人的手上
	for(int i=0;i<n1;i++)
		if(c1[i]=='S' and v1[i]==12)
			return 1;
	for(int i=0;i<n2;i++)
		if(c2[i]=='S' and v2[i]==12)
			return 2;
	for(int i=0;i<n3;i++)
		if(c3[i]=='S' and v3[i]==12)
			return 3;
	for(int i=0;i<n4;i++)
		if(c4[i]=='S' and v4[i]==12)
			return 4;
	return 0;
}
int h1_h13(){
	int flag1=0,flag2=0,flag3=0,flag4=0;
	for(int i=0;i<n1;i++)
		if(c1[i]=='H')
			flag1=1;
	for(int i=0;i<n2;i++)
		if(c2[i]=='H')
			flag2=1;
	for(int i=0;i<n3;i++)
		if(c3[i]=='H')
			flag3=1;
	for(int i=0;i<n4;i++)
		if(c4[i]=='H')
			flag4=1;
	if(flag1==1){
		return 1;
	}else if(flag2==1){
		return 2;
	}else if(flag3==1){
		return 3;
	}else if(flag4==1){
		return 4;
	}else{
		return 0;
	}
	return 0;
}
int main() {
   	int cnt=0;
    while(1){
    	cin>>n1;
    	for(itn i=0;i<n1;i++){
    		//输入第一个
    		cin>>c1[i]>>v1[i];
		}
		if(n1==0) cnt++;
		cin>>n2;
		for(int i=0;i<n2;i++){
			//第二个
			cin>>c2[i]>>v2[i];
		}
		if(n2==0) cnt++;
		cin>>n3;
		for(int i=0;i<n3;i++){
			//第三个
			cin>>c3[i]>>v3[i];
		}
		if(n3==0) cnt++;
		cin>>n4;
		for(int i=0;i<n4;i++){
			//第四个
			cin>>c4[i]>>v4[i];
		}
		if(!n4) break;//结束
		int cntc10=c10(),cntd11=d11(),cnts12=s12(),cnt114514=h1_h13();
		int cnt114[5];
		memset(cnt114,0,sizeof(cnt114));
		if(cnt114514){//若h全部在同一个人那里
			cnt114[cnt114514]+=200;
			if(cntd11==cnt114514 and cnts12==cnt114514){
				cnt114[cnt114514]+=300;
			}
		}else{
			//若不在同一个人那里,则按正常规则加分
			for(int i=0;i<n1;i++){
				if(c1[i]=='H'){
					cnt114[1]+=h[v1[i]];
				}
			}
			for(int i=0;i<n2;i++){
				if(c2[i]=='H'){
					cnt114[2]+=h[v2[i]];
				}
			}
			for(int i=0;i<n3;i++){
				if(c3[i]=='H'){
					cnt114[3]+=h[v3[i]];
				}
			}
			for(int i=0;i<n4;i++){
				if(c3[i]=='H'){
					cnt114[3]+=h[v4[i]];
				}
			}	
		}
		cnt114[cntd11]+=100,cnt114[cnts12]=cnt114[cnts12]-100,cnt114[cntc10]*=2;
		for(int i=0;i<4;i++){
			if(cnt114[i]>0){
				cout<<"+"<<cnt114[i]<<' ';
			}else{
				cout<<cnt114[i]<<' ';
			}
		}
	}	
    return 0;
}

请各位大佬帮一下

2024/1/20 20:15
加载中...