码有点长,但是wa了#2
查看原帖
码有点长,但是wa了#2
947873
RedWen_shuo楼主2024/7/17 14:03
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;

long long af,bf,cf,df;

string s1[N];
string s2[N];
string s3[N];
string s4[N];

string s[N]={"0","H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12","H13","S12","D11","C10"};
          //  0   1    2    3    4    5    6    7    8    9    10    11    12    13    14    15    16

bool H_1(int x)//判断是否全红在玩家一 
{
	bool r;
	long long l=0;//指针 
	for(int i=1;i<=x;i++)
	{
		if(s1[i]==s[1])
			l++;
			
		if(s1[i]==s[2])
			l++;
			
		if(s1[i]==s[3])
			l++;
			
		if(s1[i]==s[4])
			l++;
			
		if(s1[i]==s[5])
			l++;
			
		if(s1[i]==s[6])
			l++;
			
		if(s1[i]==s[7])
			l++;
			
		if(s1[i]==s[8])
			l++;
			
		if(s1[i]==s[9])
			l++;
			
		if(s1[i]==s[10])
			l++;
			
		if(s1[i]==s[11])
			l++;
			
		if(s1[i]==s[12])
			l++;
			
		if(s1[i]==s[13])
			l++;
	}	
	if(l==13)
		return true;
	else
		return false;
}
bool H_11(int x)//判断是否全红在玩家一 
{
	bool r;
	long long cnt=0;//计数器 
	for(int i=1;i<=x;i++)
	{
		if(s1[i]==s[14]||s1[i]==s[15])
			cnt++;
	}	
	if(cnt==2)
		return true;
	else 
		return false;
}
void H_111(int x)//二倍分卡
{
	bool t=0;
	if(x==1&&s1[1]==s[16])
		af+=50;
	else
		for(int i=1;i<=x;i++)
		{
			if(s1[i]==s[16])
				t=1;
		}
	if(t==1) af*=2;
} 
 
void H_1111(int x)//负数红色加起来 1 
{
	for(int i=1;i<=x;i++)
	{
		if(s1[i]==s[1])
			af+=(-50);
			
		if(s1[i]==s[2])
			af+=(-2);

		if(s1[i]==s[3])
			af+=(-3);

		if(s1[i]==s[4])	
			af+=(-4);

		if(s1[i]==s[5])
			af+=(-5);
			
		if(s1[i]==s[6])
			af+=(-6);
			
		if(s1[i]==s[7])
			af+=(-7);

		if(s1[i]==s[8])
			af+=(-8);

		if(s1[i]==s[9])	
			af+=(-9);

		if(s1[i]==s[10])
			af+=(-10);
			
		if(s1[i]==s[11])
			af+=(-20);
			
		if(s1[i]==s[12])
			af+=(-30);
			
		if(s1[i]==s[13])
			af+=(-40);
		
		if(s1[i]==s[14])
			af+=(-100);
			
		if(s1[i]==s[15])
			af+=100;
	}
} 
//////////////////////////////////////////////////////////////////////

bool H_2(int x)//判断是否全红在玩家二 
{
	bool r;
	long long l=0;//指针 
	for(int i=1;i<=x;i++)
	{
		if(s2[i]==s[1])
			l++;
			
		if(s2[i]==s[2])
			l++;
			
		if(s2[i]==s[3])
			l++;
			
		if(s2[i]==s[4])
			l++;
			
		if(s2[i]==s[5])
			l++;
			
		if(s2[i]==s[6])
			l++;
			
		if(s2[i]==s[7])
			l++;
			
		if(s2[i]==s[8])
			l++;
			
		if(s2[i]==s[9])
			l++;
			
		if(s2[i]==s[10])
			l++;
			
		if(s2[i]==s[11])
			l++;
			
		if(s2[i]==s[12])
			l++;
			
		if(s2[i]==s[13])
			l++;
	}	
	if(l==13)
		return true;
	else
		return false;
}
bool H_22(int x)//判断是否全红在玩家二 
{
	bool r;
	long long cnt=0;//计数器 
	for(int i=1;i<=x;i++)
	{
		if(s2[i]==s[14]||s2[i]==s[15])
			cnt++;
	}	
	if(cnt==2)
		return true;
	else 
		return false;
}
void H_222(int x)//二倍分卡
{
	bool t=0;
	if(x==1&&s2[1]==s[16])
		bf+=50;
	else
		for(int i=1;i<=x;i++)
		{
			if(s2[i]==s[16])
				t=1;
		}
	if(t==1) bf*=2;
} 

void H_2222(int x)//负数红色加起来 2 
{
	for(int i=1;i<=x;i++)
	{
		if(s2[i]==s[1])
			bf+=(-50);
			
		if(s2[i]==s[2])
			bf+=(-2);

		if(s2[i]==s[3])
			bf+=(-3);

		if(s2[i]==s[4])	
			bf+=(-4);

		if(s2[i]==s[5])
			bf+=(-5);
			
		if(s2[i]==s[6])
			bf+=(-6);
			
		if(s2[i]==s[7])
			bf+=(-7);

		if(s2[i]==s[8])
			bf+=(-8);

		if(s2[i]==s[9])	
			bf+=(-9);

		if(s2[i]==s[10])
			bf+=(-10);
			
		if(s2[i]==s[11])
			bf+=(-20);
			
		if(s2[i]==s[12])
			bf+=(-30);
			
		if(s2[i]==s[13])
			bf+=(-40);
		
		if(s2[i]==s[14])
			bf+=(-100);
			
		if(s2[i]==s[15])
			bf+=100;
	}
} 
//////////////////////////////////////////////////////////////////////

bool H_3(int x)//判断是否全红在玩家三 
{
	bool r;
	long long l=0;//指针 
	for(int i=1;i<=x;i++)
	{
		if(s3[i]==s[1])
			l++;
			
		if(s3[i]==s[2])
			l++;
			
		if(s3[i]==s[3])
			l++;
			
		if(s3[i]==s[4])
			l++;
			
		if(s3[i]==s[5])
			l++;
			
		if(s3[i]==s[6])
			l++;
			
		if(s3[i]==s[7])
			l++;
			
		if(s3[i]==s[8])
			l++;
			
		if(s3[i]==s[9])
			l++;
			
		if(s3[i]==s[10])
			l++;
			
		if(s3[i]==s[11])
			l++;
			
		if(s3[i]==s[12])
			l++;
			
		if(s3[i]==s[13])
			l++;
	}	
	if(l==13)
		return true;
	else
		return false;
}
bool H_33(int x)//判断是否全红在玩家三 
{
	bool r;
	long long cnt=0;//计数器 
	for(int i=1;i<=x;i++)
	{
		if(s3[i]==s[14]||s3[i]==s[15])
			cnt++;
	}	
	if(cnt==2)
		return true;
	else 
		return false;
}
void H_333(int x)//二倍分卡
{
	bool t=0;
	if(x==1&&s3[1]==s[16])
		cf+=50;
	else
		for(int i=1;i<=x;i++)
		{
			if(s3[i]==s[16])
				t=1;
		}
	if(t==1) cf*=2;
} 

void H_3333(int x)//负数红色加起来 3 
{
	for(int i=1;i<=x;i++)
	{
		if(s3[i]==s[1])
			cf+=(-50);
			
		if(s3[i]==s[2])
			cf+=(-2);

		if(s3[i]==s[3])
			cf+=(-3);

		if(s3[i]==s[4])	
			cf+=(-4);

		if(s3[i]==s[5])
			cf+=(-5);
			
		if(s3[i]==s[6])
			cf+=(-6);
			
		if(s3[i]==s[7])
			cf+=(-7);

		if(s3[i]==s[8])
			cf+=(-8);

		if(s3[i]==s[9])	
			cf+=(-9);

		if(s3[i]==s[10])
			cf+=(-10);
			
		if(s3[i]==s[11])
			cf+=(-20);
			
		if(s3[i]==s[12])
			cf+=(-30);
			
		if(s3[i]==s[13])
			cf+=(-40);
		
		if(s3[i]==s[14])
			cf+=(-100);
			
		if(s3[i]==s[15])
			cf+=100;
	}
} 
//////////////////////////////////////////////////////////////////////

bool H_4(int x)//判断是否全红在玩家四 
{
	bool r;
	long long l=0;//指针 
	for(int i=1;i<=x;i++)
	{
		if(s4[i]==s[1])
			l++;
			
		if(s4[i]==s[2])
			l++;
			
		if(s4[i]==s[3])
			l++;
			
		if(s4[i]==s[4])
			l++;
			
		if(s4[i]==s[5])
			l++;
			
		if(s4[i]==s[6])
			l++;
			
		if(s4[i]==s[7])
			l++;
			
		if(s4[i]==s[8])
			l++;
			
		if(s4[i]==s[9])
			l++;
			
		if(s4[i]==s[10])
			l++;
			
		if(s4[i]==s[11])
			l++;
			
		if(s4[i]==s[12])
			l++;
			
		if(s4[i]==s[13])
			l++;
	}	
	if(l==13)
		return true;
	else
		return false;
}
bool H_44(int x)//判断是否全红在玩家四 
{
	bool r;
	long long cnt=0;//计数器 
	for(int i=1;i<=x;i++)
	{
		if(s4[i]==s[14]||s4[i]==s[15])
			cnt++;
	}	
	if(cnt==2)
		return true;
	else 
		return false;
}
void H_444(int x)//二倍分卡
{
	bool t=0;
	if(x==1&&s4[1]==s[16])
		df+=50;
	else
		for(int i=1;i<=x;i++)
		{
			if(s4[i]==s[16])
				t=1;
		}
	if(t==1) df*=2;
} 

void H_4444(int x)//负数红色加起来 4 
{
	for(int i=1;i<=x;i++)
	{
		if(s4[i]==s[1])
			df+=(-50);
			
		if(s4[i]==s[2])
			df+=(-2);

		if(s4[i]==s[3])
			df+=(-3);

		if(s4[i]==s[4])	
			df+=(-4);

		if(s4[i]==s[5])
			df+=(-5);
			
		if(s4[i]==s[6])
			df+=(-6);
			
		if(s4[i]==s[7])
			df+=(-7);

		if(s4[i]==s[8])
			df+=(-8);

		if(s4[i]==s[9])	
			df+=(-9);

		if(s4[i]==s[10])
			df+=(-10);
			
		if(s4[i]==s[11])
			df+=(-20);
			
		if(s4[i]==s[12])
			df+=(-30);
			
		if(s4[i]==s[13])
			df+=(-40);
		
		if(s4[i]==s[14])
			df+=(-100);
			
		if(s4[i]==s[15])
			df+=100;
	}
} 

int main()
{
	while(1)
	{
		af=0,bf=0,cf=0,df=0;//玩家的分数 
		long long a,b,c,d;//四个玩家 
		//第一个玩家 
		cin>>a;
		for(int i=1;i<=a;i++)
			cin>>s1[i];
		//第二个玩家 
		cin>>b;
		for(int i=1;i<=b;i++)
			cin>>s2[i];
		//第三个玩家 
		cin>>c;
		for(int i=1;i<=c;i++)
			cin>>s3[i];
		//第四个玩家 
		cin>>d;
		for(int i=1;i<=d;i++)
			cin>>s4[i];
			
		//判断是否结束(全是 0) 
		if(a==0&&b==0&&c==0&&d==0) break;
		 
		//对于玩家一的统计分数的计算 
		if(H_1(a))//判断是否全红 
		{
			if(H_11(a)){
				af+=500;
				H_111(a);
		 		
		 	}else{
		 		af+=200;
		 		H_111(a);
		 		
		 	}
		}else{
			H_1111(a);
			H_111(a);
		}
		if(af>0)
			cout<<'+'<<af<<" ";
		else
			cout<<af<<" ";
		//////////////////////////////////////////////////// 
		//对于玩家二的统计分数的计算 
		if(H_2(b))//判断是否全红 
		{
			if(H_22(b)){
				bf+=500;
				H_222(b);
		 		
		 	}else{
		 		bf+=200;
		 		H_222(b);
				 	
		 	}
		}else{
			H_2222(b);
			H_222(b);
		}
		if(bf>0)
			cout<<'+'<<bf<<" ";
		else
			cout<<bf<<" ";
		///////////////////////////////////////////////////// 
		//对于玩家三的统计分数的计算 
		if(H_3(c))//判断是否全红 
		{
			if(H_33(c)){
				cf+=500;
				H_333(c);
		 		
		 	}else{
		 		cf+=200;
		 		H_333(c);
		 		
		 	}
		}else{
			H_3333(c);
			H_333(c);
		}
		if(cf>0)
			cout<<'+'<<cf<<" ";
		else
			cout<<cf<<" ";
		///////////////////////////////////////////////////// 
		//对于玩家四的统计分数的计算 
		if(H_4(d))//判断是否全红 
		{
			if(H_44(d)){
				df+=500;
				H_444(d);
		 		
		 	}else{
		 		df+=200;
		 		H_444(d);
		 		
		 	}
		}else{
			H_4444(d);
			H_444(d);
		}
		if(df>0)
			cout<<'+'<<df<<" ";
		else
			cout<<df<<" ";
		cout<<"\n";
	}
	return 0;	
} 


2024/7/17 14:03
加载中...