HDU-1172 猜数字 广搜
http://acm.hdu.edu.cn/showproblem.php?pid=1172
这题要换个思维,不要想着如何通过已有的条件来得到正确的值,而是枚举0000-9999这10000个数,看满足条件的数字有多少个,只有刚好有一个的数满足的情况下才输出。
代码如下:
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <iostream>#define MIN( x, y ) (x) < (y) ? (x) : (y)using namespace std; struct Node{char num[10];int right, pos; }n[105]; void cmp( char *s, char *c, int &right, int &pos ){ right = pos = 0;int shash[15] = {0};int chash[15] = {0}; for( int i = 0; i < 4; ++i ) {if( s[i] == c[i] ) pos++; }for( int i = 0; i < 4; ++i ) { shash[ s[i] ]++; chash[ c[i] ]++; }for( int i = 0; i < 10; ++i ) { right += MIN( shash[i], chash[i] ); }} void getnext( char *s ){for( int i = 3; i >= 0; --i ) {if( s[i] < 9 ) { s[i]++; return; }else { s[i] = 0; } } } void DFS( bool &ans, int &num, int N ){int right, pos, flag, cnt = 0;char t[4] = {0};for( int i = 0; i < 10000; ++i ) { flag = 0;for( int i = 0; i < N; ++i ) { cmp( t, n[i].num, right, pos );if( right == n[i].right && pos == n[i].pos )continue;else { flag = 1;break; } } if( !flag ) { ans = true; cnt++; num = t[0] * 1000 + t[1] * 100 + t[2] * 10 + t[3];if( cnt > 1 ) { ans = false;return; } } getnext( t ); }} int main(){int N;while( scanf( "%d", &N ), N ) {int num = 0;for( int i = 0; i < N; ++i ) { scanf( "%s %d %d", n[i].num, &n[i].right, &n[i].pos ); for( int j = 0; j < 4; ++j ) n[i].num[j] -= '0'; }bool ans = false; DFS( ans, num, N );if( ans ) printf( "%d\n", num );else puts( "Not sure" ); };return 0;}
HDU-1172 猜数字 广搜相关推荐
- A strange lift HDU - 1548(基础广搜)
There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 ...
- hdu1226超级密码【数字广搜+大数取模】
第一眼看到这个题就想到了poj3126Prime Path (题解地址 果然还是自己做出来的题印象深) 但是很不幸的是 ,这个题一个大数取模就把我整蒙了orz 其他的真没啥区别,还多了一个第一位不能是 ...
- 【HDU - 1172】猜数字 (枚举暴力)
题干: 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上. ...
- [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2612 方法:其实就是从两个点分别探寻单源最短路径,两个点到同一个目标位置的最短路径都求出来,相加,然 ...
- Hdu 1072 【广搜】.cpp
题意: 给出一个n*m的矩阵, 0 表示不可走 1 表示可走 2 表示起点 3 表示终点 4 表示可走且走到这一步可以满血 某人一开始有6滴血,走一步少一滴..到0就死了.. 可以走到4的位置满血再走 ...
- [HDU] 1181 变形课-简单建模后广搜
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1181 方法:以所有咒语看做一条起点为首字母,终点为末字母的有向边来建立有向图.然后在图中判断目标路径 ...
- 广搜之原神·稻妻·荒海水位解谜中的两处机关 输入数字生成解谜步骤
把稻妻的任务堆了很久,这两天才想起来肝一肝.不肝不知道,稻妻有这么大地图!怪不得2.0游戏资源足有20个G. 在神樱大祓(fu,二声)任务里,第二个场景是荒海,解谜过程中遇到两个雷方块机关,就是下面这 ...
- POJ 3278 / hdu 2717 Catch That Cow (广搜)
POJ 3278 HDU 2717 广搜题,用一个数组标记就可以过,不标记的话会超内存. 另外,poj的数据要比hdu强一些,比如0 100,这种数据.不特判的话会RE.不过如果不特判,在poj上用C ...
- hdu 2612 Find a way (广搜)
Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...
最新文章
- 比尔盖茨是这样审查项目的 2
- radio按扭设置只读_disabled属性样式问题
- NodeJS常用模块介绍
- 深挖“窄带高清”的实现原理
- [置顶] cocos2d-x 手游源码站
- 国科大高级人工智能-总结
- 关于windows窗体应用程序 1117
- C# 或Asp.Net 将excel表格导入数据库
- 微信监控机器学习、深度学习训练过程,可视化
- 代码同时托管到github和git.oschina.net
- Redis实现微博后台业务逻辑系列(八)
- 英语口语练习系列-C01-好棒
- 计算机与网络期刊多少钱,《计算机与网络》是不是核心期刊
- VMware Fusion Player 个人免费版
- Unity背包系统 设计流程
- 简单线性回归截距假设检验_统计推断——假设检验——简单线性回归分析
- Google谷歌中国总裁李开复将离职创业
- 钢琴转录论文Onsets and Frames:dual-objective piano transcription
- 左倾堆 - 解析与实现
- Web前端:HTML~CSS~JS
热门文章
- “互联网+”时代,漫谈影响用户体验的X因素
- WebView 的新增安全功能
- 解决问题 WebDriverException: Message: unknown error: cannot find Chrome binary
- Win7提示1970-01-01 000000 is not a valid data怎么办.
- windows 服务 定时程序 跑不出数据
- OpenCV Viz 3D虚拟空间模块
- Word无法读取此文档,文档可能已损坏
- 流氓软件清除,周期性出现流氓软件
- 如何提升企业的数据挖掘能力
- 好的数据分析平台有多重要