WA 22,求好心人下个数据
查看原帖
WA 22,求好心人下个数据
158268
追逐者楼主2021/2/1 11:16
//11 j 12 q 13k 14a 15:2 16:king
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int card[18];
int min1=0x7fffffff;
void read(){
	string a,b;
	cin>>a>>b;
	if(a[0]=='0')
	{	card[16]++;
		return;
	}
	if(a.length()==1)
	{
		if(a[0]=='2')
			card[15]++;
		else if(a[0]=='1')
			card[14]++;
		else
			card[a[0]-'0']++;
		return;
	}
	
	else{
		int x=(a[0]-'0')*10+a[1]-'0';
		card[x]++;
	}
}
void dfs(int now,int one,int two){
	int sum1=0,sum2=0;
	int shunzinow=0; 
	for(int i=3;i<=14;i++){//3顺 
		if(card[i]>=3){
			shunzinow++;
			if(shunzinow>=2){
				for(int j=i-shunzinow+1;j<=i;j++)
					card[j]-=3;
				dfs(now+1,one,two);
				for(int j=i-shunzinow+1;j<=i;j++)
					card[j]+=3;
			}
			
		}
		else{
			shunzinow=0;
		}
	}
	shunzinow=0;
	for(int i=3;i<=14;i++){//2顺 
		if(card[i]>=2){
			shunzinow++;
			if(shunzinow>=3){
				for(int j=i-shunzinow+1;j<=i;j++)
					card[j]-=2;
				dfs(now+1,one,two);
				for(int j=i-shunzinow+1;j<=i;j++)
					card[j]+=2;
			}
			
		}
		else{
			shunzinow=0;
		}
	}
	shunzinow=0;
	for(int i=3;i<=14;i++){//1顺 
		if(card[i]>=1){
			shunzinow++;
			if(shunzinow>=5){
				for(int j=i-shunzinow+1;j<=i;j++)
					card[j]-=1;
				dfs(now+1,one,two);
				for(int j=i-shunzinow+1;j<=i;j++)
					card[j]+=1;
			}
			
		}
		else{
			shunzinow=0;
		}
	}
	shunzinow=0;
	for(int i=3;i<=15;i++){//4带
		 if(card[i]==4){
		 	card[i]-=4;
		 	dfs(now+1,one+2,two);
		 	dfs(now+1,one,two+2);
		 	card[i]+=4;
		 }
	}
	for(int i=3;i<=15;i++){//3带 
		if(card[i]>=3){
			card[i]-=3;
			dfs(now+1,one+1,two);
			dfs(now+1,one,two+1);
			card[i]+=3;
		}
	}
	for(int i=3;i<=15;i++){
		sum1+=card[i]%2;
		sum2+=card[i]/2;
	}
	if(card[16]==1)
		sum1+=1;
	else if(card[16]==2)
		sum1+=2;
	sum2=max(sum2-two,0);
	if(sum1-one>=2&&card[16]==2)
	{
		sum1--;
	}
	sum1=max(sum1-one,0);
	min1=min(min1,sum1+sum2+now);
}
int main(){
	int t,n;
	cin>>t>>n;
	for(int t1=1;t1<=t;t1++){
		memset(card,0,sizeof(card));
		for(int i=1;i<=n;i++)
		{	
			read();
		}
		min1=0x7fffffff;
		dfs(0,0,0);
		cout<<min1<<endl;
	}
	return 0;
} 

没次数了,万分感谢

2021/2/1 11:16
加载中...