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
HDU 4431 Mahjong(模拟题)相关推荐
- HDU 4121 Xiangqi 模拟题
题目: http://acm.hdu.edu.cn/showproblem.php?pid=4121 首先对标题赞一个,非要叫 "Xiangqi" 而不是 "中国象棋&q ...
- hdu 44313391 Mahjong 枚举,判断
hdu 4431 Mahjong 3391也是差不多的题,但是没有字牌应该简单一点. 我说这个题是一个暴力应该没什么问题,就是判断的时候非常麻烦. 题意 说说打的是日本麻将,不过好像中国的麻将也都是这 ...
- HDU 1262 寻找素数对 模拟题
题目描述:输入一个偶数,判断这个偶数可以由哪两个差值最小的素数相加,输出这两个素数. 题目分析:模拟题,注意的是为了提高效率,在逐个进行判断时,只要从2判断到n/2就可以了,并且最好用打表法判断素数. ...
- I'm stuck! ccf模拟题。
ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...
- 重庆社区计算机考试题库,2020重庆社区工作者考试题库:模拟题100题(64)
2020年重庆社区工作者考试正在如火如荼的开展,为了帮助大家做好备考工作,社区工作者考试模拟题,希望考生们能与小编共同坚持--每日一练! 2020年社区工作者考试模拟题100题64 1. 在市场经济条 ...
- 计算机一级考试模拟题函数,2015年计算机一级考试模拟题(四)
2015年计算机一级考试模拟题(四) 请用Word 2003对考生文件夹下WORD.DOC文档中的文字进行编辑.排版和保存,具体要求如下: (1)将标题段("十年后的家电")文字设 ...
- java格林认证_Java考试格林模拟题
Java考试格林模拟题 question 14) which of the following lines of code will compile without error 1) int i=0; ...
- 计算机应用a级考试,四川省职称计算机应用能力考试A级模拟题
内容简介: 四川省职称计算机应用能力考试A级模拟题 一.单选题: 1.软件工程管理是指对(C)一切活动的管理. A.软件计划期 B.高级决策层 C.软件生命期 D.软件计划和开发期 2.从一个长度为n ...
- 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)
2014年计算机二级考试C语言模拟题(1) 21.下列程序的运行结果为( ). #include main() {struct date {int year,month,day; }today; pr ...
最新文章
- nodejs的web开发框架了解一下
- python3 拼接字符串的7种方法
- jmeter多用户登录跨线程组操作传值
- spring依赖注入_Spring3:类型安全依赖项注入
- java php html,java和html的区别是什么
- latex 作者加小标_Latex 写期刊论文的小技巧
- 安装gem_Python安装第三方库及常见问题处理方法汇总
- gtk不是C语言的专属,c++也可以
- C语言实训作业PPT,C语言实训作业.docx
- 微信视频号的实时推荐技术架构分享
- matlab堆栈的思想,[转载]Matlab源代码:堆栈类Stack的实现
- UVA 1394	 And Then There Was One 约瑟夫环数学方法
- Queue--队列(c语言简单实现)
- VBA新手教程:抽卡模拟实战(3)
- STM32F103如何使用串口下载程序
- python之window下安装python2版的pyv8库 (window install python2 pyv8)
- teamviewer一直验证账户_奇葩的Synchrony Bank ID验证过程(解锁Amazon Store Card)
- 计算机网络必看之·你确定了解应用层吗?(下)12/3最新补充
- 循环问“老婆,你爱我吗?”,如果回答的是“爱”, 那么就结束循环,否则就继续问。用程序描述这个故事!
- 如何 禁掉 Hyper-V 如何解决禁不掉 Hyper-V 的问题
热门文章
- LeetCode 1602. 找到二叉树中最近的右侧节点(BFS)
- python 全局变量、局部变量
- LintCode 1683. 杀怪兽(队列)
- 剑指Offer - 面试题40. 最小的k个数(排序/大顶堆)
- oracle批量联机,Oracle 12.2 使用联机重定义对表进行多处改变
- vim配置python开发环境_GitHub - TTWShell/legolas-vim: Vim配置,为python、go开发者打造的IDE。...
- redis 查看key的有效期_redis中key设置过期时间
- wltc循环多少公里_原来所有车都烧机油!但是烧多少才算正常你知道吗?
- 多线程的全局变量与局部变量
- 怎么在linux下使用ftp服务器,怎么在Linux下建立安全的FTP服务器?