社区讨论
德州扑克TLE求优化
AT_icpc2012autumn_bTexas hold 'em参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m60kczml
- 此快照首次捕获于
- 2025/01/17 17:35 去年
- 此快照最后确认于
- 2025/11/04 11:26 4 个月前
CPP
//1.同花顺:五张连续的牌,并且花色相同。
//2.四条:四张相同点数的牌。
//3.满堂红:三张相同点数的牌,加上一对其他点数的牌。
//4.同花:五张花色相同但不连续的牌。
//5.顺子:五张连续的牌,但是花色不同。
//6.三条: 只要有三张相同点数的牌。
//7.两对:两张相同点数的牌,和另外两张相同点数的牌。
//8.一对: 只是一对相同点数的牌。
//9.高牌:任何其他牌。
#pragma GCC optimize(2,3,"Ofast","inline")
#include <bits/stdc++.h>
#define pb(x) push_back(x)
using namespace std;
const string DS="23456789TJQKA";
const string HS="SHDC";
struct pkp{
char hs,ds;
bool operator > (const pkp& x)const{
return DS.find(ds)>DS.find(x.ds);
}
void operator = (const string& s){
hs=s[0],ds=s[1];
}
void operator = (const pkp& x){
hs=x.hs,ds=x.ds;
}
bool operator == (const pkp& x){
if(x.hs==hs && x.ds==ds){
return true;
}
return false;
}
}i1,i2,u1,u2,g1,g2,g3,g4,g5;
struct zh{
pkp p[5],q[5];
int px;
void inline mp(pkp a,pkp b,pkp c,pkp d,pkp e,int f){
p[0]=a,p[1]=b,p[2]=c,p[3]=d,p[4]=e,px=f;
}
void operator = (const zh& x){
for(int i=0;i<5;i++) p[i]=x.p[i];
px=x.px;
}
void inline upd(){
int x[5]={0,1,2,3,4};
do{
int a=x[0],b=x[1],c=x[2],d=x[3],e=x[4];
if(p[a].hs==p[b].hs && p[b].hs==p[c].hs && p[c].hs==p[d].hs && p[d].hs==p[e].hs && DS.find(p[a].ds)-DS.find(p[b].ds)==1 && DS.find(p[b].ds)-DS.find(p[c].ds)==1 && DS.find(p[c].ds)-DS.find(p[d].ds)==1 && DS.find(p[d].ds)-DS.find(p[e].ds)==1 && px>1){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=1;
}
if(p[a].hs==p[b].hs && p[b].hs==p[c].hs && p[c].hs==p[d].hs && p[d].hs==p[e].hs && p[a].ds=='5' && p[b].ds=='4' && p[c].ds=='3' && p[d].ds=='2' && p[e].ds=='A' && px>1){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=1;
}
if(p[a].ds==p[b].ds && p[b].ds==p[c].ds && p[c].ds==p[d].ds && px>2){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=2;
}
if(p[a].ds==p[b].ds && p[b].ds==p[c].ds && p[d].ds==p[e].ds && px>3){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=3;
}
if(p[a].hs==p[b].hs && p[b].hs==p[c].hs && p[c].hs==p[d].hs && p[d].hs==p[e].hs && DS.find(p[a].ds)>=DS.find(p[b].ds) && DS.find(p[b].ds)>=DS.find(p[c].ds) && DS.find(p[c].ds)>=DS.find(p[d].ds) && DS.find(p[d].ds)>=DS.find(p[e].ds) && px>4){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=4;
}
if(DS.find(p[a].ds)-DS.find(p[b].ds)==1 && DS.find(p[b].ds)-DS.find(p[c].ds)==1 && DS.find(p[c].ds)-DS.find(p[d].ds)==1 && DS.find(p[d].ds)-DS.find(p[e].ds)==1 && px>5){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=5;
}
if(p[a].ds=='5' && p[b].ds=='4' && p[c].ds=='3' && p[d].ds=='2' && p[e].ds=='A' && px>5){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=5;
}
if(p[a].ds==p[b].ds && p[b].ds==p[c].ds && DS.find(p[d].ds)>=DS.find(p[e].ds) && px>6){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=6;
}
if(p[a].ds==p[b].ds && p[c].ds==p[d].ds && DS.find(p[a].ds)>=DS.find(p[c].ds) && px>7){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=7;
}
if(p[a].ds==p[b].ds && DS.find(p[c].ds)>=DS.find(p[d].ds) && DS.find(p[d].ds)>=DS.find(p[e].ds) && px>8){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=8;
}
if(DS.find(p[a].ds)>=DS.find(p[b].ds) && DS.find(p[b].ds)>=DS.find(p[c].ds) && DS.find(p[c].ds)>=DS.find(p[d].ds) && DS.find(p[d].ds)>=DS.find(p[e].ds) && px>9){
q[0]=p[a],q[1]=p[b],q[2]=p[c],q[3]=p[d],q[4]=p[e],px=9;
}
}while(next_permutation(x,x+5));
}
};
vector<zh> v1,v2;
signed main(){
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
string s;
while(cin >> s){
if(s=="#"){
return 0;
}
i1=s;
cin >> s;
i2=s;
cin >> s;
u1=s;
cin >> s;
u2=s;
cin >> s;
g1=s;
cin >> s;
g2=s;
cin >> s;
g3=s;
int tot=0,cnt=0;
for(char h1:HS){
for(char d1:DS){
for(char h2:HS){
for(char d2:DS){
string x="";
x+=h1;
x+=d1;
g4=x;
x="";
x+=h2;
x+=d2;
g5=x;
if(g4==i1 || g4==i2 || g4==u1 || g4==u2 || g4==g1 || g4==g2 || g4==g3 || g5==i1 || g5==i2 || g5==u1 || g5==u2 || g5==g1 || g5==g2 || g5==g3 || g5==g4){
continue;
}
tot++;
v1.clear(),v2.clear();
zh y;
y.mp(g1,g2,g3,g4,g5,10ll);
v1.pb(y);
y.mp(i1,i2,g1,g2,g3,10ll);
v1.pb(y);
y.mp(i1,i2,g1,g2,g4,10ll);
v1.pb(y);
y.mp(i1,i2,g1,g2,g5,10ll);
v1.pb(y);
y.mp(i1,i2,g1,g3,g4,10ll);
v1.pb(y);
y.mp(i1,i2,g1,g3,g5,10ll);
v1.pb(y);
y.mp(i1,i2,g1,g4,g5,10ll);
v1.pb(y);
y.mp(i1,i2,g2,g3,g4,10ll);
v1.pb(y);
y.mp(i1,i2,g2,g3,g5,10ll);
v1.pb(y);
y.mp(i1,i2,g2,g4,g5,10ll);
v1.pb(y);
y.mp(i1,i2,g3,g4,g5,10ll);
v1.pb(y);
y.mp(i1,g1,g2,g3,g4,10ll);
v1.pb(y);
y.mp(i1,g1,g2,g3,g5,10ll);
v1.pb(y);
y.mp(i1,g1,g2,g4,g5,10ll);
v1.pb(y);
y.mp(i1,g1,g3,g4,g5,10ll);
v1.pb(y);
y.mp(i1,g2,g3,g4,g5,10ll);
v1.pb(y);
y.mp(i2,g1,g2,g3,g4,10ll);
v1.pb(y);
y.mp(i2,g1,g2,g3,g5,10ll);
v1.pb(y);
y.mp(i2,g1,g2,g4,g5,10ll);
v1.pb(y);
y.mp(i2,g1,g3,g4,g5,10ll);
v1.pb(y);
y.mp(i2,g2,g3,g4,g5,10ll);
v1.pb(y);
y.mp(g1,g2,g3,g4,g5,10ll);
v2.pb(y);
y.mp(u1,u2,g1,g2,g3,10ll);
v2.pb(y);
y.mp(u1,u2,g1,g2,g4,10ll);
v2.pb(y);
y.mp(u1,u2,g1,g2,g5,10ll);
v2.pb(y);
y.mp(u1,u2,g1,g3,g4,10ll);
v2.pb(y);
y.mp(u1,u2,g1,g3,g5,10ll);
v2.pb(y);
y.mp(u1,u2,g1,g4,g5,10ll);
v2.pb(y);
y.mp(u1,u2,g2,g3,g4,10ll);
v2.pb(y);
y.mp(u1,u2,g2,g3,g5,10ll);
v2.pb(y);
y.mp(u1,u2,g2,g4,g5,10ll);
v2.pb(y);
y.mp(u1,u2,g3,g4,g5,10ll);
v2.pb(y);
y.mp(u1,g1,g2,g3,g4,10ll);
v2.pb(y);
y.mp(u1,g1,g2,g3,g5,10ll);
v2.pb(y);
y.mp(u1,g1,g2,g4,g5,10ll);
v2.pb(y);
y.mp(u1,g1,g3,g4,g5,10ll);
v2.pb(y);
y.mp(u1,g2,g3,g4,g5,10ll);
v2.pb(y);
y.mp(u2,g1,g2,g3,g4,10ll);
v2.pb(y);
y.mp(u2,g1,g2,g3,g5,10ll);
v2.pb(y);
y.mp(u2,g1,g2,g4,g5,10ll);
v2.pb(y);
y.mp(u2,g1,g3,g4,g5,10ll);
v2.pb(y);
y.mp(u2,g2,g3,g4,g5,10ll);
v2.pb(y);
for(zh& z:v1){
z.upd();
}
for(zh& z:v2){
z.upd();
}
bool flag=false;
for(zh z1:v1){
bool ok=true;
for(zh z2:v2){
if(z1.px<z2.px){
continue;
}
if(z1.px>z2.px){
ok=false;
break;
}
ok=false;
for(int i=0;i<5;i++){
if(DS.find(z1.q[i].ds)>DS.find(z2.q[i].ds)){
ok=true;
break;
}else if(DS.find(z1.q[i].ds)<DS.find(z2.q[i].ds)){
break;
}
}
}
if(ok) flag=true;
}
if(flag) cnt++;
}
}
}
}
cout << fixed << setprecision(20) << 1.0*cnt/tot << endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...