POJ 2106 Boolean Expressions

Boolean Expressions

Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 3665   Accepted: 1104

Description

The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next:

Expression: ( V | V ) & F & ( F | V )

where V is for True, and F is for False. The expressions may include the following operators: ! for not , & for and, | for or , the use of parenthesis for operations grouping is also allowed.

To perform the evaluation of an expression, it will be considered the priority of the operators, the not having the highest, and the or the lowest. The program must yield V or F , as the result for each expression in the input file.

Input

The expressions are of a variable length, although will never exceed 100 symbols. Symbols may be separated by any number of spaces or no spaces at all, therefore, the total length of an expression, as a number of characters, is
unknown.

The number of expressions in the input file is variable and will never be greater than 20. Each expression is presented in a new line, as shown below.

Output

For each test expression, print "Expression " followed by its sequence number, ": ", and the resulting value of the corresponding test expression. Separate the output for consecutive test expressions with a new line.

Use the same format as that shown in the sample output shown below.

Sample Input

( V | V ) & F & ( F| V)
!V | V & V & !F & (F | V ) & (!F | F | !V & V)
(F&F|V|!V&!F&!(F|F&V))

Sample Output

Expression 1: F
Expression 2: V
Expression 3: V

Source

México and Central America 2004

ACcode:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int sum[110],poss;
int op[110],poso;
void insert(int t){
    while(poso&&op[poso-1]==3){
        t=!t;
        --poso;
    }
    sum[poss++]=t;
}
void calc(){
    int b=sum[--poss];
    int a=sum[--poss];
    int o=op[--poso];
    int c=(a&b);
    if(o==1)c=(a|b);
    insert(c);
}
int main(){
    int loop=1;
    char c;
    while((c=getchar())!=EOF){
        poss=poso=0;
        do{
            if(c=='('){
                op[poso++]=0;
            }else if(c==')'){
                while(poso&&op[poso-1]!=0)
                    calc();
                    --poso;
                insert(sum[--poss]);
            }else if(c=='!'){
                op[poso++]=3;
            }else if(c=='&'){
                while(poso&&op[poso-1]>=2)
                    calc();
                op[poso++]=2;
            }else if(c=='|'){
                while(poso&&op[poso-1]>=1)
                    calc();
                op[poso++]=1;
            }
            else if(c=='V'||c=='F'){
                insert(c=='V'?1:0);
            }
        }while((c=getchar())!='\n'&&c!=EOF);
        while(poso)calc();
        printf("Expression %d: %c\n",loop++,(sum[0]?'V':'F'));
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-30 09:21:49

POJ 2106 Boolean Expressions的相关文章

poj 2106 Boolean Expressions 课本代码

#include<cstdio> const int maxn=100 +10; int val[maxn],vtop; int op[maxn],otop; void insert(int b) { while(otop &&op[otop-1]==3) { b=!b; --otop; } val[vtop++]=b; } void calc(void) { int b=val[--vtop]; int a=val[--vtop]; int opr=op[--otop]; i

[poj 2106] Boolean Expressions 递归

Description The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next: Expression: ( V | V ) & F & ( F | V )where V is for True, and F is for False. The expressions may include the following ope

POJ 2106 Boolean Expression 表达式求值

题意:给出布尔表达式求值? 插入数字时,若有!则更新.遇到右括号弹出知道左括号,左括号前有'!'则更新, 其余和中缀表达式一样,遇到下一个运算符时 若操作栈中运算符优先级大,则先算. #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <s

005:Boolean Expressions

描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next: Expression: ( V | V ) & F & ( F | V ) where V is for True, and F is for False. The expressions may include the following operators: !

Boolean Expressions

总时间限制: 1000ms  内存限制: 65536kB 描述The objective of the program you are going to produce is to evaluate boolean expressions as the one shown next: Expression: ( V | V ) & F & ( F | V )where V is for True, and F is for False. The expressions may includ

poj 2106

原题链接:http://poj.org/problem?id=2106 题意:或.与. 非的多元表达式的求值: 思路:中缀表达式变为后缀表达式: 代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<stack> 4 #include<string> 5 6 using namespace std; 7 8 struct Pri{ 9 char op; 10 int pri; 11 }lpri[5]={

MongoDB聚合管道

通过上一篇文章中,认识了MongoDB中四个聚合操作,提供基本功能的count.distinct和group,还有可以提供强大功能的mapReduce. 在MongoDB的2.2版本以后,聚合框架中多了一个新的成员,聚合管道,数据进入管道后就会经过一级级的处理,直到输出. 对于数据量不是特别大,逻辑也不是特别复杂的聚合操作,聚合管道还是比mapReduce有很多优势的: 相比mapReduce,聚合管道比较容易理解和使用 可以直接使用管道表达式操作符,省掉了很多自定义js function,一定

Lua 架构 The Lua Architecture

转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间翻译了lua官方关于lua5架构设计的一份文档,现在分享给大家. 注意:所有版权都归lua官方所有,本人仅将其翻译为中文,以方便中文阅读者.翻译中出现任何错误导致的结果,本人不负任何责任. 如果有任何翻译错误,以及意见与建议,请email本人.邮件地址:[email protected]. 转载请注

spring JPA 动态查询

没什么好说的,记住就行. 下面是在Service中的方法 Page<TStaff> staffs=dao.findAll(new Specification<TStaff>() { @Override public Predicate toPredicate(Root<TStaff> root, CriteriaQuery<?> query, CriteriaBuilder cb) { Predicate predicate = cb.conjunction