dfs枚举真值

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <stack> using namespace std; char s[120];
bool ch[30];
bool b[30];
int cur[30];
int len;
int dfs(int m, int mm)
{
if(m == mm)
{
stack<bool> q;
for(int i = len-1; i >= 0; i--)
{
if(s[i] >= 'a' && s[i] <= 'z')
{
q.push(b[cur[s[i]-'a'+1]]);
}
else
{
if(s[i] == 'C')
{
bool x,y;
x = q.top(), q.pop();
y = q.top(), q.pop();
q.push(x && y);
}
else if(s[i] == 'D')
{
bool x,y;
x = q.top(), q.pop();
y = q.top(), q.pop();
q.push(x || y);
}
else if(s[i] == 'I')
{
bool x,y;
x = q.top(), q.pop();
y = q.top(), q.pop();
q.push((!x) || y);
}
else if(s[i] == 'E')
{
bool x,y;
x = q.top(), q.pop();
y = q.top(), q.pop();
q.push(((!x) || y) && ((!y) || x));
}
else
{
bool x;
x = q.top(), q.pop();
q.push(!x);
}
}
}
return q.top();
}
else
{
b[m] = true;
if(dfs(m+1, mm))
{
b[m] = false;
return dfs(m+1, mm);
}
}
return false;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
memset(ch, false, sizeof(ch));
memset(b, false, sizeof(b));
scanf("%s",s);
len = strlen(s);
for(int i = len-1; i >= 0; i--)
{
if(s[i] >= 'a' && s[i] <= 'z')
ch[s[i] - 'a'+1] = true;
}
int e = 1;
for(int i = 1; i <= 26; i++)
if(ch[i])
cur[i] = e++;
if(dfs(1, e))
puts("YES");
else
puts("NO");
}
return 0;
}

spoj 147的更多相关文章

  1. 【SPOJ 1182】 SORTBIT - Sorted bit squence (数位DP)

    SORTBIT - Sorted bit squence no tags Let's consider the 32 bit representation of all integers i from ...

  2. SPOJ BALNUM - Balanced Numbers - [数位DP][状态压缩]

    题目链接:http://www.spoj.com/problems/BALNUM/en/ Time limit: 0.123s Source limit: 50000B Memory limit: 1 ...

  3. BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233 ...

  4. SPOJ DQUERY D-query(主席树)

    题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...

  5. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  6. 【填坑向】spoj COT/bzoj2588 Count on a tree

    这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...

  7. uva 147 Dollars

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  8. SPOJ bsubstr

    题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...

  9. 【SPOJ 7258】Lexicographical Substring Search

    http://www.spoj.com/problems/SUBLEX/ 好难啊. 建出后缀自动机,然后在后缀自动机的每个状态上记录通过这个状态能走到的不同子串的数量.该状态能走到的所有状态的f值的和 ...

随机推荐

  1. AMQ学习笔记 - 01. 相关背景

    概述 介绍中间件.MOM.JMS.ActiveMQ,及相互的关系. 中间件 由于业务的不同.技术的发展.硬件和软件的选择有所差别,导致了异构组件或应用并存的局面.要使这些异构的组件协同工作,一个有效的 ...

  2. ESB数据发布思路

    通过esb已经将数据采集进数据库,现在需要开放一个接口,接受请求参数,进而通过参数进行数据查询,返回一段json格式的数据. ▼流程图: 刚开始尝试了很多个版本,可能是esb开发工具还用不熟练的原因吧 ...

  3. Different ways to invoke a shared object/share library(.so)

    在Linux中调用.so文件的方法有几种. 1.直接在编译的时候链接上. 2.dlopen/???

  4. Android下各个按键对应的key code

    KEYCODE_UNKNOWN=0; KEYCODE_SOFT_LEFT=1; KEYCODE_SOFT_RIGHT=2; KEYCODE_HOME=3; KEYCODE_BACK=4; KEYCOD ...

  5. tp中让头疼似懂非懂的create

    项目中多次用到create() 只能它是表单验证,不过好出错,痛下心扉好好了解理解它的来龙去脉和所用的用法 一:通过create() 方法或者 赋值的方法生成数据对象,然后写入数据库 $model = ...

  6. PHP取二进制文件头快速判断文件类型的实现代码

    通过读取文件头信息来识别文件的真实类型. 一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,PHP扩展中提供了类似 exif_im ...

  7. RouterOS的MikroTik脚本从DNS更新IPSEC端的IP地址

    #Script for changing IPSEC address when DNS changes. #Script will iterate through all peers looking ...

  8. 虚拟机开机提示:This virtual machine appears to be in use

    [原因]:由于电脑非正常关机导致,重新启动虚拟机就会出现This virtual machine appears to be in use的提示.[解决方法]:到虚拟机的安装目录下删除所有.lck的目 ...

  9. TCP连接,传输数据时的粘包问题讨论

    第一个需要讨论的大概就是粘包问题了.因为这个是TCP的个性问题,UDP通信时不存在这个问题的.首先看一下什么叫粘包: 客户端采取与服务器的长连接方式建立通信(Open-Write/Read-Write ...

  10. Oracle 的证也会过期咯

    How does this recertification requirement affect me? If your Database Certification credential is re ...