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 ...
随机推荐
- [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法
不好的实践 函数或方法的接收者(即绑定到特殊关键字this的值)是由调用者的语法决定的.方法调用语法将方法被查找的对象绑定到this变量,(可参阅之前文章<理解函数调用.方法调用及构造函数调用之 ...
- 最长公共子串 NYOJ 36
http://acm.nyist.net/JudgeOnline/problem.php?pid=36 最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度: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 ...
- ios抓包官方文档
OS X Programs OS X supports a wide range of packet trace programs, as described in the following sec ...
- 【OpenStack】OpenStack系列2之KeyStone详解
源码下载.依赖安装 参考:http://www.oschina.net/question/565065_66271 https://github.com/yongluo2013/osf-opensta ...
- js指定标签的id只能添加不能删除
<body> <form id="form1" runat="server"> <div> <input id=&qu ...
- Java异常与异常处理简单使用
异常就是程序运行过程中阻止当前方法或作用域继续执行的问题: 任何程序都不能保证完全正常运行,当发生异常时,需要我们去处理异常,特别是一些比较重要的场景,异常处理的逻辑也会比较复杂,比如:给用户提示.保 ...
- JavaScript或jQuery模拟点击超链接和按钮
有时候我们需要页面自动点击超链接或者按钮,可以用js或者jQuery利用程序去点击,方法很简单,按钮或超链接代码如下: <a href="url" target=" ...
- codeforces A. Sereja and Bottles 解题报告
题目链接:http://codeforces.com/problemset/problem/315/A 题目意思:有n个soda bottles,随后给出这n个soda bottles的信息.已知第 ...
- HDU 1452 Happy 2004 (逆元+快速幂+积性函数)
G - Happy 2004 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...