zoukankan      html  css  js  c++  java
  • mahjong

    题目描述

    “为什么, 你们的力量在哪里得到如此地......”
    “我们比 1 分钟前的我们还要进步, 虽然很微小, 但每转一圈就会前进一寸。这就是钻头啊!”
    “那才是通向毁灭的道路。为什么就没有意识到螺旋族的极限”
    “那是你的极限。那只不过是在封闭的宇宙里, 象国王一样将其他生命困住的你自己的极限而已。给
    我记好了, 我们的钻头将在这片宇宙中钻开风洞。已经倒下的人们的愿望, 和后继迩来的人们的希望。将
    这两股思念交织成二重螺旋, 凿出驰骋于明天的未来之路。这就是天元突破! 这就是 Gurren Lagann! 我
    的钻头是开创天际的钻头!”
    终于,GranzeBorma 爆炸了。
    “那么, 这片宇宙, 一定要保护好......”
    西蒙回答了 Anti-Spiral 这最后的一句话。
    “那是当然。人类还没有愚蠢到那种地步”
    Anti-Spiral 的终结, 化做为银河各地的螺旋族欢喜的信息, 从四面八方传来。
    ——在那这之后要说的话, 也所剩无几了。
    回到地球后的妮亚与西蒙结了婚, 并且永远地离开了, 因为她是由 Anti-Spiral 创造出来的假想生命。
    但是在离别的那一瞬间, 妮亚与西蒙依然互相微笑着。
    时光飞逝, 在地球大总统罗修的努力下, 全银河螺旋力和平利用会议得以召开。超银河大 Gurren 承
    载着地球的代表踏上旅途。还有通过新闻, 想起与大家的种种回忆的昔日大 Gurren 团的成员。
    然后——
    在一个远离市区的地方, 有一个男人教会了少年使用钻头的方法。
    夜空中,Gurren Lagann 画出螺旋的轨道, 从男人与少年的头顶飞过。
    在那前方, 螺旋的朋友们正在那片群星中等待着我们。
    终于有一天,在这颗古老的星球上诞生了一种了不起的游戏——mahjong
    游戏只使用万、筒、条三种花色,即以下 27 种牌面:
    每一种牌面各有 4 张,总计 108 张牌。
    胡牌的牌型为 4 个“句子”和 1 副“将牌”。

    句子一共以下有两种形式: • 三张相同花色且连续的牌,如图1 • 三张相同的牌,如图2 图1 图2 将牌:两张相同的牌,如: 当手牌构成 4 个“句子”和 1 副“将牌”时则构成胡牌牌型,如: 听牌:当 13 张手牌再加上某一张就能成胡牌牌型时称之为听牌,如: 听牌时再加上某一张就能胡牌,那我们就称那张牌是听的牌 如图牌型就听三、六条 现在你手中有 14 张牌,求打出第几张牌会使得你听得牌的张数最多,最多听多少张牌

    搜索即可,暴力枚举丢掉哪张牌...每种牌爆搜判断过去

    意会一下...代码有注释(tong[][]是一个桶数组)

     1 #include<cstdio>
     2 #include<queue>
     3 #include<iostream>
     4 #include<cstring>
     5 using namespace std;
     6 inline int read(){
     7     int ans=0,f=1;char chr=getchar();
     8     while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
     9     while(isdigit(chr)){ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
    10     return ans*f;
    11 }const int n=14;
    12 struct P{int cnt,typ,num;char p;}a[50];
    13 int tong[4][25],ans1,ans2;
    14 bool dfs(int a,int b,int c,int d){//a--->两个相同牌个数 b--->牌型 c--->将 d--->句子 
    15     if(a>=3) return 0;
    16     bool ff;int fa,fb;
    17     if(c==1&&d==4) return 1;
    18     if(b==9) fb=1,fa=a+1;else fb=b+1,fa=a;//下一个牌型 
    19     if(tong[a][b]>=2&&!c){//当将牌用
    20         tong[a][b]-=2;
    21         ff=dfs(a,b,1,d);
    22         tong[a][b]+=2;
    23         if(ff) return 1;
    24     }if(tong[a][b]>=3){//当句子用 
    25         tong[a][b]-=3;
    26         ff=dfs(fa,fb,c,d+1);
    27         tong[a][b]+=3;
    28         if(ff) return 1;
    29     }if(b>2&&tong[a][b]&&tong[a][b-1]&&tong[a][b-2]){//当对子(要加上一个)用 
    30         tong[a][b]--,tong[a][b-1]--,tong[a][b-2]--;
    31         ff=dfs(a,b,c,d+1);
    32         tong[a][b]++,tong[a][b-1]++,tong[a][b-2]++;
    33         if(ff) return 1;
    34     }return dfs(fa,fb,c,d);
    35 }
    36 inline bool hu(){
    37     int a=0,b=0;
    38     for(int i=1;i<=n;++i){
    39         for(int j=0;j<3;j++){
    40             if(tong[j][i]==3) a++;
    41             if(tong[j][i]==2) b++;
    42         }
    43     }
    44     if(a==4&&b==1) return 1;
    45     return 0;
    46 }
    47 int main(){
    48     for(int i=1,x;i<=n;++i){
    49         cin>>x;char chr=getchar();
    50         a[i].num=x;
    51         if(chr=='p') a[i].typ=2;
    52         else if(chr=='w') a[i].typ=1;
    53         else a[i].typ=0;
    54         ++tong[a[i].typ][a[i].num];
    55     }int pp=0;
    56     if(hu()) pp=-1;
    57     for(int i=1,pp;i<=n;++i){pp=0;
    58         --tong[a[i].typ][a[i].num];
    59         for(int j=0;j<=2;++j)
    60             for(int k=1;k<=9;++k){
    61                 ++tong[j][k];
    62                 if(dfs(0,1,0,0)) pp+=5-tong[j][k];
    63                 tong[j][k]--;
    64             }++tong[a[i].typ][a[i].num];
    65         if(pp>ans1) ans1=pp,ans2=i;
    66     }
    67     cout<<ans2<<" "<<ans1+pp;
    68     return 0;
    69 }
    70 /*
    71 1p 1p 1p 2w 2w 2w 3w 3w 3w 1s 1s 1s 2s 2s
    72 13 7
    73 */
    74 /*
    75 1p 1p 1p 2w 2w 2w 3w 3w 3w 1s 1s 1s 6s 6s
    76 1 3
    77 */
  • 相关阅读:
    常用类型转换
    配置相关的一些辅助类
    Java Class与反射相关的一些工具类
    一些中文相关的操作方法
    提供一些对象有效性校验的方法
    编码相关的封装类
    数组相关的工具类
    提供Web相关的个工具类
    URL相关的工具类
    经纬度相关的一些操作
  • 原文地址:https://www.cnblogs.com/zhenglw/p/10670358.html
Copyright © 2011-2022 走看看