A85976.「WC2021」表达式求值
NOI/NOI+/CTSC
通过率:0%
时间限制:1.00s
内存限制:512MB
题目描述
定义二元操作符 <:对于两个长度都为 n 的数组 A,B(下标从 1 到 n),A<B 的结果也是一个长度为 n 的数组,记为 C。则有 C[i]=min(A[i],B[i])(1≤i≤n)。
定义二元操作符 >:对于两个长度都为 n 的数组 A,B(下标从 1 到 n),A>B 的结果也是一个长度为 n 的数组,记为 C。则有 C[i]=max(A[i],B[i])(1≤i≤n)。
现在有 m(1≤m≤10)个长度均为 n 的整数数组 A0,A1,…,Am−1。给定一个待计算的表达式 E,其满足 E 中出现的每个操作数都是 A0,A1,…,Am−1 其中之一,且 E 中只包含 < 和 > 两种操作符(< 和 > 的运算优先级相同),因此该表达式的结果值也将是一个长度为 n 的数组。
特殊地,表达式 E 中还可能出现操作符 ?,它表示该运算符可能是 < 也可能是 >。因此若表达式中有 t 个 ?,则该表达式可生成 2t 个可求确定值的表达式,从而可以得到 2t 个结果值,你的任务就是求出这 2t 个结果值(每个结果都是一个数组)中所有的元素的和。你只需要给出所有元素之和对 109+7 取模后的值。
输入格式
第一行两个整数 n,m,分别表示数组长度与数组个数。
第 2∼m+1 行每行 n 个用空格分隔的整数,第 i 行第 j 个元素代表 Ai−2[j](2≤i≤m+1,1≤j≤n)。
最后一行一个字符串 S,表示表达式 E。S 中只包含字符 0 到 9、(、)、<、>、?,数字字符表示操作数的下标,例如字符 2 表示表达式中的操作数为 A2。
输出格式
仅一行一个整数,表示所有 2t 个表达式的结果,它们的元素之和模 109+7 的值。
输入输出样例
输入#1
2 3 3 1 2 2 2 3 1>2?0
输出#1
9
输入#2
3 3 4 3 2 2 3 1 2 3 3 1?0>2?0
输出#2
36
输入#3
5 3 354 321 414 205 257 458 996 554 635 730 681 374 903 966 349 2<0>2<0>(1>2)>(0<0)
输出#3
4276
说明/提示
对于所有测试点:1≤n≤5×104,1≤m≤10,∣S∣≤5×104,1≤Ai[j]≤109。
每个测试点的具体限制见下表:
| 测试点编号 | n≤ | ∣E∣≤ | 特殊限制 |
|---|---|---|---|
| 1∼4 | 5 | 10 | S 中不包含左右括号和问号 |
| 5∼7 | 10 | 100 | S 中不包含问号 |
| 8∼9 | 2 | 5000 | S 中不包含左右括号 |
| 10∼11 | 2 | 5000 | 无 |
| 12∼14 | 5000 | 5000 | S 中不包含问号 |
| 15∼17 | 5×104 | 5×104 | S 中不包含问号 |
| 18∼20 | 5×104 | 5×104 | 无 |