题目背景
增加形式化题意。
稻花香里说丰年,听取蛙声一片。
题目描述
稻田里有 0, 1 两种类型的青蛙。他们排成了 a,b 两列。
Genius_Star 发现了这些青蛙,所以他决定将这两个青蛙队列分别划分为起止点相同的任意段,定义某一段的整齐度 T 为:
T(l,r)=i=l∑r[ai=bi]
其中 :[A] 表示若 A 命题为真则为 1,否则为 0。
则对于段 [l,r] 的带给 Genius_Star 的开心值为
W(l,r)=T(l,r)×(A(l,r)+B(l,r))
其中:
A(l,r) 表示在 a 序列的 [l,r] 区间中包含的 01 类型的子序列数量。
B(l,r) 表示在 b 序列的 [l,r] 区间中包含的 10 类型的子序列数量。
一个分段方案带给 Genius_Star 的开心值是所有小段带给他的开心值之和,你需要求出所有的分段方案带给他的开心值之和 s。
设分为了 k 段,第 i 段为 [li,ri](li≤ri),需要满足:
-
l1=1,rk=n。
-
∀i∈[1,k),ri+1=li+1。
则若两个分段的方案不同,当且仅当两个方案分的段数不同或者存在一个 i 使得 [li,ri]=[li′,ri′]。
由于 Genius_Star 不能过于开心,你还需要将答案对 109+7 取模。
形式化题意
给定一个两个序列 a,b 。定义
-
T(l,r) 为在区间 [l,r] 中 ai=bi 的个数。
-
A(l,r) 表示 a 序列在 [l,r] 区间中的 01 类型子序列个数。
-
B(l,r) 表示 b 序列在 [l,r] 区间中的 10 类型子序列个数。
-
W(l,r)=T(l,r)×(A(l,r)+B(l,r))。
其中:xy 类型子序列表示从区间左端点开始向右顺次选择两个元素(不要求连续),其中,第一个数是 x ,第二个数是 y。两个子序列不同当且仅当 x 或 y 所在位置不同。
现在你需要将两个序列划分成起止点相同的任意段,求所有划分方式的每段的 W 之和。
由于答案可能很大,你需要将答案对 109+7 取模。
输入格式
第一行,两个正整数 n,op。
当 op=0 时,则该测试点的 ai,bi 直接给出:
- 接下来 n 行,每行两个整数 ai,bi。
当 op=1 时,则该测试点的 ai,bi 将特殊生成:
-
第二行共五个整数 x1,y1,z1,f1,f2。
-
第三行共五个整数 x2,y2,z2,g1,g2。
则 fi,gi(i≥3) 满足:
fi=(fi−2×x1+fi−1×y1+z1)mod264gi=(gi−2×x2+gi−1×y2+z2)mod264那么:
-
ai 的值就是 f⌊64i−1⌋+3 转化为二进制后从低位到高位第 (i−1mod64)+1 位。
-
bi 的值就是 g⌊64i−1⌋+3 转化为二进制后从低位到高位第 (i−1mod64)+1 位。
上述数据生成方式仅是为了减少输入量大小,标准算法不依赖于该生成方式。
输出格式
输出共一行。一个整数 s,表示所有的分段方案带给 Genius_Star 的开心值之和。
提示
样例解释 #1:
只有按照 [1,3] 分段时,W(1,3)=1。
样例解释 #4:
可以得到:
f1=1,f2=1,f3=2
g1=1,g2=1,g3=3
得到:
(f3)2=(00010)2
(g3)2=(00011)2
则:
a={0,1,0,0,0}
b={1,1,0,0,0}
故答案为 22。
数据范围:
本题采用捆绑测试。
其中子任务 0 为样例,记 0 分。
Subtask 编号 |
n |
op |
特殊性质 |
得分 |
1 |
≤100 |
=0 |
无 |
5 |
2 |
≤104 |
10 |
3 |
≤106 |
A |
4 |
B |
5 |
=1 |
无 |
25 |
6 |
≤5×107 |
40 |
特殊性质 A: T(l,r)=r−l+1。
特殊性质 B:有且仅有一个 x 满足 ax=bx。
对于 100% 的数据,保证 1≤n≤5×107,1≤x1,x2,y1,y2,z1,z2,f1,f2,g1,g2≤1018。