然而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. MySQL在线更改binlog格式

    今天变更jboss报错如下: SQLWarning ignored: SQL state ', message [Unsafe statement written to the binary log ...

  2. python2.7源码或第三方包里埋藏的坑(持续更新)

    1.psutil包,aix环境下,如果进程命令过长的话,程序无法取得完整的进程命令,测试代码如下 import psutil proc=psutil.Process(11534558) pidDict ...

  3. concurrent.futures- 启动并行任务

    python因为其全局解释器锁GIL而无法通过线程实现真正的平行计算.这个论断我们不展开,但是有个概念我们要说明,IO密集型 vs. 计算密集型. IO密集型:读取文件,读取网络套接字频繁. 计算密集 ...

  4. ubuntu 下抓包

    笔记本安装了ubuntu 14.04, 利用笔记本的网卡进行抓包时,需要将网卡配置为monitor模式. (1)关闭无线网卡 sudo ifconfig wlan0 down (2)将无线网卡配置为m ...

  5. Android判断网络是否打开,并打开设置网络界面

    由于Android的SDK版本不同所以里面的API和设置方式也是有少量变化的,尤其是在Android 3.0 及后面的版本,UI和显示方式也发生了变化,现在就以打开网络设置为例,同大家分享一下: 1. ...

  6. Gitlab的SSH配置(linux和windows双版本)

    1. 步骤 1.首先现在电脑端安装好git,windows端请安装Git for Windows,Linux端请自行网上查询(Ubuntu: sudo apt-get install git)   2 ...

  7. Go语言学习之路(持续更新中)

    菜鸟 Go语言教程 教程(RUNOOB.COM):http://www.runoob.com/go/go-tutorial.html Go全球官网:https://golang.org/ (2018- ...

  8. PYTHON-函数的定义与调用,返回值,和参数

    函数基础'''1. 什么是函数 具备某一功能的工具->函数 事先准备工具的过程--->函数的定义 遇到应用场景,拿来就用---->函数的调用 函数分类两大类: 1. 内置函数 2. ...

  9. 目标检测-yolo

    论文下载:http://arxiv.org/abs/1506.02640 代码下载:https://github.com/pjreddie/darknet 1.创新点 端到端训练及推断 + 改革区域建 ...

  10. Zookeeper单机安装部署与配置(二)

    在上篇博客中简单介绍了Zookeeper的特点和应用场景,详情可参考:<Zookeeper简介(一)>,那么这篇博客我们介绍一下关于Zookeeper的单机模式安装步骤与配置. 环境准备 ...