序列
题目描述
给定一个长度为 n 的序列 a1,a2,…,an。每个位置 i 有一个修改代价 ci:对于任意一个位置,你可以花费代价 ci,将该位置的 ai 修改为任意一个非负整数。
你希望花费最小的总代价进行若干次修改,使得修改后的序列满足:每一个前缀和都不是 r 的倍数。
形式化地,令 si=∑j=1iaj。你需要保证修改后的序列对所有 1≤i≤n 都有 simodr=0。
求最小的总代价。
输入格式
第一行一个整数 T(1≤T≤105),表示测试数据组数。
对于每组测试数据:
- 第一行两个正整数 n,r(1≤n≤5⋅105,2≤r≤109)。
- 第二行 n 个非负整数 a1,a2,…,an(0≤ai<r),表示原序列。
- 第三行 n 个非负整数 c1,c2,…,cn(0≤ci≤109),表示每个位置的修改代价。
保证所有测试数据的 ∑n 不超过 5⋅105。
输出格式
对于每组测试数据,输出一行一个整数,表示最小总代价。
样例 #1
样例输入 #1
3
3 7
1 2 4
1 1 1
4 5
1 1 1 1
1 2 3 4
5 2
0 1 0 1 0
1 1 1 1 1
样例输出 #1
1
0
3
样例 #1 解释
- 第一组:初始前缀和为 1,3,0(mod7),第三个前缀和是 7 的倍数。将 a3 改为 3(花费 c3=1),前缀和变为 1,3,6,均不为 7 的倍数,代价为 1。
- 第二组:前缀和为 1,2,3,4,均不为 5 的倍数,无需修改,代价为 0。
- 第三组:r=2,需保证每个前缀和都是奇数。可依次将 a1 改为 1、a2 改为 0、a4 改为 0,代价为 1+1+1=3。
数据范围与子任务
| 子任务 |
测试点 |
特殊性质 |
| 1 |
1~4 |
∑n≤10 |
| 2 |
5~10 |
∑n≤5000,r≤5000 |
| 3 |
11~15 |
∑n≤5000 |
| 4 |
16 |
ci≤1 |
| 5 |
17~20 |
无特殊限制 |
对于所有数据:1≤n≤5⋅105,2≤r≤109,0≤ai<r,0≤ci≤109,∑n≤5⋅105。