全民斗地主的游戏规则具体规则和花色??

本地人就要一起玩
浙江畅唐网络股份有限公司版权所有(C)2004-
浙网文[1号
增值电信业务经营许可证:浙B2-
文网游备字[2014]M-CBG136号4325: NOIP2015 斗地主
Time Limit:&30 Sec&&Memory Limit:&1024 MBSubmit:&270&&Solved:&192[][][]
Description
&牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A到K加上大小王的共54张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:3&4&5&6&7&8&9&10&J&Q&K&A&2&小王&大王,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由n张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以将它们打光。请你帮他解决这个问题。需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:
第一行包含用空格隔开的2个正整数T,N,表示手牌的组数以及每组手牌的张数。
接下来T组数据,每组数据N行,每行一个非负整数对Ai,Bi,表示一张牌,其中Ai表示牌的数码,Bi表示牌的花色,中间用空格隔开。特别的,我们用1来表示数码A,11表示数码J,12表示数码Q,13表示数码K;黑桃、红心、梅花、方片分别用1-4来表示;小王的表示方法为01,大王的表示方法为02。
共T行,每行一个整数,表示打光第T组手牌的最少次数。
Sample Input
Sample Output
&共有1组手牌,包含8张牌:方片7,方片8,黑桃9,方片10,黑桃J,黑桃5,方
片A以及黑桃A。可以通过打单顺子(方片7,方片8,黑桃9,方片10,黑桃J),单张
牌(黑桃5)以及对子牌(黑桃A以及方片A)在3次内打光。
&&&&&& 搜索+剪枝
&&&&&& 忽略花色,统计每种码数出现次数方便出牌。
&&&&&& 每次都先出顺子,对于手中剩下的牌我们贪心地将剩下的组合牌需要打的次数计算出来,然后更新ans以剪枝。
&&&&&& 双王算作对牌。顺排不包括2和双王。
1 #include&cstdio&
2 #include&cstring&
3 #define FOR(a,b,c) for(int a=(b);a&=(c);a++)
4 using namespace
6 const int N = 25;
8 int a[N],c[N];
9 int n,T,
11 int Qans() {
memset(c,0,sizeof(c));
FOR(i,0,13) c[a[i]]++;
int tot=0;
while(c[4]&&c[2]&1)
c[4]--,c[2]-=2,tot++;
while(c[4]&&c[1]&1) c[4]--,c[1]-=2,tot++;
while(c[4]&&c[2]) c[4]--,c[2]--,tot++;
while(c[3]&&c[2]) c[3]--,c[2]--,tot++;
while(c[3]&&c[1]) c[3]--,c[1]--,tot++;
return tot+c[1]+c[2]+c[3]+c[4];
//带牌+三张 对子 单张
23 void dfs(int now) {
if(now&=ans) return ;
int tmp=Qans();
if(now+tmp&ans)
FOR(i,2,13) {
while(a[j]&=3) j++;
if(j-i&=2) {
FOR(j2,i+1,j-1) {
FOR(k,i,j2) a[k]-=3;
dfs(now+1);
FOR(k,i,j2) a[k]+=3;
FOR(i,2,13) {
while(a[j]&=2) j++;
if(j-i&=3) {
FOR(j2,i+2,j-1) {
FOR(k,i,j2) a[k]-=2;
dfs(now+1);
FOR(k,i,j2) a[k]+=2;
FOR(i,2,13) {
while(a[j]&=1) j++;
if(j-i&=5) {
FOR(j2,i+4,j-1) {
FOR(k,i,j2) a[k]--;
dfs(now+1);
FOR(k,i,j2) a[k]++;
62 int main() {
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
scanf("%d%d",&T,&n);
while(T--) {
memset(a,0,sizeof(a));
FOR(i,1,n) {
scanf("%d%d",&x,&y);
if(x==1) x=13; else if(x) x--;
printf("%d\n",ans);题目描述牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A 到K 加上大小王的共54 张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:3&4&5&6&7&8&9&10&J&Q&K&A&2&小王&大王,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由n 张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以将它们打光。请你帮他解决这个问题。需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:
输入第一行包含用空格隔开的2 个正整数T,N,表示手牌的组数以及每组手牌的张数。接下来T 组数据,每组数据N 行,每行一个非负整数对Ai,Bi,表示一张牌,其中Ai表示牌的数码,Bi 表示牌的花色,中间用空格隔开。特别的,我们用1 来表示数码A,11表示数码J,12 表示数码Q,13 表示数码K;黑桃、红心、梅花、方片分别用1-4 来表示;小王的表示方法为01,大王的表示方法为02。输出输共T 行,每行一个整数,表示打光第T 组手牌的最少次数。
真是宇宙无敌大暴搜............(ps:反正我是对着测试点一个一个改过来的........)
不应该是状压:wxh和wq神犇都用状压,反正没改出来
牌型只有三种:1.顺子 2.带牌 3.单牌/对牌 &(火箭也算对牌)
1.出牌的顺序不会影响答案
2.先搜顺子可以剪更多的枝,而且搜完顺子后,带牌和 单牌/对牌 可以用贪心求出
先 暴搜顺子 &枚举 &单/双/三顺子 &左端点 &右端点
之后用贪心求 其他牌型 &(情况可能会很多.......)
我说说我遇到的坑点:
1.A可以当顺子
2.有不出顺子的出牌方式
3.4个2可以带2个王
4.注意贪心时 判断的优先级
5.4张牌 可以带两个相同的 单/对牌 &例如:4个3 带4个2/带对2
这真是一个好题,不能浪费啊..
1 #include&cstdio&
2 #include&cstring&
3 #include&iostream&
4 #include&vector&
5 #define ll long long
6 #define mem(a,b) memset(a,b,sizeof(a))
7 using namespace
8 inline int minn(int a,int b){return a&b?a:b;}
10 int t,n;
11 int u,o,
12 int a[<span style="color: #];
13 int limit[<span style="color: #]={<span style="color: #,<span style="color: #,<span style="color: #,<span style="color: #};
15 void clear()
mem(a,<span style="color: #);
20 bool check(int l,int size)
if(l+limit[size]-<span style="color: #&<span style="color: #)return <span style="color: #;
for(int i=l+limit[size]-<span style="color: #;i&=l;--i)
if(a[i]&size)return <span style="color: #;
return <span style="color: #;
28 void dfs(int now)
for(int size=<span style="color: #;size&=<span style="color: #;++size)
for(int l=<span style="color: #;l&=<span style="color: #;++l)
if(!a[l])continue;
if(!check(l,size))continue;
for(int r=l+limit[size]-<span style="color: #;r&=<span style="color: #;++r)
if(a[r]&size)break;
for(int k=l;k&=r;++k)
dfs(now+<span style="color: #);
for(int k=l;k&=r;++k)
int temp[<span style="color: #];
memcpy(temp,a,sizeof(temp));
int num1=<span style="color: #,num2=<span style="color: #,num3=<span style="color: #,num4=<span style="color: #;
for(int i=<span style="color: #;i&=<span style="color: #;++i)
if(temp[i]==<span style="color: #)++num1;
else if(temp[i]==<span style="color: #)++num2;
else if(temp[i]==<span style="color: #)++num3;
else if(temp[i]==<span style="color: #)++num4;
while(num4)
if(num1&=<span style="color: #){num1-=<span style="color: #;++--num4;continue;}
if(num1==<span style="color: #)
if(num2&=<span style="color: #){num2-=<span style="color: #;--num4;++continue;}
if(temp[<span style="color: #]){--num1;--temp[<span style="color: #];--num4;++continue;}
if(num2){--num2;--num4;++continue;}
if(num1==<span style="color: #)
if(num2&=<span style="color: #){num2-=<span style="color: #;--num4;++continue;}
if(temp[<span style="color: #]==<span style="color: #){temp[<span style="color: #]=<span style="color: #;--num4;++continue;}
if(temp[<span style="color: #]==<span style="color: #)
if(num2){--temp[<span style="color: #];--num2;++num1;--num4;++continue;}
while(num3)
if(num1){--num1;--num3;++continue;}
if(temp[<span style="color: #]){--temp[<span style="color: #];--num3;++continue;}
if(num2){--num2;--num3;++continue;}
if(temp[<span style="color: #]==<span style="color: #){temp[<span style="color: #]=<span style="color: #;++}
int qw=<span style="color: #;
if(num4&=<span style="color: #)
while(num4&=<span style="color: #){num4-=<span style="color: #;++}//<span style="color: #带两个相同的对
bushu=minn(now+num1+num2+num3+num4+temp[<span style="color: #]+qw,bushu);
93 int main(){
scanf("%d%d",&t,&n);
while(t--)
for(int i=<span style="color: #;i&=n;++i)
<span style="color: #0
scanf("%d%d",&u,&o);
<span style="color: #1
if(!u)++a[<span style="color: #];
<span style="color: #2
<span style="color: #3
if(u==<span style="color: #)
<span style="color: #4
++a[<span style="color: #];
<span style="color: #5
<span style="color: #6
++a[u-<span style="color: #];
<span style="color: #7
<span style="color: #8
bushu=<span style="color: #x7fffffff;
<span style="color: #9
dfs(<span style="color: #);
<span style="color: #0
printf("%d\n",bushu);
<span style="color: #1
<span style="color: #2
//while(1);
<span style="color: #3
return <span style="color: #;
<span style="color: #4 }
阅读(...) 评论()斗地主,是一种在中国流行的纸牌游戏,是关于旧社会阶级斗争详见土地改革运动。 斗地主是一种扑克游戏。游戏最少由3个玩家进行,用一副54张牌(连鬼牌),其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜。斗地主起源于湖北武汉汉阳一带,是职业扑克专家严军和他的同伴们根据当地流行的扑克玩法“跑得快”改编的。当初有一群“跑得快”痴迷者,经常在人数不足的情况下玩三个人的“跑得快”,起初并不叫斗地主,他们圈内的人叫“二打一”。最初的“二打一”总共54张牌,每个玩家发18张牌,不留三张底牌,只是一个玩家从另外的两个玩家手里各随机抽取一张牌,被抽牌的玩家共同协作对付抽牌的玩家,这样慢慢演变成了“斗地主”。斗地主首先命名的牌型是飞机,然后是火箭,1995年,“二打一”正式命名为“斗地主”。如今已风靡整个中国,并流行于互联网上。斗地主、德克萨斯扑克及百家乐是世界上三种最流行的扑克游戏。分享一个技巧心态,不要和牌友争吵,即便是他出错了一张牌,也不要骂人。以乐观的态度去面对,会赢的。面对面金币高级场斗地主和任何游戏一样,必须讲究运气,也就是说运气第一,但是有很多种不是很好的牌型,通过一定的技术,是可以反败为胜的,这说明斗地主技术成份还是非常重要,这也是它的魅力所在。
当前位置: &
& 斗地主是什么时候开始的
斗地主是什么时候开始的
来源:精品棋牌
1816次浏览
斗地主是什么时候开始的
& & & &斗地主&是起源于湖北一带的一种扑克游戏,由于其玩法简单、娱乐性强、老少皆宜的特点,使其很快风靡全国各地。武汉斗地主是在普通斗地主玩法的基础上引入了麻将中&混&的概念,使得游戏过程更加变化莫测、更具刺激性。详细规则&&&&&&发牌&&&&一副牌,留三张底牌,其余发给三家,底牌叫牌后加到地主手中。&&&&
& & & 叫牌&&&&叫牌按出牌顺序轮流开始叫牌,每人只能叫一次,叫牌可叫&1分&、&2分&、&3分&或不叫,所叫的分数为&叫牌的底分&,分数叫的高赢的多,输的也多。叫完后叫的最大分的为地主,如果都选择不叫牌,重新发牌,然后重新开始叫牌。&&&&&&
& & & 出牌&&&&首先将三张底牌交给地主,三张底牌所有人都能看到。由地主开始出牌,然后按逆时针顺序依次出牌,轮到用户跟牌时,用户可按左上方Pass按钮表示不跟或按Search按规则查找然后按出牌按钮出牌。直至某一方牌出完就结束此局。&&&&&&牌型&&&&&&火箭:即双王(双鬼牌),什么牌型都可打,是最大的牌。&&&&&&
& & & 炸弹:四张同数值牌(如四个5)。除火箭和比自己大的炸弹外,什么牌型都可打。&&&&&&单牌(一手牌):单个牌。&&&&&&对牌(一手牌):数值相同的两张牌。&&&&&&三张牌:数值相同的三张牌(如三个10)。&&&&&&三带一手:数值相同的三张牌+&一张单牌或一对牌。例如:&333+4或333+44&&&&&&&单顺:五张或更多的连续单牌(如:3J)。不包括2点和双王,不分花色。&
& & & 双顺:三对或更多的连续对牌(如:991010JJ)。不包括2点和双王。&&&&&&三顺:二个或更多的连续三张牌(如:)。不包括2点和双王。也叫飞机不带翅膀。
& & & 飞机带翅膀。三顺+同数量的一手牌。例如:&或7799。&&&&&&四带二:四张牌+两手牌。例如:或&。&&&&&&混牌:&&&&一般有1张混、2张混、4张混这三种带混玩法(具体哪些牌是混请留意游戏房间说明):&&&&&1张混:选取红桃3,红桃7或者红桃2做混&&&&&2张混:红桃3、方块3或者红桃7、方块7做混&&&&
& & & 4张混:全部的3或7&&&&混可以替代除大小王外的3、4、5、6、7、8、9、10、J、Q、K、A、2组成任意牌型,且与同样牌型、点数的非混代牌大小完全相等,但是单独出(包含单张和纯混牌的对、三同张、四同张)则只能做为原本的牌张使用。&&&&&&
& & & 牌型的大小&&&&&&火箭是最大的牌。炸弹,除火箭和比自己大的炸弹外,比其它牌型都大。对一般牌型而言,只有当牌型相同和总张数相同的牌,才可比较大小。其中像三带一、三带二、飞机带翅膀等组合牌型,只要比较其牌数最多牌值就行。只有比当前出的牌(场牌)大的牌才能出。&&&&&&&计分规则&&&&&&基础分:叫牌的底分;&&&&&&地主胜:地主得&2&叫牌的底分。其余两家各得:-叫牌的底分;&&&&&&地主败:地主得-2&叫牌的底分。其余两家各得:叫牌的底分;&
& & & 个混玩法中每出一个炸弹或火箭,乘2倍;2个混或4个混玩法中,每出一&&个有混的炸弹乘2倍,无混炸弹或火箭乘4倍;&&&&&&地主把牌出完,两家一张都没出,分数&2;&&&&&&两家有一家出完,地主除首轮领牌外未出过一手牌,分数&2。&&&&&&逃跑罚分&&&&游戏中逃跑或被室主扣分踢出游戏时,由系统自动识别是否处于得分加倍房间,并统计三家手中所有已出和未出&&炸弹&(未出炸弹不包含通过指定混牌组成的有混炸弹)的数量进行扣分。
& & & &地主&逃跑或在未确定&地主&前逃跑,扣分加倍。具体的计算公式是:&&&&斗地主普通房间强退逃跑扣分计算公式:&&&&3(叫牌最高分)&2(强退加倍)&(&炸弹&数量的乘倍数)&&&&若逃跑者是地主或地主还未确定,则扣分加倍&&&&&&输赢判定&&&&得正分者计赢1盘,得负分者计输1盘。
K3K斗地主9.6分
推荐理由:
包含斗地主经典玩法、包厢玩法、比赛场玩法的集合版本想教老外斗地主,但是斗地主的规则应该怎样和老外讲呢_百度知道
想教老外斗地主,但是斗地主的规则应该怎样和老外讲呢
我有更好的答案
先弄清扑克用语,例如四个花色spade heart diamond club,非数字从大到小joker ace king queen jack不用把咱们的术语翻译给他们,只需告诉他们大小比较的规则,比方说,外国人对扑克的认识是有花色的,花色是不一样大的,你可以告诉他们斗地主里面可以无视花色。但是有顺子(straight)。地主可以叫做庄家(banker)这类等等。
采纳率:82%
来自团队:
你不会英文我也没什么办法了
就是想问你应该咋说
上网找一下斗地主规则,然后翻译
为您推荐:
其他类似问题
斗地主的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 两副牌四人斗地主规则 的文章

 

随机推荐