bdfz_2024_summer/day2/U111091/U111091.md
2024-08-03 10:34:27 +08:00

121 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 区间2段覆盖
## 题目描述
有 $n$ 个村庄坐落在数轴上,坐标为 $x[1...n]$。村庄之间有 $n-1$ 条道路,其中有些道路是土路,有些是高速公路。具体地,第 $i$ 个村庄和第 $i+1$ 个村庄之间只有一条道路,要么是土路、要么是高速公路,并且输入会告诉所有 $n-1$ 条道路的种类。
现在有 $k(k\le 2)$ 个铺路计划,每个铺路计划可以在数轴上 **任意选择一段长度$\le m$** 的区间 $[l,r]$,将其中间全部变成高速公路。注意区间端点可以任意选择,可以选在村庄处、村庄之间,甚至可以是小数。
请问该如何铺路,使得从 $x[1]$ 走到 $x[n]$ 路径上的土路总长度最小。
## 输入格式
第一行1个整数 $T$,代表有 $T$ 组数据
每组数据第一行 3 个整数 $n,k,m$
第二行 $n$ 个整数 $x[1,2,...,n]$,保证 $x[1]=0, x[i-1]\le x[i]$
第三行 1 个长度 $n-1$ 的 `01`字符串,代表 $n-1$ 条路的种类,`0` 代表高速公路,`1` 代表土路。
## 输出格式
输出 $T$ 行对于每组数据输出1个整数代表答案
## 自检样例
### 输入
```
1
2 1 2
2 3
0
```
### 输出
```
0
```
## 样例 #1
### 样例输入 #1
```
5
3 2 13
0 6 80
11
7 2 11
0 50 80 83 86 97 97
111011
2 2 43
0 83
1
9 2 47
0 26 34 40 71 75 79 98 99
11111101
10 2 36
0 14 28 29 30 37 55 64 65 81
011101000
```
### 样例输出 #1
```
54
72
0
1
0
```
## 样例 #2
### 样例输入 #2
```
2
5 2 3
0 1 2 3 5
1011
4 2 3
0 1 5 6
111
```
### 样例输出 #2
```
0
0
```
## 样例 #3
### 样例输入 #3
```
见下发样例
```
### 样例输出 #3
```
```
## 提示
对于100%的数据,$1\le n\le 50000, 0\le m,x[i]\le 10^9,1\le T\le 100$
subtask1(20pts)$n\le 500m,x[i]\le 10^5k=1$
subtask2(20pts)$n\le 500m,x[i]\le 10^5k=2$
subtask3(20pts)$n\le 50000m,x[i]\le 10^9k=1$
subtask4(40pts)$n\le 50000m,x[i]\le 10^9k=2$
**【注意】请使用快速的读入方式**