hdu 4431 Mahjong
3391也是差不多的题,但是没有字牌应该简单一点.
我说这个题是一个暴力应该没什么问题,就是判断的时候非常麻烦.

题意

说说打的是日本麻将,不过好像中国的麻将也都是这么玩的.

不超过20000组数据,每组数据给你一手13张麻将牌,你要摸一张牌.问你摸哪些牌来能胡.如果这手牌还没有听牌输出"Nooten".

思路

思路很简单了,枚举摸上来哪一张牌然后判断能不能胡.七对子和十三幺应该也是比较好特判的.
实现上稍微有点难度.

/*
七对子十三幺可以直接判,其它情况先枚举哪一对是将牌,然后判断剩下的牌能否组成4组.
注意不能杠,所以已经摸到4张的牌就不能判了.
如果使用搜索算法,必须要有非常强大的剪枝.这题的剪枝非常的多,随便就可以剪掉很大一部分.
*/
#include<bits/stdc++.h>
using namespace std;
int s[40],t,res[99];//s[]是桶,存放每种牌有几张.int qidui()//七对子:必须有7种牌,每种牌各两张(豪华七对?不存在的)
{
int r=0,i;
for (i=1;i<=34;++i) r+=s[i]==2;
return r==7;
}int shisanyao()//十三幺:一九万,一九条,一九筒,字牌必须都有,其它牌必须都没有
{
int i;
for (i=2;i<=8;++i) if (s[i]) return 0;
for (i=11;i<=17;++i) if (s[i]) return 0;
for (i=20;i<=26;++i) if (s[i]) return 0;
for (i=28;i<=34;++i) if (!s[i]) return 0;
return s[1]&&s[9]&&s[10]&&s[18]&&s[19]&&s[27];
}int qita()
{
int tmp[40],i;
memcpy(tmp,s,sizeof s);//把s复制给tmp
for (i=1;i<=34;i++){if (tmp[i]>=3) tmp[i]-=3;//刻子可以直接去掉,如果它能组成顺子的话肯定已经在前面被贪心的选掉了.for (;tmp[i];){if (i<=27&&i%9<=7&&i%9!=0&&tmp[i]&&tmp[i+1]&&tmp[i+2]) --tmp[i],--tmp[i+1],--tmp[i+2]; //字牌不能组成顺子,只能枚举到7这么大else return 0;}}
return 1;
}int hu()//枚举将牌
{
int w=0,i;
for (i=1;i<=34;++i) if (s[i]>1)//大于等于两张{s[i]-=2;//去掉if (qita()) return s[i]+=2,1;//判断其它牌s[i]+=2;//回溯}
return 0;
}//一万到九万用1-9表示,一条到九条用10-18表示,一筒到九筒用19-27表示,字牌用28-34表示.
int main()
{
int i;
for (scanf("%d",&t);t--;puts("")){memset(s,0,sizeof s);for (i=0;i<13;i++){char c[9];scanf("%s",c);s[c[0]-48+(c[1]=='s'?1:c[1]=='p'?2:c[1]=='c'?3:0)*9]++;//搞一下放入桶}int ans=0;for (i=1;i<35;++i) if (s[i]<4)//枚举摸上来不超过4张的牌{++s[i];//把这张牌摸进来if (hu()||qidui()||shisanyao()) res[++ans]=i;//符合胡的条件它就是一个解--s[i];//回溯}if (!ans) printf("Nooten");//没有答案.else //输出答案{printf("%d",ans);for (i=1;i<=ans;++i){int t=res[i];if (t<=9) printf(" %dm",t);else if (t<=18) printf(" %ds",t-9);else if (t<=27) printf(" %dp",t-18);else printf(" %dc",t-27);}}}
}

这题恶心极了,但麻将毕竟是国粹,搞一搞也未必是坏事.

hdu 44313391 Mahjong 枚举,判断相关推荐

  1. 蓝桥杯枚举+判断结果填空:猜年龄/奇妙数字

    思路:两重for循环+判断(不妨设小明妹妹不超过20岁) #include<bits/stdc++.h> using namespace std;int main() {for(int i ...

  2. hdu 5340(manacher+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5340 解题思路:首先用manacher处理每个字符,接下来就是要枚举了. 首先是我想到的dp,dp[i ...

  3. hdu 5285(染色法判断二分图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5285 解题思路:很明显的是二分图的判定,用染色法即可. 不过这题有一个坑,当n<=1和m=0时要 ...

  4. hdu 5247(RMQ+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 解题思路:这道题要求区间的连续性,可以用RMQ解决.首先可以确定的是如果区间的和必须是满足等差数 ...

  5. hdu 2444(二分图的判断以及求最大匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2444思路:首先要判断能否构成二分图,用bfs对当前点u染色,对u的邻接点v的颜色进行判断,如果为染色, ...

  6. hdu 5265(二分+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5265 解题思路: 首先对每个数进行去模,这样得到的数就会是[0,p-1]的范围,接下来就是如何组合的问 ...

  7. 【CodeForces - 569C】Primes or Palindromes? (思维,分析范围,暴力枚举判断)

    题干: Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are ...

  8. The Little Girl who Picks Mushrooms HDU - 4422 (枚举暴力)

    题目描述:5个包,已经有n个包里装了东西,还要继续往剩下的包里装东西(想装多少装多少).返程要经过两个过程,一是要交出3个东西数量之和恰好为1024整数倍的包:二是剩下两个包的东西每次都会被偷1024 ...

  9. HDU Redraw Beautiful Drawings 判断最大流是否唯一解

    点击打开链接 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 ...

最新文章

  1. OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理
  2. 英语中十二个月份的由来
  3. Hibernate-HQL基础
  4. 老外用的文件服务器,云存储服务市场乱战 老外到底都用啥
  5. 开机启动项_开机时出现“checking media presence”
  6. java 创建存储过程_如何在pl/sql中创建及调用JAVA存储过程 | 学步园
  7. linux中安装mysql_Linux下安装MySQL
  8. ETL转换工具 kettle——spoon 安装 使用
  9. 超级详细的pytest测试和allure测试报告
  10. 前端实现PDF预览打印
  11. 孟云飞 :一代通才 自成家数——赵之谦的艺术人生
  12. 中国物流市场趋势报告、技术动态创新及市场预测
  13. 使用 Python 脚本执行国密 sm2 加解密
  14. 【dqmp项目笔记】
  15. 从代理模式再出发!Proxy.newProxyInstance的秘密
  16. 红黄绿小灯泡标记实现
  17. SpringCloud Gataway 跨域配置
  18. 若有定义:int a=7; float x=2.5, y=4.7;,则表达式 x+a%3*(int)(x+y)%2/4 的值是(A)。
  19. 【NC65】主子表单据按照单表结构展现 节点客开
  20. datatables 常用的操作、复杂表头

热门文章

  1. 2021.2.6课程摘要(逻辑教育-王劲胜)
  2. Java培训,我为什么选择传智播客
  3. mac 安装homebrew 报错 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refu
  4. 关于HTTP协议之谈网址URL劫持的影响
  5. 【点云处理之论文狂读前沿版6】Surface Representation for Point Clouds
  6. 论文阅读:Adaptive Graph Convolution for Point Cloud analysis
  7. 阿里云ECS CentOS6.5搭建iRedMail邮件服务器
  8. px,in,mm,pt,dp,dip,sp 之间的换算公式以及区别
  9. 动态规划(准备工作)
  10. 爱因斯坦 《社会与个人》