比赛场次 43
比赛名称 20090923练习赛
比赛状态 已结束比赛成绩
开始时间 2009-09-23 19:00:00
结束时间 2009-09-23 22:00:00
开放分组 全部用户
注释介绍
题目名称 逻辑表达式
输入输出 expressa.in/out
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试点数 5 简单对比
用户 结果 时间 内存 得分
Gravatarybh WAWWW 0.000 s 0.00 MiB 20
GravatarAchilles WAWWW 0.000 s 0.00 MiB 20
Gravatarmaxiem WAWWW 0.000 s 0.00 MiB 20
Gravatarreamb EEEEE 0.000 s 0.00 MiB 0

逻辑表达式

★☆   输入文件:expressa.in   输出文件:expressa.out   简单对比
时间限制:1 s   内存限制:128 MiB

【问题描述】
由英文字母和符号~、 *、+、()组成逻辑表达式,英文字母表示变量,变量有两种可能的取值,False或True;~、*、+、括号()可改变表达式的运算次序,且可以嵌套。

逻辑 “非”运算的公式如下表:

A

~ A

TRUE

FALSE

FALSE

TRUE

逻辑 “与”和逻辑“或”的运算公式如下表:

A

B

A*B

A+B

FALSE

FALSE

FLASE

FLASE

FALSE

TRUE

FLASE

TRUE

TRUE

FALSE

FALSE

TRUE

TRUE

TRUE

TRUE

TRUE

两个逻辑表达式等价,当且仅当两个公式中相同名字的变量取任何一种值时两个公式的值都相同。如:

A*(B+C) 与 A*B+A*C 等价
A*(~A+B) 与 A*B 等价
(~A+A)*B+C 与 B+C 等价
A*B+A*~B 与 A 等价
而:

A+B 与 A*B 不等价
A*B+~C 与 A*E+~F 不等价

现要求你编程解决下列问题:

任务 1 :读取一个逻辑表达式,判断这个表达式的合法性;

【输入格式1】
    输入文件只有一行,一个字符串s,s的长度不超过255。

【输出格式1】
   输出文件只有一个单词,yes或no。 表达式合法时输出yes,不合法时输出no。
【输入输出样例1】 
输入:
expressa.in
(A+B)*(A-B)

输出:
expressa.out
no

(注:逻辑运算中没有"-"运算)

任务2:

将读入的表达式化简,化简的表达式为
a1*a2*…*aN+b1**b2*…*bM+…+x1*x2*…*xL
其中 ai、bj、…xk(i=1,2,…n; j=1,2,…m; k=1,2,…L)表示一个变量或一个变量的逻辑非;

【输入输出样例2】 
输入:
expressb.in
(A+B)*C

输出:
expressb.out
A*C+B*C