然而AK失败了,就是因为这道摸你题:(最后一篇题解了吧?QAQ)

Solution

模拟多项式乘法,其中的运算处理很像高精度,不过第$i$位代表的就是$x^i$前面的系数了。

好像去年的时候就讲了表达式的计算(又开始玻璃心了QAQ),开双栈,一个栈表示数字,一个栈表示运算符。然后碰到右括号或者运算级低就弹栈。这里只是把数字的栈变成了多项式的栈而已QAQ

然后该怎么搞就怎么搞,虽然下面的代码并没有处理符号前驱的问题,然而数据中没有出。

作为纪念的摸你题了QAQ

Code

#include<bits/stdc++.h>
#define mod 10007
using namespace std; bool pd(char t) { return isdigit(t) || t == 'x'; }
int level(char t) { if(t == '+' || t == '-') return ; if(t == '*') return ; return ; } char s[], q[];
int tp, tp1, i; struct Node {
int v[];
int siz;
Node operator + (const Node &a) const {
Node c;
memset(c.v, , sizeof(c.v));
c.siz = max(siz, a.siz);
for(int i = ; i <= c.siz; i ++) c.v[i] = (v[i] + a.v[i]) % mod;
while(c.siz && c.v[c.siz] == ) c.siz --;
return c;
}
Node operator - (const Node &a) const {
Node c;
memset(c.v, , sizeof(c.v));
c.siz = max(siz, a.siz);
for(int i = ; i <= c.siz; i ++) c.v[i] = ((v[i] - a.v[i]) % mod + mod) % mod;
while(c.siz && c.v[c.siz] == ) c.siz --;
return c;
}
Node operator * (const Node &a) const {
Node c;
memset(c.v, , sizeof(c.v));
c.siz = siz + a.siz;
for(int i = ; i <= siz; i ++)
for(int j = ; j <= a.siz; j ++)
c.v[i + j] = (c.v[i + j] + v[i] * a.v[j] % mod) % mod;
while(c.siz && c.v[c.siz] == ) c.siz --;
return c;
}
} q1[], zero; Node read() {
Node nd = zero;
if(s[i] == 'x') {
nd.siz = ;
nd.v[] = ;
i ++;
return nd;
} else {
int now = ;
while(isdigit(s[i])) now = now * + s[i] - '', i ++;
nd.v[] = now;
return nd;
}
} void cal() {
Node b = q1[tp1 --], a = q1[tp1 --];
char t = q[tp --];
if(t == '*') q1[++tp1] = a * b;
else if(t == '+') q1[++tp1] = a + b;
else if(t == '-') q1[++tp1] = a - b;
} void push_char(char t) {
if(level(t) >= ) {
while(tp && level(t) <= level(q[tp])) cal();
q[++tp] = t;
} else if(t == '(') q[++tp] = t;
else {
while(q[tp] != '(') cal();
tp --;
}
} int main() {
freopen("simplify.in", "r", stdin);
freopen("simplify.out", "w", stdout);
scanf("%s", s + ); int len = strlen(s + );
s[] = '(', s[++len] = ')';
while(i <= len) {
if(pd(s[i])) q1[++tp1] = read();
else push_char(s[i ++]);
}
printf("%d\n", q1[].siz);
for(int i = ; i <= q1[].siz; i ++) printf("%d\n", q1[].v[i]);
}

【11.9校内测试】【倒计时1天】【ak欢乐赛】【多项式计算模拟】的更多相关文章

  1. 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】

    Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...

  2. 【11.5校内测试】【倒计时5天】【DP】【二分+贪心check】【推式子化简+线段树】

    Solution 非常巧妙的建立DP方程. 据dalao们说题目明显暗示根号复杂度??(反正我是没看出来 因为每次分的块大小一定不超过$\sqrt n$,要不然直接每个位置开一个块答案都才为$n$. ...

  3. 【11.1校内测试】【快速幂DP】【带权并查集】【模拟】

    Solution $jzy$大佬用了给的原根的信息,加上矩阵快速幂150行QAQ 然而$yuli$大佬的做法不仅好懂,代码只有50行! 快速幂的思想,把m看成要组成的区间总长度,每次将两段组合得到新的 ...

  4. 【8.30校内测试】【找规律模拟】【DP】【二分+贪心】

    对于和规律或者数学有关的题真的束手无策啊QAQ 首先发现两个性质: 1.不管中间怎么碰撞,所有蚂蚁的相对位置不会改变,即后面的蚂蚁不会超过前面的蚂蚁或者落后更后面的蚂蚁. 2.因为所有蚂蚁速度一样,不 ...

  5. 【10.11校内测试】【优先队列(反悔贪心)】【莫队】【stl的应用??离线处理+二分】

    上次做过类似的题,原来这道还要简单些?? 上次那道题是每天可以同时买进卖出,所以用两个优先队列,一个存买进,一个存卖出(供反悔的队列). 这道题实际上用一个就够了???但是不好理解!! 所以我还是用了 ...

  6. c++11 function bind 测试。

    实验小结 1)function 是一个模板类.有函数指针成员.可以看作安全型函数指针. template<typename _Res, typename... _ArgTypes> cla ...

  7. Python学习总结 11 使用tempest测试OpenStack

    1, 什么是Tempest tempest ├── api # API的测试集 ├── cli # OpenStack的命令行工具测试集 ├── common # 一些公共的工具类和函数 ├── sc ...

  8. 11.14java课堂测试

    源代码: import java.*; import java.util.*; import java.io.File; import java.io.FileInputStream; import ...

  9. 【9.7校内测试】【二分+spfa】【最长上升子序列】【状压DP+贪心(?)】

    刘汝佳蓝书上的题,标程做法是从终点倒着$spfa$,我是二分答案正着$spfa$判断可不可行.效果是一样的. [注意]多组数据建边一定要清零啊QAQ!!! #include<iostream&g ...

随机推荐

  1. jenkins findbugs流编码问题:DM_DEFAULT_ENCODING

    报错信息: MessageParserUtil.java:122, DM_DEFAULT_ENCODING, Priority: High Dm: Found reliance on default ...

  2. Oracle 正则表达式函数-REGEXP_REPLACE

    背景 当初写oracle的一个存储过程,以前不知道sql里也有正则表达式,关于正则表达式教程很多了,这里只是记录下Oracle也有这个功能,下次再有类似需求用这个处理的确方便很多. 想起存储过程,就想 ...

  3. 反向代理负载均衡之APACHE

    反向代理负载均衡之APACHE 一.反向代理1.1 介绍反响代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将 ...

  4. 使用ajax上传表单(带文件)

    在使用form表单的时候上传文件+表单,会使得页面跳转,而在某些时候不希望跳转,只变化页面中的局部信息 通过查找资料,可以使用FormData进行ajax操作. FormData介绍:XMLHttpR ...

  5. win10下vscode配置sftp

    sftp配置 1.在vscode中下载sftp插件 在vscode中快捷键 ctrl+shift+P 打开指令窗口,输入extension:install,回车,左侧即打开扩展安装的界面  在搜索框中 ...

  6. tyvj1051 选课

    /* 分组背包+树形dp:以树的深度作为阶段,以节点编号作为一维状态, 思路:首先dp[u][t]表示选择以第u门课为根,选了t门课的最大值, 状态转移方程dp[u][t]=max(所有儿子中凑出t- ...

  7. codeforce 139E

    成段更新+离散化才能过,数据好强.. 单点更新挂在了test27,下次做到成段更新再来做! /* 期望=存活概率*点权值/100 ans=sum(期望) 离散化树木权值,数轴统计累加可能倒下的树木概率 ...

  8. PyCharm 新建文件时默认添加作者时间等

    将内容添加到Python Script 右侧的文本框中: 路径: File → Setting → Editor → File and Code Templates → Python Script # ...

  9. python 全栈开发,Day34(基于UDP协议的socket)

    昨日内容回顾 网络的基础概念arp协议 :通过ip地址找到mac地址五层模型 : 应用层 传输层 网络层 数据链路层 物理层tcp协议 : 可靠的 面向连接 全双工 三次握手 四次挥手udp协议 : ...

  10. JDK和CGLIB生成动态代理类的区别

     关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象. 按照代理对象的创建时期不同,可以分为两种: 静态代 ...