比赛时没做出这题太可惜了。

赛后才反应过来这就是个中缀表达式求值,数字栈存的不是数字而是多项式。

而且,中缀表达式求值很水的,几行就可以搞定。

 #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(中缀表达求值)的更多相关文章

  1. 刁肥宅详解中缀表达式求值问题:C++实现顺序/链栈解决

    1. 表达式的种类 如何将表达式翻译成能够正确求值的指令序列,是语言处理程序要解决的基本问题,作为栈的应用事例,下面介绍表达式的求值过程. 任何一个表达式都是由操作数(亦称运算对象).操作符(亦称运算 ...

  2. FZU 2215 Simple Polynomial Problem(简单多项式问题)

    Description 题目描述 You are given an polynomial of x consisting of only addition marks, multiplication ...

  3. C语言中缀表达式求值(综合)

    题前需要了解的:中缀.后缀表达式是什么?(不知道你们知不知道,反正我当时不知道,搜的百度) 基本思路:先把输入的中缀表达式→后缀表达式→进行计算得出结果 栈:"先进先出,先进后出" ...

  4. 第四章 栈与队列(c4)栈应用:中缀表达式求值

  5. C++之字符串表达式求值

    关于字符串表达式求值,应该是程序猿们机试或者面试时候常见问题之一,昨天参加国内某IT的机试,压轴便为此题,今天抽空对其进行了研究. 算术表达式中最常见的表示法形式有 中缀.前缀和 后缀表示法.中缀表示 ...

  6. 中缀表达式变后缀表达式、后缀表达式(逆波兰)求值(python版本)

    定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算 ...

  7. C++ 中缀转后缀表达式并求值

    //中缀转后缀 #include<iostream> #include<stack> using namespace std; int prio(char x){ ; ; ; ...

  8. nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】

    郁闷的C小加(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...

  9. 中缀表达式转逆波兰式(后缀表达式)求值 C++ Stack

    给一个包含小数的中缀表达式 求出它的值 首先转换为后缀表达式然后利用stack求出值 转换规则: 如果字符为'('  push else if 字符为 ')' 出栈运算符直到遇到‘(' else if ...

随机推荐

  1. 他们在军训,我在搞 OI(四)

    (怎么自动变成两天一更了?) ——因为我菜啊 T_T Day 5 今天上午刷得爽啊!5 道 NOIP,前四题直接 1A,然而最后一题还是 WA 了一发才 A... 第一题是个简单的贪心,题意大概是 n ...

  2. Linux 日志文件utmp、wtmp、lastlog、messages

            1.有关当前登录用户的信息记录在文件utmp中:==who命令 2.登录进入和退出纪录在文件wtmp中:==w命令 3.最后一次登录文件可以用lastlog命令察看: 4.messag ...

  3. shell脚本的调试技巧

    请参考文章:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html 读后的感觉,还是用shell的选项灵活,方便. ...

  4. 关于Linux下进程间使用共享内存和信号量通信的时的编译问题

    今天在编译一个使用信号量实现进程同步时,出现了库函数不存在的问题.如下图 编译结果实际上是说,没include相应的头文件,或是头文件不存在(即系统不支持该库函数) 但我man shm_open是可以 ...

  5. codeigniter load_class

    2014年7月7日 14:33:36 函数定义在 system/core/common.php中 使用方法是 load_class('Hooks', 'core'): 在core目录内寻找Hooks类 ...

  6. 转MYSQL学习(二) 运算符

    MYSQL中的运算符很多,这一节主要讲MYSQL中有的,而SQLSERVER没有的运算符 安全等于运算符(<=>) 这个操作符和=操作符执行相同的比较操作,不过<=>可以用来判 ...

  7. 将文件放到Android模拟器的SD卡

    1.打开DDMS页面2.打开File Explorer页,如果没有,在Window –> Show View –>File Explorer3.一般就在mnt –> sdcard中4 ...

  8. 中石油-高精度除法-java版

    问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec  内存限制: 512 MB提交: 19  解决: 15[提交][状态][讨论版] 题目描述 修罗王聚集了庞大的暗元素以施展隐匿魔法 ...

  9. 在qq中可以使用添加标签功能

    而在sina中不可以,现在就保持一致吧!那么每天使用的日志主要是记录工作项目上的问题还有生活的感受

  10. 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 ...