HDU 4431 Mahjong(模拟题)

题目链接

写了俩小时+把....有一种情况写的时候漏了...代码还算清晰把,想了很久才开写的。

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4 using namespace std;
  5 int p[21],flag[60],o[21],ans[60];
  6 int sp[21];
  7 int que[21];
  8 char str[15][3];
  9 int hu13[13] = {1,11,21,9,19,29,33,36,39,42,45,48,51};
 10 void judge13()
 11 {
 12     int i;
 13     int s1,s0,s2,key;
 14     s1 = s2 = s0 = 0;
 15     for(i = 0; i < 13; i ++)
 16     {
 17         if(flag[hu13[i]] == 0)
 18         {
 19             s0 ++;
 20             key = hu13[i];
 21         }
 22         else if(flag[hu13[i]] == 1)
 23             s1 ++;
 24         else if(flag[hu13[i]] == 2)
 25             s2 ++;
 26     }
 27     if(s1 == 13)
 28     {
 29         for(i = 0; i < 13; i ++)
 30             ans[hu13[i]] = 1;
 31     }
 32     else if(s1 == 11&&s2 == 1&&s0 == 1)
 33     {
 34         ans[key] = 1;
 35     }
 36     return ;
 37 }
 38 void judge7d()
 39 {
 40     int i,num = 0,key;
 41     for(i = 1; i < 60; i ++)
 42     {
 43         if(flag[i] == 2)
 44             num ++;
 45         else if(flag[i] == 1)
 46             key = i;
 47     }
 48     if(num == 6)
 49         ans[key] = 1;
 50     return ;
 51 }
 52 int dfs(int n,int x,int step)
 53 {
 54     int i,j,a,b,c;
 55     if(x == step)
 56         return 1;
 57     for(i = 0; i < n; i ++)
 58     {
 59         if(o[i] == 0)
 60         {
 61             if(sp[i+1] == sp[i]&&sp[i+2] == sp[i]&&o[i+1] == 0&&o[i+2] == 0)
 62             {
 63                 o[i] = 1;
 64                 o[i+1] = 1;
 65                 o[i+2] = 1;
 66                 if(dfs(n,x+1,step))
 67                     return 1;
 68                 o[i] = 0;
 69                 o[i+1] = 0;
 70                 o[i+2] = 0;
 71             }
 72             a = b = c = -1;
 73             a = i;
 74             for(j = i+1; j < n; j ++)
 75             {
 76                 if(sp[j] > sp[i] + 2) break;
 77                 if(sp[j] == sp[i] + 1&&o[j] == 0)
 78                     b = j;
 79                 if(sp[j] == sp[i] + 2&&o[j] == 0)
 80                 {
 81                     c = j;
 82                     break;
 83                 }
 84             }
 85             if(b != -1&&c != -1)
 86             {
 87                 o[a] = 1;
 88                 o[b] = 1;
 89                 o[c] = 1;
 90                 if(dfs(n,x+1,step))
 91                     return 1;
 92                 o[a] = 0;
 93                 o[b] = 0;
 94                 o[c] = 0;
 95             }
 96             break;
 97         }
 98     }
 99     return 0;
100 }
101 int main()
102 {
103     int t,i,num,j,k,u;
104     scanf("%d",&t);
105     while(t--)
106     {
107         memset(flag,0,sizeof(flag));
108         memset(ans,0,sizeof(ans));
109         for(i = 0; i < 13; i ++)
110         {
111             scanf("%s",str[i]);
112             num = str[i][0] - '0';
113             if(str[i][1] == 'm')
114                 que[i] = num;
115             else if(str[i][1] == 's')
116                 que[i] = num + 10;
117             else if(str[i][1] == 'p')
118                 que[i] = num + 20;
119             else
120                 que[i] = num*3 + 30;
121             flag[que[i]] ++;
122         }
123         sort(que,que+13);
124         judge13();
125         judge7d();
126         for(i = 0; i < 13; i ++)
127         {
128             if(que[i] == que[i+1])
129             {
130                 num = 0;
131                 for(j = 0; j < 13; j ++)
132                 {
133                     if(j == i||j == i+1) continue;
134                     p[num++] = que[j];
135                 }
136                 for(j = 0; j < 11; j ++)
137                 {
138                     for(k = j+1; k < 11; k ++)
139                     {
140                         if(p[j] == p[k])
141                         {
142                             if(flag[p[j]] == 4) continue;//特判
143                             num = 0;
144                             for(u = 0; u < 11; u ++)
145                             {
146                                 if(u == j||u == k) continue;
147                                 sp[num++] = p[u];
148                             }
149                             memset(o,0,sizeof(o));
150                             if(dfs(9,0,3))
151                             {
152                                 ans[p[j]] = 1;
153                             }
154                         }
155                         else if(p[j] + 1 == p[k])
156                         {
157                             num = 0;
158                             for(u = 0; u < 11; u ++)
159                             {
160                                 if(u == j||u == k) continue;
161                                 sp[num++] = p[u];
162                             }
163                             memset(o,0,sizeof(o));
164                             if(dfs(9,0,3))
165                             {
166                                 if(flag[p[j]-1] != 4)
167                                 ans[p[j]-1] = 1;
168                                 if(flag[p[k]+1] != 4)
169                                 ans[p[k]+1] = 1;
170                             }
171                         }
172                         else if(p[j] + 2 == p[k])
173                         {
174                             num = 0;
175                             for(u = 0; u < 11; u ++)
176                             {
177                                 if(u == j||u == k) continue;
178                                 sp[num++] = p[u];
179                             }
180                             memset(o,0,sizeof(o));
181                             if(dfs(9,0,3))
182                             {
183                                 if(flag[p[j]+1] != 4)
184                                 ans[p[j]+1] = 1;
185                             }
186                         }
187                     }
188                 }
189             }
190             if(flag[que[i]] == 4) continue;
191             num = 0;
192             for(j = 0; j < 13; j ++)
193             {
194                 if(j == i) continue;
195                 sp[num++] = que[j];
196             }
197             memset(o,0,sizeof(o));
198             if(dfs(12,0,4))
199             {
200                 ans[que[i]] = 1;
201             }
202         }
203         int fi = 0;
204         for(i = 1; i <= 9; i ++)
205             if(ans[i])fi ++;
206         for(i = 11; i <= 19; i ++)
207             if(ans[i])fi ++;
208         for(i = 21; i <= 29; i ++)
209             if(ans[i])fi ++;
210         for(i = 33; i <= 51; i ++)
211             if(ans[i]) fi ++;
212         if(fi == 0)
213             printf("Nooten\n");
214         else
215         {
216             printf("%d",fi);
217             for(i = 1; i <= 9; i ++)
218                 if(ans[i])printf(" %dm",i);
219             for(i = 11; i <= 19; i ++)
220                 if(ans[i])printf(" %ds",i-10);
221             for(i = 21; i <= 29; i ++)
222                 if(ans[i])printf(" %dp",i-20);
223             for(i = 33; i <= 51; i ++)
224                 if(ans[i])printf(" %dc",(i-30)/3);
225             printf("\n");
226         }
227     }
228     return 0;
229 }
230 /*
231 4
232 1s 1s 1s 1s 2s 2s 2s 2s 3s 3s 3s 3s 4s
233 */

 

转载于:https://www.cnblogs.com/naix-x/p/3448528.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解GAN网络

GAN网络&#xff0c;第一次听说它就不明觉厉。其他网络都是对输入图像进行某种处理&#xff0c;得到某种特定的输出。而GAN网络居然可以“无中生有”&#xff0c;无论是去除马赛克&#xff0c;还是换脸&#xff0c;还是对灰度图像上色&#xff0c;都显得不可思议&#xff0c;怎…

新能源汽车:大变革催生十万亿市场空间

来源&#xff1a;新时代证券&#xff08;开文明&#xff09;新能源汽车发展空间巨大&#xff0c;随着新能源汽车性能提升以及痛点的改善&#xff0c;新能源汽车带来的冲击越来越大&#xff0c;渗透率随之提升。根据BNEF预测&#xff0c;到2025年全球新能源汽车的销量将达到1100…

dlib+vs2013+opencv实现人脸特征点检测

刷知乎的时候发现dlib做特征点检测和人脸识别的效果都好于OpenCV&#xff0c;就想着动手玩一下。没想到也是遇坑重重。 首先&#xff0c;在官网 install命令和setup.py文件进行安装时报错&#xff0c;先是报错cmake没有找到&#xff0c;添加了环境变量之后仍然报错c11需要在vs…

对号入座,看看未来几年机器人是否会取代你的工作

来源&#xff1a;资本实验室摘要&#xff1a;面对未来&#xff0c;你是否准备好了&#xff1f;“机器是否会取代人类的工作”是当前讨论最多的话题之一。这主要源自于近几年以人工智能为代表的新技术的快速发展与商业化。尽管各研究机构的预测数据有所不同&#xff0c;但相同的…

Ubuntu13下调试USB AUDIO的一些记录

最近想玩玩LINUX,于是双系统装了一个Ubuntu13.04。 在新系统下用着都还好&#xff0c;不过我自己DIY的USB DAC出了问题。在WIN7下能正常工作&#xff0c;但是在Ubuntu下就爆音不断&#xff0c;很明显是音频数据流断流引起的。 这说明stm32上的固件与Ubuntu的USB AUDIO驱动程序不…

冈萨雷斯《数字图像处理》读书笔记(十一)——表示和描述

虽然不是专门研究图像分割的&#xff08;峰兄才是&#xff09;&#xff0c;但多少接触了一点&#xff0c;并且图像分割是图像处理中的最为复杂的&#xff0c;通过图像分割可以很好地认识图像处理的好多方法。今天看的是边界追踪和链码的表示。网易计算机视觉工程师的第一道选择…

细胞内钾多钠少——原初生物的第三大遗迹?

来源&#xff1a;科学网在我们每日的饮食中&#xff0c;食盐&#xff08;氯化钠&#xff09;是少不了的&#xff0c;难以想象我们怎么能够每天吃完全没有盐味的食物。不仅人类如此&#xff0c;许多动物&#xff0c;例如食草的动物如牛和羊&#xff0c;也会主动寻找土表盐粒。我…

MSBuild的简单介绍与使用

MSBuild 是 Microsoft 和 Visual Studio的生成系统。它不仅仅是一个构造工具&#xff0c;应该称之为拥有相当强大扩展能力的自动化平台。MSBuild平台的主要涉及到三部分&#xff1a;执行引擎、构造工程、任务。其中最核心的就是执行引擎&#xff0c;它包括定义构造工程的规范&a…

冈萨雷斯《数字图像处理》读书笔记(九)——形态学图像处理

形态学来自于生物学&#xff0c;研究动植物的形态和结构。运用在图像中可提取如边界、骨架和凸壳。初学形态学都是在二值化的图像上研究&#xff0c;之后可以扩展到灰度图像。 膨胀和腐蚀 数学形态学与集合论分不开&#xff0c;因为形态学中的操作是基于两个集合的&#xff0…

云计算行业现状及未来发展趋势

来源&#xff1a;国元证券、乐晴智库摘要&#xff1a;按照服务类型云计算被分为IaaS、PaaS、SaaS。▌云计算产业链构成按照服务类型云计算被分为IaaS、PaaS、SaaS。IaaS基础设施及服务:IaaS主要提供计算基础设施服务&#xff0c;主要包括CPU、内存、存储、网络、虚拟化软件、分…

冈萨雷斯《数字图像处理》读书笔记(三)——空间滤波

滤波这个词来源于频域处理&#xff0c;因为它的目的就是针对频率分量而言的&#xff0c;滤除一定的频率分量。但其实滤波在时域&#xff08;图像中对应为空域&#xff09;中也可以完成相应的操作&#xff0c;比如低通滤波器滤除了代表细节的高频分量&#xff0c;我们可以直接在…

WinInet:HTTPS 请求出现无效的证书颁发机构的处理

首先&#xff0c;微软提供的WinInet库封装了对网页访问的方法。 最近工作需要从https服务器获取数据&#xff0c;都知道https和http网页的访问方式不同&#xff0c;多了一道证书认证程序&#xff0c;这样就使得https在请求起来比http要复杂的多&#xff1b;好在&#xff0c;Win…

热度下的冷思考——智能眼镜到底有没有前途?

来源&#xff1a;环球网我们曾期望Google眼镜能够成为革命性的新产品&#xff0c;因为它某种程度上实现了大家对未来的幻想。然而Google眼镜作为概念产品虽然有趣&#xff0c;但它仍然太不成熟&#xff0c;而且因为存在侵犯隐私的可能还被大众抵触&#xff0c;更重要的是它花去…

TFRecords文件的存储与读取

将cats和dogs两个文件夹各1000张图片存储为&#xff1a;train.tfrecords#将图片文件生成train record import os import tensorflow as tf from PIL import Image #生成cats和dogs的record文件 path./data/train filenamesos.listdir(path) writertf.python_io.TFRecordWriter(…

《C++ Primer》读书笔记 第三章

1.注意&#xff1a;头文件不应包含using声明。因为头文件的内容会拷贝到所有引用他的文件中去&#xff0c;对于某些程序来说&#xff0c;由于不经意间包含了一些名字&#xff0c;可能会产生名字冲突。2.string类型的读入&#xff1a;用cin读入string&#xff0c;忽略所有的前置…

对比激光SLAM与视觉SLAM:谁会成为未来主流趋势?

来源&#xff1a;智车科技摘要&#xff1a;SLAM&#xff08;同步定位与地图构建&#xff09;&#xff0c;是指运动物体根据传感器的信息&#xff0c;一边计算自身位置&#xff0c;一边构建环境地图的过程&#xff0c;解决机器人等在未知环境下运动时的定位与地图构建问题。目前…

链表中的指针

中期答辩改在了国庆之后&#xff0c;终于有时间可以看看剑指offer了。在看到单向链表的部分&#xff0c;对指针&#xff0c;尤其是头指针有点疑惑。首先容易理解的是链表的节点是一个结构体&#xff0c;该结构体包含一个数据&#xff08;一般是int型&#xff09;&#xff0c;还…

实现TFrecords文件的保存与读取

import os import cv2 import numpy as np import tensorflow as tf """ 将train文件夹下的cats和dog文件夹处理成train.tfrecords放在train文件夹里 """ #将图片的路径和对应的标签存储在list中返回 def deal(dir):images []temp []for root,…

工具推荐-css3渐变生成工具

今天工作用到了css3渐变&#xff0c;但是写起来才发现太麻烦了&#xff0c;而却很浪费时间&#xff0c;所以在这里向大家推荐一个在线的css3 渐变生成工具 地址是&#xff1a;http://www.colorzilla.com/gradient-editor/ 这个工具是可视化视图&#xff0c;用起来就和photoshop…

神经网络相关的笔试题目集合(一)

在找工作的过程中发现好多公司没有专门的、传统的图像处理岗位&#xff0c;所以只能参加算法类的笔试甚至AI类的笔试。在AI的笔试中几乎全是关于神经网络的问题&#xff0c;其实也都是很基础的一些问题&#xff0c;如果事先做了准备&#xff0c;可以从容应对。而对于我这种从传…