建设网站毕业设计开题报告,做网站有谁做,龙之向导外贸论坛,最近发生的国内热点事件2021牛客OI赛前集训营-提高组#xff08;第三场#xff09;
题目大意
小A和小B在玩扑克牌游戏#xff0c;规则如下#xff1a;
从一副52张牌#xff08;没有大小王#xff09;的扑克牌中随机发3张到每个玩家手上#xff0c;每个玩家可以任意想象另外两张牌#xff0…2021牛客OI赛前集训营-提高组第三场
题目大意
小A和小B在玩扑克牌游戏规则如下
从一副52张牌没有大小王的扑克牌中随机发3张到每个玩家手上每个玩家可以任意想象另外两张牌与自己手上的牌组成5张牌已构成最大的手牌。
两幅手牌比较大小的规则如下 如果牌型一致则按关键牌组来比较。
小A可以知道小B手中的牌。小A决定对于每一次游戏都想象出一副刚刚好能赢小B的牌。请你告诉小A这两张牌分别是什么或告诉他无法取胜。 题解
注意事项
玩家可以想象对方有的牌但不能想象自己有的牌小A的牌要在能赢小B的基础上尽量小如果有两种花色都能赢小B则优先选择花色小的
一些简化
因为无论三张牌如何都至少可以通过想象得到三条所以两对一对和高牌可以不用考虑
做法
在不考虑花色的情况下暴力枚举出所有五元组五元组的数量并不多。然后将五元组排序再求出所有三元组。
对于每次询问将三元组对应的五元组进行比较再考虑花色的影响即可得出答案。
code
#includebits/stdc.h
using namespace std;
int t,c1,vd,mxa,mxb,va,vb,sc,fl,ip[205],icl[205],z[20],zh[20],zp[10][20];
int tot0,d[500005],l[500005],r[500005];
char op[20],ocl[10];
void add(int xx,int yy){l[tot]r[xx];d[tot]yy;r[xx]tot;
}
struct node{int x,y;
}a[10],b[10];
struct five{int val,sh,a[10];
}w,ans,v[50005];
void init(){for(int i2;i9;i){ip[i0]i;op[i]i0;}ip[T]10;ip[J]11;ip[Q]12;ip[K]13;ip[A]14;op[10]T;op[11]J;op[12]Q;op[13]K;op[14]A;icl[S]4;icl[H]3;icl[C]2;icl[D]1;ocl[4]S;ocl[3]H;ocl[2]C;ocl[1]D;
}
void dfs(int t,int now){for(int inow;i14;i){if(z[i]4){w.a[t]i;z[i];if(t5) dfs(t1,i);else v[vd]w;--z[i];}}
}
bool four_of_a_kind(){if(w.a[2]w.a[3]w.a[3]w.a[4]){if(w.a[1]w.a[2]||w.a[4]w.a[5]) return 1;}return 0;
}
bool full_house(){if(w.a[1]w.a[2]w.a[2]w.a[3]w.a[4]w.a[5]) return 1;if(w.a[1]w.a[2]w.a[3]w.a[4]w.a[4]w.a[5]) return 1;return 0;
}
bool three_of_a_kind(){if(w.a[1]w.a[2]w.a[2]w.a[3]) return 1;if(w.a[2]w.a[3]w.a[3]w.a[4]) return 1;if(w.a[3]w.a[4]w.a[4]w.a[5]) return 1;return 0;
}
void gt(){if(w.a[1]1w.a[2]w.a[2]1w.a[3]w.a[3]1w.a[4]w.a[4]1w.a[5]) w.sh1;if(four_of_a_kind()){w.val7e8w.a[3]*14;if(w.a[1]!w.a[3]) w.valw.a[1];else w.valw.a[5];}else if(full_house()){if(w.a[3]w.a[1]) w.val6e8w.a[3]*15w.a[5];else w.val6e8w.a[3]*15w.a[1];}else if(w.sh) w.val4e8w.a[1];else if(three_of_a_kind()){w.val3e8w.a[3]*15*15;if(w.a[1]w.a[2]w.a[2]w.a[3]) w.valw.a[5]*15w.a[4];else if(w.a[2]w.a[3]w.a[3]w.a[4]) w.valw.a[5]*15w.a[1];else w.valw.a[2]*15w.a[1];}
}
int find(int w1,int w2,int w3){return w1*15*15w2*15w3;
}
int dd(int g1,int g2,int w1,int w2,int w3){if(g2w1){swap(g2,w1);if(w1w2){swap(w1,w2);if(w2w3) swap(w2,w3);}}if(g1g2){swap(g1,g2);if(g2w1){swap(g2,w1);if(w1w2){swap(w1,w2);if(w2w3) swap(w2,w3);}}}if(w31w2w21w1w11g2g21g1) return 1e8w3;return g1*15*15*15*15g2*15*15*15w1*15*15w2*15w3;
}
void pt(){for(int i1;i4;i) zh[i]0;for(int i2;i14;i) z[i]0;z[a[1].y];zh[a[1].x];zp[a[1].x][a[1].y];z[a[2].y];zh[a[2].x];zp[a[2].x][a[2].y];z[a[3].y];zh[a[3].x];zp[a[3].x][a[3].y];for(int i5;i1;i--){if(z[ans.a[i]]) --z[ans.a[i]];else{if(fl) zp[a[1].x][ans.a[i]]1;else{for(int j1;j4;j){if(!zp[j][ans.a[i]]zh[j]4){zh[j];zp[j][ans.a[i]]1;break;}}}}}for(int i2;i14;i){for(int j4;j1;j--){if(zp[j][i]){printf(%c%c ,ocl[j],op[i]);zp[j][i]0;}}}
}
int main()
{init();dfs(1,2);for(int i1;ivd;i){wv[i];gt();v[i]w;add(find(w.a[1],w.a[2],w.a[3]),i);add(find(w.a[1],w.a[2],w.a[4]),i);add(find(w.a[1],w.a[2],w.a[5]),i);add(find(w.a[1],w.a[3],w.a[4]),i);add(find(w.a[1],w.a[3],w.a[5]),i);add(find(w.a[1],w.a[4],w.a[5]),i);add(find(w.a[2],w.a[3],w.a[4]),i);add(find(w.a[2],w.a[3],w.a[5]),i);add(find(w.a[2],w.a[4],w.a[5]),i);add(find(w.a[3],w.a[4],w.a[5]),i);}char ch[5];scanf(%d,t);while(t--){flsc0;for(int i1;i3;i){scanf(%s,ch);a[i](node){icl[ch[0]],ip[ch[1]]};}if(a[1].xa[2].xa[2].xa[3].x) sc1;for(int i1;i3;i){scanf(%s,ch);b[i](node){icl[ch[0]],ip[ch[1]]};}mxb0;vb0;int vtfind(b[1].y,b[2].y,b[3].y);for(int ir[vt];i;il[i]){mxbmax(mxb,v[d[i]].val);vb|v[d[i]].sh;}if(b[1].xb[2].xb[2].xb[3].x){int g10,g[20];for(int i14;i2;i--){if(i!b[1].yi!b[2].yi!b[3].y){g[g1]i;if(g12) break;}}mxbmax(mxb,500000000dd(g[1],g[2],b[3].y,b[2].y,b[1].y));if(vb){mxb9e8min(10,b[1].y);if(b[1].y10) mxb1e9;}}mxa2e9;va0;vtfind(a[1].y,a[2].y,a[3].y);for(int ir[vt];i;il[i]){if(v[d[i]].valmxbv[d[i]].valmxa){mxav[d[i]].val;ansv[d[i]];}va|v[d[i]].sh;}if(a[1].xa[2].xa[2].xa[3].x){int g10,g[20];for(int i14;i2;i--){if(i!a[1].yi!a[2].yi!a[3].y) g[g1]i;}for(int i1;ig1;i){for(int ji1;jg1;j){vt5e8dd(g[i],g[j],a[3].y,a[2].y,a[1].y);if(vtmxbvtmxa){mxavt;fl1;ans.a[1]a[1].y;ans.a[2]a[2].y;ans.a[3]a[3].y;ans.a[4]g[j];ans.a[5]g[i];}}}if(va){for(int imin(10,a[1].y);i4max(a[3].y,6);i--){vt9e8i;if(i10) vt1e9;if(vtmxbvtmxa){mxavt;fl1;ans.a[1]i;ans.a[2]i1;ans.a[3]i2;ans.a[4]i3;ans.a[5]i4;}}}}if(mxa2e9) printf(-1);else pt();printf(\n);}return 0;
}