记录编号 79551 评测结果 AAAAAAAAAA
题目名称 拱猪计分 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2013-11-05 21:43:49 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int redheart[]={0,-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40};
bool allred;
class PLAYER{
public:
	int cardnum;
	bool pig,goat,twice;
	int rdnum;
	bool rd[14];
	int score;
	void clear(){
		pig=goat=twice=false;
		cardnum=rdnum=0;
		memset(rd,0,sizeof(rd));
	}
	void input(void){
		string str;
		scanf("%d",&cardnum);
		int i;
		for(i=1;i<=cardnum;i++){
			cin>>str;
			if(str=="S12") pig=true;
			else if(str=="D11") goat=true;
			else if(str=="C10") twice=true;
			else if(str[0]=='H'){//红桃
				rdnum++;
				if(str.size()==2) rd[str[1]-'0']=true;
				else if(str.size()==3) rd[(str[1]-'0')*10+(str[2]-'0')]=true;
			}
		}
	}
	void calc(void){
		if(twice&&(cardnum==1)){
			score=50;
			return;
		}
		int sum=0,i;
		if(!allred){//红牌不在同一家
			//红牌以负分计算
			for(i=1;i<=13;i++) if(rd[i]) sum+=redheart[i];
			if(pig) sum-=100;//S12以-100计算
			if(goat) sum+=100;//D11以+100计算
		}
		else{//红牌在同一家
			if(rdnum==13){//红心通吃者
				sum=200;
				if(pig&&goat) sum=500;
				else{
					if(pig) sum-=100;
					if(goat) sum+=100;
				}
			}
			else{
				if(pig)	sum-=100;
				if(goat) sum+=100;
			}
		}
		if(twice) sum*=2;
		score=sum;
	}
	void output(void){
		if(score>0) printf("+");
		printf("%d",score);
	}
};
PLAYER a,b,c,d;
bool check_allred(void){
	if(a.rdnum==13) return true;
	if(b.rdnum==13) return true;
	if(c.rdnum==13) return true;
	if(d.rdnum==13) return true;
	return false;
}
bool legal(void){
	if(a.cardnum) return true;
	if(b.cardnum) return true;
	if(c.cardnum) return true;
	if(d.cardnum) return true;
	return false;
}
bool singlework(void){
	a.clear(),b.clear(),c.clear(),d.clear();
	a.input(),b.input(),c.input(),d.input();
	if(!legal()) return false;
	allred=check_allred();
	a.calc(),b.calc(),c.calc(),d.calc();
	a.output();cout<<" ";b.output();cout<<" ";c.output();cout<<" ";d.output();cout<<"\n";
	return true;
}
int main(){
	freopen("heart.in","r",stdin);
	freopen("heart.out","w",stdout);
	while(singlework());
	return 0;
}