[JZOJ3588]中山市选2014J语言(表达式解析+栈)

Posted Philchieh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JZOJ3588]中山市选2014J语言(表达式解析+栈)相关的知识,希望对你有一定的参考价值。

Description

  J语言作为一门编程语言,诞生于20世纪90年代..............

  好学的小H今天又学到了一种新东西——J语言。显然,J语言的背景已经被小H忘得一干二净了,但是小H仍然记得J语言中有趣的数学计算——向量计算。

  在J语言中,向量,标量和操作符是基本的组成元素,但是在小H的印象中,J语言中最有趣的就是它的语法,好学的小H也曾经认真研究J语言的语法并且进行了化简。在小H简化了J语言的语法中,用X来表示向量,用N来表示向量X的长度。

  简化版J语言的规则如下:

  操作符中有有二元操作符,“+”,“-”,“*”,而对应操作数可以是两个标量,两个向量,或则一个标量和一个向量。(当两个向量运算时,为对应位分别计算,例如(1,2,3) * (2,3,4) = (2,6,12),当一个标量和一个向量运算时,当成标量和向量的每一位运算,例如(1,2,3) * 5 = (5,10,15)

  操作符中也有一元操作符,包括负数运算符“-”和平方运算符“*:”,其操作数可以为标量和向量。(向量取平方运算符时表示为每一位都取平方,例如*:(1, 2, 3) = (1, 4, 9),标量取平方时即数学意义上的平方,例如*:4 = 16)

  求和运算符“+/”,该运算符只能作用于向量,能让向量求和为标量,例如+/(1,2,3) = 6

  J操作符的运算顺序为从右到左,并且忽略优先级,需要优先计算的部分将用括号改变优先顺序(允许嵌套括号)。

  小H化简的J语言还有一个限制——最高阶数的限制,我们这样定义一个表达数的阶数:

  标量(数字, ‘N‘ ,求和运算符“+/”的结果)的阶数为0;‘X‘的复杂度为1 ;加减法的阶数是其操作数的阶数的最大值;乘法的阶数是其操作数的阶数的总和;

  一元平方的阶数是其操作数的阶数的两倍。

  例如,表达式“(3-+/*:*:X)-X**:X”的阶数是3 ,而它的子表达式“*:*:X”的阶数是4 。

  小H找到了一道以前写过简化版J语言的表达式,但是别忘了小H只是喜欢思考而不喜欢计算。现在,小H想请你帮他计算一下给定表达式的答案,并且将最终答案取模10^9(必须保证结果非负,即如果求余后是负数要加上10^9), 当然小H还清晰的记得他写下的表达式在运算过程中阶数不会超过10。

Main

  给你一个式子和向量,按照规则进行运算,并求其结果。

Analysis

  考虑到阶数比较小,可以用系数和次数来表示一个多项式。于是记录各个以x为主元的次数(0~10)其系数,设其为P。

  因为常数项和多项式有诸多不同,想办法将他们归为一类、所以,常数项表示为{x,0,0,0,0,....},多项式表示为{x,x,x,x,x,x...},其实x代表任何数。

  可能存在常数项与多项式的运算,考虑一种不同类型数之间计算的相似的计算方法。可以0次方项系数为向量各个位置的常数项,这样

Solution

  预处理出X^k向量每个点的和

以上是关于[JZOJ3588]中山市选2014J语言(表达式解析+栈)的主要内容,如果未能解决你的问题,请参考以下文章

[贪心]JZOJ 3230 佛山市选2013树环转换

BZOJ 2440: [中山市选2011]完全平方数

2440: [中山市选2011]完全平方数

[中山市选2011]杀人游戏

BZOJ 2438 中山市选2011 杀人游戏

BZOJ 2463: [中山市选2009]谁能赢呢?