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 猜数字 广搜相关推荐

  1. 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 ...

  2. hdu1226超级密码【数字广搜+大数取模】

    第一眼看到这个题就想到了poj3126Prime Path (题解地址 果然还是自己做出来的题印象深) 但是很不幸的是 ,这个题一个大数取模就把我整蒙了orz 其他的真没啥区别,还多了一个第一位不能是 ...

  3. 【HDU - 1172】猜数字 (枚举暴力)

    题干: 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上. ...

  4. [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2612 方法:其实就是从两个点分别探寻单源最短路径,两个点到同一个目标位置的最短路径都求出来,相加,然 ...

  5. Hdu 1072 【广搜】.cpp

    题意: 给出一个n*m的矩阵, 0 表示不可走 1 表示可走 2 表示起点 3 表示终点 4 表示可走且走到这一步可以满血 某人一开始有6滴血,走一步少一滴..到0就死了.. 可以走到4的位置满血再走 ...

  6. [HDU] 1181 变形课-简单建模后广搜

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1181 方法:以所有咒语看做一条起点为首字母,终点为末字母的有向边来建立有向图.然后在图中判断目标路径 ...

  7. 广搜之原神·稻妻·荒海水位解谜中的两处机关 输入数字生成解谜步骤

    把稻妻的任务堆了很久,这两天才想起来肝一肝.不肝不知道,稻妻有这么大地图!怪不得2.0游戏资源足有20个G. 在神樱大祓(fu,二声)任务里,第二个场景是荒海,解谜过程中遇到两个雷方块机关,就是下面这 ...

  8. POJ 3278 / hdu 2717 Catch That Cow (广搜)

    POJ 3278 HDU 2717 广搜题,用一个数组标记就可以过,不标记的话会超内存. 另外,poj的数据要比hdu强一些,比如0 100,这种数据.不特判的话会RE.不过如果不特判,在poj上用C ...

  9. hdu 2612 Find a way (广搜)

    Problem Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. L ...

最新文章

  1. 比尔盖茨是这样审查项目的 2
  2. radio按扭设置只读_disabled属性样式问题
  3. NodeJS常用模块介绍
  4. 深挖“窄带高清”的实现原理
  5. [置顶]       cocos2d-x 手游源码站
  6. 国科大高级人工智能-总结
  7. 关于windows窗体应用程序 1117
  8. C# 或Asp.Net 将excel表格导入数据库
  9. 微信监控机器学习、深度学习训练过程,可视化
  10. 代码同时托管到github和git.oschina.net
  11. Redis实现微博后台业务逻辑系列(八)
  12. 英语口语练习系列-C01-好棒
  13. 计算机与网络期刊多少钱,《计算机与网络》是不是核心期刊
  14. VMware Fusion Player 个人免费版
  15. Unity背包系统 设计流程
  16. 简单线性回归截距假设检验_统计推断——假设检验——简单线性回归分析
  17. Google谷歌中国总裁李开复将离职创业
  18. 钢琴转录论文Onsets and Frames:dual-objective piano transcription
  19. 左倾堆 - 解析与实现
  20. Web前端:HTML~CSS~JS

热门文章

  1. “互联网+”时代,漫谈影响用户体验的X因素
  2. WebView 的新增安全功能
  3. 解决问题 WebDriverException: Message: unknown error: cannot find Chrome binary
  4. Win7提示1970-01-01 000000 is not a valid data怎么办.
  5. windows 服务 定时程序 跑不出数据
  6. OpenCV Viz 3D虚拟空间模块
  7. Word无法读取此文档,文档可能已损坏
  8. 流氓软件清除,周期性出现流氓软件
  9. 如何提升企业的数据挖掘能力
  10. 好的数据分析平台有多重要