This commit is contained in:
1 parent
ad876116a5
commit
4b50c059cd
2 files changed
+143
No files matched your search
+48
@@ -0,0 +1,48 @@
|
|||||||
|
#include<bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
int n, p, q;
|
||||||
|
int a[2005];
|
||||||
|
int f[2005][2005];
|
||||||
|
bool check(int w) {
|
||||||
|
for(int i = 0; i <= p; ++i) {
|
||||||
|
for(int j = 1; j <= n; ++j) {
|
||||||
|
f[i][j] = 0x7f7f7f7f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i = 1; i <= n; ++i) {
|
||||||
|
int s = upper_bound(a + 1, a + n + 1, a[i] - w) - a - 1;
|
||||||
|
int t = upper_bound(a + 1, a + n + 1, a[i] - 2 * w) - a - 1;
|
||||||
|
f[0][i] = f[0][t] + 1;
|
||||||
|
for(int j = 1; j <= p; ++j) {
|
||||||
|
f[j][i] = min(f[j - 1][s], f[j][t] + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return f[p][n] <= q;
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
scanf("%d%d%d", &n, &p, &q);
|
||||||
|
for (int i = 1; i <= n; ++i)
|
||||||
|
{
|
||||||
|
scanf("%d", &a[i]);
|
||||||
|
}
|
||||||
|
if (p + q >= n)
|
||||||
|
{ // 若总数足够多,一个盯一个即可,固以下计算 p + q < 2000
|
||||||
|
printf("1\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
sort(a + 1, a + n + 1);
|
||||||
|
int l = 1, r = 1e9;
|
||||||
|
while(l < r) {
|
||||||
|
int mid = l + (r - l) / 2;
|
||||||
|
if(check(mid)) r = mid;
|
||||||
|
else l = mid + 1;
|
||||||
|
}
|
||||||
|
printf("%d\n", l);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
f i, k为仅用 i 个小区间处理完前 k 个点所用最少的大区间个数。
|
||||||
|
|
||||||
|
|
||||||
|
f{i, k} = min(f{i − 1, s}, f{i, t} + 1)
|
||||||
|
*/
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# P15823 [JOI Open 2013] 观影 / Watching
|
||||||
|
|
||||||
|
## 题目描述
|
||||||
|
|
||||||
|
澳大利亚有许多有趣的文化,例如各种体育运动和种类繁多的动物。你正试图观看在布里斯班的一条道路上举办的许多活动。
|
||||||
|
|
||||||
|
这条道路被划分为 $1\,000\,000\,000$ 个区段。这些区段从西到东编号为 $1, 2, \dots, 1\,000\,000\,000$。你想观看 $N$ 场活动。第 $i$ 场活动将在区段 $A_i$ 上举办。
|
||||||
|
|
||||||
|
为了观看这些活动,你准备了 $P$ 台小型摄像机和 $Q$ 台大型摄像机。你可以选择一个正整数 $w$ 作为拍摄参数。然后,一台小型摄像机可以拍摄**最多**连续 $w$ 个区段,一台大型摄像机可以拍摄**最多**连续 $2w$ 个区段。同一个区段可以被多台摄像机拍摄。你想拍摄所有举办活动的区段。由于预计会有很多人前往活动现场,出于安全考虑,你必须固定摄像机的位置,并且在活动期间不允许移动它们。参数 $w$ 越大,拍摄的成本就越高。因此,你希望最小化 $w$ 的值。
|
||||||
|
|
||||||
|
### 任务
|
||||||
|
|
||||||
|
编写一个程序,根据给定的活动信息和摄像机数量,确定能够拍摄所有活动所在区段所需的最小 $w$ 值。
|
||||||
|
|
||||||
|
## 输入格式
|
||||||
|
|
||||||
|
从标准输入读取以下数据。
|
||||||
|
|
||||||
|
- 输入的第一行包含三个以空格分隔的整数 $N, P, Q$。其中 $N$ 是活动的数量,$P$ 是小型摄像机的数量,$Q$ 是大型摄像机的数量。
|
||||||
|
- 接下来的 $N$ 行中,第 $i$ 行($1 \le i \le N$)包含一个整数 $A_i$,表示第 $i$ 场活动举办的区段编号。
|
||||||
|
|
||||||
|
## 输出格式
|
||||||
|
|
||||||
|
向标准输出写入一个整数,表示能够拍摄所有活动所在区段所需的最小 $w$ 值。
|
||||||
|
|
||||||
|
## 输入输出样例 #1
|
||||||
|
|
||||||
|
### 输入 #1
|
||||||
|
|
||||||
|
```
|
||||||
|
3 1 1
|
||||||
|
2
|
||||||
|
11
|
||||||
|
17
|
||||||
|
```
|
||||||
|
|
||||||
|
### 输出 #1
|
||||||
|
|
||||||
|
```
|
||||||
|
4
|
||||||
|
```
|
||||||
|
|
||||||
|
## 输入输出样例 #2
|
||||||
|
|
||||||
|
### 输入 #2
|
||||||
|
|
||||||
|
```
|
||||||
|
13 3 2
|
||||||
|
33
|
||||||
|
66
|
||||||
|
99
|
||||||
|
10
|
||||||
|
83
|
||||||
|
68
|
||||||
|
19
|
||||||
|
83
|
||||||
|
93
|
||||||
|
53
|
||||||
|
15
|
||||||
|
66
|
||||||
|
75
|
||||||
|
```
|
||||||
|
|
||||||
|
### 输出 #2
|
||||||
|
|
||||||
|
```
|
||||||
|
9
|
||||||
|
```
|
||||||
|
|
||||||
|
## 说明/提示
|
||||||
|
|
||||||
|
### 样例解释
|
||||||
|
|
||||||
|
在第一个样例中,当你选择 $w = 4$ 时,就可以拍摄所有活动所在的区段。例如,你可以用一台小型摄像机拍摄从区段 1 到 3 的区域,用一台大型摄像机拍摄从区段 11 到 18 的区域。
|
||||||
|
|
||||||
|
### 约束条件
|
||||||
|
|
||||||
|
所有输入数据满足以下条件。
|
||||||
|
|
||||||
|
- $1 \le N \le 2000$。
|
||||||
|
- $1 \le P \le 100\,000$。
|
||||||
|
- $1 \le Q \le 100\,000$。
|
||||||
|
- $1 \le A_i \le 1\,000\,000\,000$($1 \le i \le N$)。
|
||||||
|
|
||||||
|
### 子任务
|
||||||
|
|
||||||
|
#### 子任务 1 [50 分]
|
||||||
|
|
||||||
|
- 满足 $N \le 100$。
|
||||||
|
|
||||||
|
#### 子任务 2 [50 分]
|
||||||
|
|
||||||
|
- 无额外约束。
|
||||||
|
|
||||||
|
翻译由 DeepSeek V3.2 完成
|
||||||
Reference in new issue
Block a user