POJ - 3295 - Tautology = 枚举 + 二叉树遍历
时间:2019-10-22
本文章向大家介绍POJ - 3295 - Tautology = 枚举 + 二叉树遍历,主要包括POJ - 3295 - Tautology = 枚举 + 二叉树遍历使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
http://poj.org/problem?id=3295
题意:给若干个小写字母表示bool变量,大写字母表示bool运算,求这个表达式的是否为永真表达式。
输入形如:
ApNp
ApNq
也就是前缀表达式。
所以就写个东西遍历它构造一棵树,然后给同名变量枚举赋值,假如没有任何赋值使得树根输出0,则为永真表达式。
考察二叉树的递归遍历。
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
char s[1005];
int cur;
struct TreeNode {
char type;
vector<int> son;
} t[1005];
int top;
//建树
int build(int u) {
//cout<<"u="<<u<<endl;
t[u].son.clear();
if(islower(s[cur])) {
t[u].type = s[cur];
++cur;
return u;
} else if(isupper(s[cur])) {
t[u].type = s[cur];
++cur;
t[u].son.push_back(build(++top));
if(t[u].type != 'N')
t[u].son.push_back(build(++top));
return u;
}
}
bool calc(int u, int val) {
//cout<<"u="<<u<<endl;
//cout<<"t[u].type="<<t[u].type<<endl;
if(islower(t[u].type)) {
//cout<<((val >> (t[u].type - 'p')) & 1)<<endl;
return (val >> (t[u].type - 'p')) & 1;
} else {
bool val1 = calc(t[u].son[0], val);
if(t[u].type == 'N')
return !val1;
else {
bool val2 = calc(t[u].son[1], val);
if(t[u].type == 'K')
return val1 & val2;
if(t[u].type == 'A')
return val1 | val2;
if(t[u].type == 'E')
return val1 == val2;
if(t[u].type == 'C') {
if(val1 == 1 && val2 == 0)
return 0;
else
return 1;
}
exit(-1);
}
}
}
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
while(~scanf("%s", s)) {
top = cur = 0;
if(s[0] == '0')
break;
build(++top);
bool all1 = 1;
for(int i = 0; i < (1 << 5); ++i) {
if(calc(1, i) == 0) {
all1 = 0;
break;
}
}
puts(all1 ? "tautology" : "not");
}
}
原文地址:https://www.cnblogs.com/Inko/p/11718935.html
- 线上服务 CPU 100%?一键定位 so easy!
- 设置输出延迟
- 设置输入延时约束
- MySQL 死锁与日志二三事
- 一千个不用 Null 的理由
- TensorFlow强化学习入门(1.5)——上下文赌博机
- 以太坊·代币开发详解
- JSON Web Token - 在Web应用间安全地传递信息
- TensorFlow强化学习入门(2)——基于策略的Agents
- 用ABAP 生成二维码 QR Code
- CDS view注解解析 - @Environment.systemField
- Document flow API in SAP CRM and C4C
- Python基础知识4:文件操作
- Python基础知识6:格式化字符、颜色
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Apache vhost配置
- win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录
- htaccess简介和16个小技巧
- Nginx禁止指定目录运行PHP脚本
- 机器学习数学笔记|偏度与峰度及其 python 实现
- ABP(ASP.NET Boilerplate Project)快速入门
- IdentityServer4 4.x版本 配置Scope的正确姿势
- 个人总结的部分数据验证规则
- 一句话实现php日期转中文汉字
- .Net Core微服务入门全纪录(八)——Docker Compose与容器网络
- PHP中少用但是很好用的方法
- 使用一维数据构造简单卷积神经网络
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
- PHP使用GD库生成文件
- 反向传播算法从原理到实现