题目链接:http://acm.swust.edu.cn/problem/322/

Time limit(ms): 1000      Memory limit(kb): 65535
 
 
Description
将军听说最近东6闹鬼了,作为一个无神论者,将军当然不相信。但是这个传言已经泛滥了,许多人都在说这个事情,将军从每个人那里听到一个传言,将军可以容易的就知道这个传言是真还是假,但是当一大堆消息组合起来,将军就不知道了,所以将军就找到了你。 
提供两种组合方式: 
A&B:代表A和B都为真的时候,A和B组合起来为真,否则为假 
A|B:代表A和B里面至少有1个为真的时候,A和B组合起来为真,否则为假 
优先级顺序 “括号”>“&”>“|” 
例如:a&b|(a|b&c),a=真,b=假,c=真; 
那么上式可以这样转化 
真&假 | (真|假&真) 
假 | (真|假) 
假 | 真 

 
 
Input
有多组测试数据,每组测试数据共两行,第一行是一个逻辑范式,数据不用判错; 
接下来三个字符,以空格隔开,分表代表a,b,c的真假(T/F);

Output
对于每一组数据,输出最终的结果(TRUE or FALSE);

 
 
Sample Input
a&b|(a|b&c))
T F T
Sample Output
TRUE
 
SCPC - ChenYi
 
解题思路:更具a,b,c是否为真将其转换为1,0,再把中缀表达式转化为后缀表达式 ’|‘ 运算看做'+',把’&‘运算看做'*',然后看最后的结果就是~~~
 
代码如下:
 #include<iostream>
#include<cstring>
#include<stack>
using namespace std;
char s[], v[], a, b, c;
void get_val(char &x){
if (x == 'T')
x = '';
else
x = '';
}
int judge(char x, char y){
if (x == '(') return -;
if (x == '+')
return y == '*' ? - : ;
if (x == '*')
return y == '+' ? : ;
}
void change(){
stack<char> Q;
int i, k = ;
for (i = ; s[i] != '\0'; i++){
if (s[i] == '(')
Q.push(s[i]);
else if (s[i] == ')'){
while (Q.top() != '('){
v[k++] = Q.top();
Q.pop();
}
Q.pop();
}
else{
if (s[i] != '*'&&s[i] != '+')
v[k++] = s[i];
else{
while (!Q.empty() && judge(Q.top(), s[i]) >= ){
v[k++] = Q.top();
Q.pop();
}
Q.push(s[i]);
}
}
}
while (!Q.empty()){
v[k++] = Q.top();
Q.pop();
}
v[k] = '\0';
//cout << v << endl;
}
int get_num(){
stack<int>Q;
int i, x, y, val;
for (i = ; v[i] != '\0'; i++){
if (v[i] != '*'&&v[i] != '+')
Q.push(v[i] - '');
else{
x = Q.top(), Q.pop();
y = Q.top(), Q.pop();
switch (v[i]){
case '*':val = x*y; break;
case '+':val = x + y; break;
}
Q.push(val);
}
}
return Q.top();
}
void mergy(char *s, char a, char b, char c){
for (int i = ; s[i] != '\0'; i++){
if (s[i] == 'a')s[i] = a;
if (s[i] == 'b')s[i] = b;
if (s[i] == 'c')s[i] = c;
if (s[i] == '&')s[i] = '*';
if (s[i] == '|')s[i] = '+';
}
}
int main(){
while (cin >> s){
cin >> a >> b >> c;
get_val(a), get_val(b), get_val(c);
mergy(s, a, b, c);
change();
cout << (get_num() > ? "TRUE\n" : "FALSE\n");
}
return ;
}
 

[Swust OJ 322]--东6宿舍灵异事件(中缀表达式转化为后缀表达式的简单运用)的更多相关文章

  1. SWUST OJ 东6宿舍灵异事件(0322)

    东6宿舍灵异事件(0322) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 88 Accepted: 31   Descriptio ...

  2. 用MsmqBinding投送message出现的一个灵异事件 【第二篇】

    一直都在用Msmqbinding,也一直忽视了message里面的内容格式是什么样的,这也是微软给我们高层封装带给我们的开发效率,但同时一旦中间出了什么问题, 就不知道从何查起了.有个需求是这样的,服 ...

  3. MySQL 灵异事件一则 -- desc报语法错误

    今天有一开发同学找到我,说查询SQL中倒序报错,不明原因,于是奔赴工位现场研究情况. 果然,只要SQL中带有desc 就会报错,而ASC没问题. 哪怕desc放在句首用作explain也会报错. 报错 ...

  4. 记录一起k8s的service服务名解析灵异事件

    故障现象: 基于alpine 3.7的镜像,构建的spring boot服务及eureka服务器. 在使用deployment和service文件部署到k8s集群之后, 在不同的pod内部,访问ser ...

  5. android中listview点击事件失效的灵异事件

    首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAda ...

  6. mybatis缓存,从一个“灵异”事件说起

    刚准备下班走人,被一开发同事叫住,让帮看一个比较奇怪的问题:Mybatis同一个Mapper接口的查询方法,第一次返回与第二次返回结果不一样,百思不得其解! 问题 Talk is cheap. Sho ...

  7. redis系列-14点的灵异事件

    概述 项目组每天14点都会遭遇惊魂时刻.一条条告警短信把工程师从午后小憩中拉回现实.之后问题又神秘消失.是PM喊你上工了?还是服务器给你开玩笑?下面请看工程师如何一步一步揪出真凶,解决问题. 如果不想 ...

  8. AngularJS进阶(十四)AngularJS灵异代码事件

    AngularJS灵异代码事件 注:请点击此处进行充电! 事情原委 router_sys.js源代码如下: 自己在html路由跳转的代码如下: 但是在实际路由过程中,却路由到了下面的状态,相应的页面中 ...

  9. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

随机推荐

  1. Database SQL script automation management tools investigation

    Recently researched about database SQL scripts auto management tools, recorded the results here. Res ...

  2. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  3. [LeetCode]题解(python):001-Two-Sum

    题目来源: https://leetcode.com/problems/two-sum/ 题意分析: 这道题目是输入一个数组和target,要在一个数组中找到两个数字,其和为target,从小到大输出 ...

  4. spring boot 下 500 404 错误页面处理

    spring boot 作为微服务的便捷框架,在错误页面处理上也有一些新的处理,不同于之前的spring mvc 500的页面处理是比较简单的,用java config或者xml的形式,定义如下的be ...

  5. Linux Centos 系统上安装BT客户端 Transmission

    Linux Centos 系统上安装BT客户端 Transmission   Transmission是一种BitTorrent客户端,特点是一个跨平台的后端和其上的简洁的用户界面,以MIT许可证和G ...

  6. BZOJ 1022

    program bzoj1022; var t,n,i,ans,k,j,k1,k2:longint; bo:boolean; begin read(t); to t do begin read(n); ...

  7. struts2自己定义类型转换器

    1.1.  struts2自己定义类型转换器 1)        自定类型转换类,继承DefaultTypeConverter类 package com.morris.ticket.conversio ...

  8. MySQl 存储过程+游标

    DROP PROCEDURE IF exists pro_Insertflightplan_stat;  create procedure pro_Insertflightplan_stat(exec ...

  9. SharePoint2013切换账户身份登录设置

    1. 打开Welcome.ascx文件:C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE ...

  10. SharePoint代码段设计

    参考文章: 1. SharePoint 2013设计管理器代码段 https://msdn.microsoft.com/zh-cn/library/jj822367 2. 如何在SharePoint中 ...