FZU2215 Simple Polynomial Problem(中缀表达求值)
比赛时没做出这题太可惜了。
赛后才反应过来这就是个中缀表达式求值,数字栈存的不是数字而是多项式。
而且,中缀表达式求值很水的,几行就可以搞定。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Poly{
long long a[];
Poly operator+(const Poly &p)const{
Poly np={};
for(int i=; i<; ++i){
np.a[i]=(a[i]+p.a[i])%;
}
return np;
}
Poly operator*(const Poly &p)const{
Poly np={};
for(int i=; i<; ++i){
if(a[i]==) continue;
for(int j=; j<; ++j){
if(p.a[j]==) continue;
np.a[i+j]+=a[i]*p.a[j];
np.a[i+j]%=;
}
}
return np;
}
}pstk[];
char ostk[]={'#'};
int ptop,otop,pri[];
void push(char op){
if(ostk[otop]=='#' && op=='#') return;
if(ostk[otop]=='(' && op==')'){
--otop;
return;
}
if(pri[ostk[otop]]<pri[op] || ostk[otop]=='('){
ostk[++otop]=op;
return;
}
if(ostk[otop--]=='+'){
Poly p=pstk[ptop]+pstk[ptop-];
ptop-=;
pstk[++ptop]=p;
}else{
Poly p=pstk[ptop]*pstk[ptop-];
ptop-=;
pstk[++ptop]=p;
}
push(op);
}
void output(Poly &p){
int i=;
while(i>= && p.a[i]==) --i;
if(i==-){
puts("");
return;
}
for(int j=i; j>=; --j){
printf("%I64d",p.a[j]);
if(j) putchar(' ');
}
putchar('\n');
}
int main(){
pri['+']=; pri['*']=;
pri['(']=; pri[')']=;
pri['#']=;
int t;
char str[];
scanf("%d",&t);
while(t--){
scanf("%s",str);
ptop=; otop=;
for(int i=;str[i];++i){
if(str[i]>='' && str[i]<=''){
Poly p={};
p.a[]=str[i]-'';
pstk[++ptop]=p;
}else if(str[i]=='x'){
Poly p={};
p.a[]=;
pstk[++ptop]=p;
}else{
push(str[i]);
}
}
push('#');
output(pstk[ptop]);
}
return ;
}
FZU2215 Simple Polynomial Problem(中缀表达求值)的更多相关文章
- 刁肥宅详解中缀表达式求值问题:C++实现顺序/链栈解决
1. 表达式的种类 如何将表达式翻译成能够正确求值的指令序列,是语言处理程序要解决的基本问题,作为栈的应用事例,下面介绍表达式的求值过程. 任何一个表达式都是由操作数(亦称运算对象).操作符(亦称运算 ...
- FZU 2215 Simple Polynomial Problem(简单多项式问题)
Description 题目描述 You are given an polynomial of x consisting of only addition marks, multiplication ...
- C语言中缀表达式求值(综合)
题前需要了解的:中缀.后缀表达式是什么?(不知道你们知不知道,反正我当时不知道,搜的百度) 基本思路:先把输入的中缀表达式→后缀表达式→进行计算得出结果 栈:"先进先出,先进后出" ...
- 第四章 栈与队列(c4)栈应用:中缀表达式求值
- C++之字符串表达式求值
关于字符串表达式求值,应该是程序猿们机试或者面试时候常见问题之一,昨天参加国内某IT的机试,压轴便为此题,今天抽空对其进行了研究. 算术表达式中最常见的表示法形式有 中缀.前缀和 后缀表示法.中缀表示 ...
- 中缀表达式变后缀表达式、后缀表达式(逆波兰)求值(python版本)
定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算 ...
- C++ 中缀转后缀表达式并求值
//中缀转后缀 #include<iostream> #include<stack> using namespace std; int prio(char x){ ; ; ; ...
- nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】
郁闷的C小加(三) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...
- 中缀表达式转逆波兰式(后缀表达式)求值 C++ Stack
给一个包含小数的中缀表达式 求出它的值 首先转换为后缀表达式然后利用stack求出值 转换规则: 如果字符为'(' push else if 字符为 ')' 出栈运算符直到遇到‘(' else if ...
随机推荐
- 他们在军训,我在搞 OI(四)
(怎么自动变成两天一更了?) ——因为我菜啊 T_T Day 5 今天上午刷得爽啊!5 道 NOIP,前四题直接 1A,然而最后一题还是 WA 了一发才 A... 第一题是个简单的贪心,题意大概是 n ...
- Linux 日志文件utmp、wtmp、lastlog、messages
1.有关当前登录用户的信息记录在文件utmp中:==who命令 2.登录进入和退出纪录在文件wtmp中:==w命令 3.最后一次登录文件可以用lastlog命令察看: 4.messag ...
- shell脚本的调试技巧
请参考文章:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html 读后的感觉,还是用shell的选项灵活,方便. ...
- 关于Linux下进程间使用共享内存和信号量通信的时的编译问题
今天在编译一个使用信号量实现进程同步时,出现了库函数不存在的问题.如下图 编译结果实际上是说,没include相应的头文件,或是头文件不存在(即系统不支持该库函数) 但我man shm_open是可以 ...
- codeigniter load_class
2014年7月7日 14:33:36 函数定义在 system/core/common.php中 使用方法是 load_class('Hooks', 'core'): 在core目录内寻找Hooks类 ...
- 转MYSQL学习(二) 运算符
MYSQL中的运算符很多,这一节主要讲MYSQL中有的,而SQLSERVER没有的运算符 安全等于运算符(<=>) 这个操作符和=操作符执行相同的比较操作,不过<=>可以用来判 ...
- 将文件放到Android模拟器的SD卡
1.打开DDMS页面2.打开File Explorer页,如果没有,在Window –> Show View –>File Explorer3.一般就在mnt –> sdcard中4 ...
- 中石油-高精度除法-java版
问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec 内存限制: 512 MB提交: 19 解决: 15[提交][状态][讨论版] 题目描述 修罗王聚集了庞大的暗元素以施展隐匿魔法 ...
- 在qq中可以使用添加标签功能
而在sina中不可以,现在就保持一致吧!那么每天使用的日志主要是记录工作项目上的问题还有生活的感受
- undefined reference to libiconv_open'
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor': /home/king/php-5.2.13/ext/iconv ...