MnZn求调
查看原帖
MnZn求调
1248522
mlvx楼主2024/7/11 10:31

rt,样例最后一个不对,多了

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct Card{int hs,ds;}me[5],you[5],pi[5],a[5];bool operator!=(Card a,Card b){return a.hs!=b.hs||a.ds!=b.ds;}
char c1,c2;
int huase(char c){return c=='S'?0:c=='H'?1:c=='D'?2:3;}
int dianshu(char c){return c>='2'&&c<='9'?c-'0':c=='T'?10:c=='J'?11:c=='Q'?12:c=='K'?13:14;}
ll f(Card*b){
	memcpy(a,b,sizeof a);
	bool tonghua=(a[0].hs==a[1].hs&&a[1].hs==a[2].hs&&a[2].hs==a[3].hs&&a[3].hs==a[4].hs);
	sort(a,a+5,[](Card a,Card b){return a.ds>b.ds;});
	if(tonghua&&a[0].ds==14&&a[1].ds==13&&a[2].ds==12&&a[3].ds==11&&a[4].ds==10)return 100000000000ll;
	if(tonghua&&a[0].ds==a[1].ds+1&&a[1].ds==a[2].ds+1&&a[2].ds==a[3].ds+1&&a[3].ds==a[4].ds+1)return 90000000000ll+a[0].ds;
	if(tonghua&&a[0].ds==14&&a[1].ds==5&&a[2].ds==4&&a[3].ds==3&&a[4].ds==2)return 90000000005ll;
	if(a[0].ds==a[1].ds&&a[1].ds==a[2].ds&&a[2].ds==a[3].ds)return 80000000000ll+a[0].ds*100+a[4].ds;
	if(a[1].ds==a[2].ds&&a[2].ds==a[3].ds&&a[3].ds==a[4].ds)return 80000000000ll+a[1].ds*100+a[0].ds;
	if(a[0].ds==a[1].ds&&a[1].ds==a[2].ds&&a[3].ds==a[4].ds)return 70000000000ll+a[0].ds*100+a[3].ds;
	if(a[2].ds==a[3].ds&&a[3].ds==a[4].ds&&a[0].ds==a[1].ds)return 70000000000ll+a[2].ds*100+a[0].ds;
	if(tonghua)return 60000000000ll+a[0].ds*100000000+a[1].ds*1000000+a[2].ds*10000+a[3].ds*100+a[4].ds;
	if(a[0].ds==a[1].ds+1&&a[1].ds==a[2].ds+1&&a[2].ds==a[3].ds+1&&a[3].ds==a[4].ds+1)return 50000000000ll+a[0].ds;
	if(a[0].ds==14&&a[1].ds==5&&a[2].ds==4&&a[3].ds==3&&a[4].ds==2)return 50000000005ll;
	if(a[0].ds==a[1].ds&&a[1].ds==a[2].ds)return 40000000000ll+a[0].ds*10000+a[3].ds*100+a[4].ds;
	if(a[1].ds==a[2].ds&&a[2].ds==a[3].ds)return 40000000000ll+a[1].ds*10000+a[0].ds*100+a[4].ds;
	if(a[2].ds==a[3].ds&&a[3].ds==a[4].ds)return 40000000000ll+a[2].ds*10000+a[0].ds*100+a[1].ds;
	if(a[0].ds==a[1].ds){
		if(a[2].ds==a[3].ds)return 30000000000ll+a[0].ds*10000+a[2].ds*100+a[4].ds;
		if(a[3].ds==a[4].ds)return 30000000000ll+a[0].ds*10000+a[3].ds*100+a[2].ds;
	}if(a[1].ds==a[2].ds&&a[3].ds==a[4].ds)return 30000000000ll+a[1].ds*10000+a[3].ds*100+a[0].ds;
	if(a[0].ds==a[1].ds)return 20000000000ll+a[0].ds*1000000+a[2].ds*10000+a[3].ds*100+a[4].ds;
	if(a[1].ds==a[2].ds)return 20000000000ll+a[1].ds*1000000+a[0].ds*10000+a[3].ds*100+a[4].ds;
	if(a[2].ds==a[3].ds)return 20000000000ll+a[2].ds*1000000+a[0].ds*10000+a[1].ds*100+a[4].ds;
	if(a[3].ds==a[4].ds)return 20000000000ll+a[3].ds*1000000+a[0].ds*10000+a[1].ds*100+a[2].ds;
	return 10000000000ll+a[0].ds*100000000+a[1].ds*1000000+a[2].ds*10000+a[3].ds*100+a[4].ds;
}int main(){
	while(1){
		cin>>c1;
		if(c1=='#')break;
		cin>>c2,me[0]={huase(c1),dianshu(c2)},cin>>c1>>c2,me[1]={huase(c1),dianshu(c2)},cin>>c1>>c2,you[0]={huase(c1),dianshu(c2)},cin>>c1>>c2,you[1]={huase(c1),dianshu(c2)};
		for(int i=0;i<3;i++)cin>>c1>>c2,pi[i]={huase(c1),dianshu(c2)};
		int cnt=0;
		for(int i=0;i<4;i++)for(int j=2;j<=14;j++){
			pi[3]={i,j};
			if(pi[0]!=pi[3]&&pi[1]!=pi[3]&&pi[2]!=pi[3]&&me[0]!=pi[3]&&me[1]!=pi[3]&&you[0]!=pi[3]&&you[1]!=pi[3])for(int ii=0;ii<4;ii++)for(int jj=2;jj<=14;jj++){
				pi[4]={ii,jj};
				if(pi[0]!=pi[4]&&pi[1]!=pi[4]&&pi[2]!=pi[4]&&pi[3]!=pi[4]&&me[0]!=pi[4]&&me[1]!=pi[4]&&you[0]!=pi[4]&&you[1]!=pi[4]){
					ll mef=0,youf=0;
					for(int k1=0;k1<5;k1++)for(int k2=k1+1;k2<5;k2++)for(int k3=k2+1;k3<5;k3++)me[2]=pi[k1],me[3]=pi[k2],me[4]=pi[k3],mef=max(mef,f(me));
					for(int k1=0;k1<5;k1++)for(int k2=k1+1;k2<5;k2++)for(int k3=k2+1;k3<5;k3++)you[2]=pi[k1],you[3]=pi[k2],you[4]=pi[k3],youf=max(youf,f(you));
					if(mef>youf)++cnt;
				}
			}
		}printf("%.20lf\n",cnt/1980.);
	}return 0;
}
2024/7/11 10:31
加载中...