NAND

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)

Total Submission(s): 65    Accepted Submission(s): 14

Problem Description
Xiaoqiang entered the “shortest code” challenge organized by some self-claimed astrologists. He was given a boolean function taking n inputs (in C++):



bool f(bool x1, bool x2, bool x3){

//your code goes here

//return something

}




All possible inputs and expected outputs of this function have been revealed:







Xiaoqiang’s code must be like:



bool a = NAND(b, c);



where “a” is a newly defined variable,“b” and “c” can be a constant (0/1) or a function parameter (x1/x2/x3) or a previously defined variable. NAND is the “not-and” function:



NAND(b, c)=!(b&&c)



Because NAND is universal, Xiaoqiang knew that he could implement any boolean function he liked. Also, at the end of the code there should be a return statement:



return y;



where y can be a constant or a function parameter or a previously defined variable. After staring at the function for a while, Xiaoqiang came up with the answer: 



bool a = NAND(x1, x2);

bool b = NAND(x2, x3);

bool y = NAND(a, b); return y;




Xiaoqiang wants to make sure that his solution is the shortest possible. Can you help him?
 
Input
The first line contains an integer T (T ≤ 20) denoting the number of the test cases.



For each test case, there is one line containing 8 characters encoding the truth table of the function.
 
Output
For each test case, output a single line containing the minimum number of lines Xiaoqiang has to write.
 
Sample Input
1
00010011
 
Sample Output
4

题意:RT

思路:这题简化题意就是,要求构造最少的NAND式子,使得输入x1,x2,x3,输出一个8位二进制数

            因为x1,x2,x3的全部组合满足0~8。那么能够将这三个数的8种值先按列压成3个8位二进制数(类似于搜索的时候开了8个栈,这样压以后仅仅需一个栈。方便处理。减枝)

            x1,x2,x3的取值例如以下
            000
            001
            010
            011
            100
            101
            110
            111
            按列压成8位二进制。x1 : 00001111  x2 : 00110011  x3 : 01010101

            然后不难发现全部的NAND操作变成了~(a&b)

            搜索的时候将新值入栈,假设搜到反复的就直接跳过,这个用一个数组记录每一个数是否存在就好了

            另一个非常重要的减枝是设置一个start变量,由于每次得到新的数是从当前栈里的元素两两进行NAND操作得到的

            而在DFS进入下一层的时候实际上队列中的有些元素已经两两运算过了,所以就不须要再算一次,start的含义是下一层DFS里的循环遍历应该从栈的哪个位置開始

            打完表花了15秒,感觉挺快的~

            

版权声明:本文博客原创文章,博客,未经同意,不得转载。

2014鞍山直播比赛H称号HDU5077(DFS修剪+通过计)的更多相关文章

  1. ZOJ 3829 Known Notation (2014牡丹江H称号)

    主题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=5383 Known Notation Time Limit: 2 S ...

  2. 2014牡丹江网络zoj3816Generalized Palindromic Number(dfs或者bfs)

    #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> ...

  3. H - Graphics(dfs)

    H - Graphics   Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submi ...

  4. (比赛)B - 棋盘问题(dfs)

    B - 棋盘问题 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu Practice POJ ...

  5. HDU 5071 Chat(2014鞍山B,模拟)

    http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. CHD 2014迎新杯比赛题解

    A. 草滩的魔法学校 分析: 高精度乘法 或 JAVA大数类 很明显 10000 的阶乘已经远远超过 64 位数能表示的范围了.所以我们要用一个比较大的数组来存放这个数.那数组要开多少位合适呢?我们不 ...

  7. hdu 5073 Galaxy(2014 鞍山现场赛)

    Galaxy                                                                   Time Limit: 2000/1000 MS (J ...

  8. hdu 5071(2014鞍山现场赛B题,大模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...

  9. hdu5072 Coprime (2014鞍山区域赛C题)(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质. 题解: http://dty ...

随机推荐

  1. MongoDB:逐渐变得无关紧要

    我与MongoDB的关系可分为三个阶段.对于目前处于第三阶段的我来说,这款产品似乎变得无关紧要了.很快你就会明白为什么我这么说. 阶段一:痴迷 我与MongoDB的第一次接触十分神奇:一个poligl ...

  2. 【007】【JVM——内存分配和恢复策略】

     内存分配与收回策略 JVM的自己主动内存管理要自己主动化地解决两个问题:对象分配内存以及回收分配给对象的内存.回收内存前几篇已经讲了.如今说内存分配.对象的内存分配一般分配在堆内存中,也可能经过 ...

  3. IBatis.net初步使用

    最近加班比较忙,时间也比较琐碎,蛮久没有写东西了.这次就总结一下自己使用IBatis.net的一些总结吧. IBatis简介 IBatis.net是一款开源的Orm框架,应该算是从java的IBati ...

  4. 第十七章——配置SQLServer(4)——优化SQLServer实例的配置

    原文:第十七章--配置SQLServer(4)--优化SQLServer实例的配置 前言: Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServ ...

  5. 前端project师的修真秘籍(css、javascript和其他)

    以我的经验,大部分技术,熟读下列四类书籍就可以. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列 全面,巨细无遗地探讨每一个细节,遇到疑难问题时往往能够在这里得到理论解答,如 ...

  6. git常用命令学习(转)

    一.Bug分支 1,假设如下场景,你正在dev分支工作,突然接到一个修复代号为101的bug的任务时,dev的东西还没不能提交,但是bug需要马上修复. Git提供了一个stash功能,可以把当前工作 ...

  7. RDIFramework.NET ━ .NET高速信息系统开发框架钜献 V2.9 版本震撼发布

    RDIFramework.NET ━ .NET高速信息化系统开发框架钜献 V2.9 版本号震撼公布  全新体验.全新感觉.2015钜献! 继上个版本号"RDIFramework.NET V2 ...

  8. CSDN博客导出工具 Mac By Swift

    写这篇文章的主要目的是了解Swift语言本身,如何以及Objc和第三方交互框架 必须先用CSDN帐户登录.您可以导出所有的博客文章,加入YAML当首标信息,包括对应标签和分类在头制品信息,和底座式(原 ...

  9. Could not roll back JDBC transaction途径

    [异常]接口数量:DM02;错误代码:ERR_EAI_02_014; 错误叙述性说明:当将中间库异常Could not roll back JDBC transaction; nested excep ...

  10. ssh配置连接

    SSH构造: 1.改动vi /etc/ssh/sshd_config,依据模板将要改动的參数凝视去掉并改动參数值: Port 22 指定SSH连接的port号,安全方面不建议使用默认22port Pr ...