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 ...
随机推荐
- ubuntu打不开图形界面,显示run in low_graphic mode
我上次因为这个问题重装了ubuntu,结果没两天又有问题了,这次我看到了未重启前的提示,说我的硬盘空间剩0kb,所以我心有余悸的想办法留空间,十分担心会有上次的问题出现,为了验证我的想法,我重启了一下 ...
- 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
冬令营被平衡树坑了之后,打算苦练一番数据结构(QAQ). 先是打了一下想学好久的替罪羊树. 替罪羊树实现方法很简单,就是在不满足平衡条件的时候暴力重构子树. 调试小结: 1.删除操作分两类情况:如果某 ...
- 每天一个命令day1【diff 命令】(具体实例看下一节)
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...
- awk内置字符串函数 awk 格式化输出
i249 ~ # ps -efl|head -1|awk '$2~/S/{print $2}'Si249 ~ # ps -efl|awk '$2~/S/{print $2}'SSSS printf - ...
- 《ASP.NET1200例》ListView 控件与DataPager控件的结合<二>
ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示 为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己 ...
- EtherCAT报文寻址
EtherCAT通信通过主站发送EtherCAT数据帧读写从站设备的内部存储区实现. 一个EtherCAT网段相当于一个以太网设备,主站首先通过以太网数据帧头的MAC地址寻址到网段,然后使用Ether ...
- Windows下配置Tomcat服务器
Tomcat服务器是Apache开源基金会的一个项目,tomcat不仅能作为静态文件的服务器,也可以作为JSP/Servlet的web容器,而且使用广泛,性能也不错,那么下面来配置一个基本的基于tom ...
- Java for LeetCode 145 Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...
- codeforces A. Flipping Game 解题报告
题目链接:http://codeforces.com/problemset/problem/327/A 题意是输入一个只有0和1的序列,要求找出一个合理的区间,在这个区间里面把0变成1,1变成0,使得 ...
- ext上传文件到mysql上
不废话,上代码: controller如下: /** * 上传附件 * @param request * @param baseBlob * @param response */ @RequestMa ...