简单算法题
题目信息
时间限制: 1s
空间限制: 256M
输入文件: algorithm.in
输出文件: algorithm.out
题目描述
基于括号序列可以出许多有趣的简单算法题,一个合法括号序列的定义如下:
() 是合法的。
- 如果括号序列
X 是合法的,那么括号序列 (X) 是合法的。
- 如果括号序列
X 和 Y 都是合法的,那么括号序列 XY 是合法的
例如,括号序列 ()()(()) 是合法的,()))()(( 是不合法的。
定义一个生成括号序列的操作流程:
- 给定长度为 n 的整数序列 c0,c1,…,cn−1,依次执行 n 次操作构建括号序列。
- 初始时括号序列为空,第 i+1 次操作时,若 i 为偶数,则往当前括号序列末尾加人 ci 个左括号;否则就往当前括号序列末尾加 ci 个右括号。
例如,序列 3211 构建出来的括号序列为 ((())()。
注意,按照上述流程构建出来的括号序列 S 不一定是合法的,但是 S 的子串有可能是合法括号序列,请求出 S 的非空子串是合法括号序列的数量。
即求有多少个区间 [l,r](1≤l≤r≤∣S∣), 使得 S[l,r] 是合法括号序列。
输入格式
本题采用如下方式生成输入数据:
输入仅一行,8 个整数 n,x,y,z,m0,m1,c0,c1。
对于 i>1,ci=(ci−1×x+ci−2×y+z)modMi+1,其中当 i 为偶数时 Mi=m0,当 i 时奇数时 Mi=m1。
整数序列 c 的含义如题所述。
输出格式
一行一个整数表示 S 中合法的非空括号子串的数量。
样例
样例输入 1
文本
10 686962104 149902149 5232363 10 4 7 3
样例输出 1
数据范围
1≤n≤107,0≤x,y,z≤109,1≤c0≤m0≤109,1≤c1≤m1≤109 subtask 1(8pts):n≤20,max{m0,m1}≤500subtask2(16pts):n≤5000,max{m0,m1}≤4000 subtask 3(8pts):n≤20 subtask 4(16pts):n≤5000 subtask 5(8pts):n≤106,m1=1 subtask 6(28pts):n≤106 subtask 7(16pts): 无限制