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

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

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

 #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. [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法

    不好的实践 函数或方法的接收者(即绑定到特殊关键字this的值)是由调用者的语法决定的.方法调用语法将方法被查找的对象绑定到this变量,(可参阅之前文章<理解函数调用.方法调用及构造函数调用之 ...

  2. 最长公共子串 NYOJ 36

    http://acm.nyist.net/JudgeOnline/problem.php?pid=36 最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ...

  3. JetBrains WebStorm 7.0 Build 131.202 Win/Mac/Liniux

    JetBrains WebStorm 7.0 Build 131.202 (Win/Mac/Liniux) | 121.6/106/133 Mb WebStorm 7 — Everything you ...

  4. ios抓包官方文档

    OS X Programs OS X supports a wide range of packet trace programs, as described in the following sec ...

  5. 【OpenStack】OpenStack系列2之KeyStone详解

    源码下载.依赖安装 参考:http://www.oschina.net/question/565065_66271 https://github.com/yongluo2013/osf-opensta ...

  6. js指定标签的id只能添加不能删除

    <body> <form id="form1" runat="server"> <div> <input id=&qu ...

  7. Java异常与异常处理简单使用

    异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...

  8. JavaScript或jQuery模拟点击超链接和按钮

    有时候我们需要页面自动点击超链接或者按钮,可以用js或者jQuery利用程序去点击,方法很简单,按钮或超链接代码如下: <a href="url" target=" ...

  9. codeforces A. Sereja and Bottles 解题报告

    题目链接:http://codeforces.com/problemset/problem/315/A 题目意思:有n个soda bottles,随后给出这n个soda bottles的信息.已知第 ...

  10. HDU 1452 Happy 2004 (逆元+快速幂+积性函数)

    G - Happy 2004 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Subm ...