AP. 完善程序题-0000

    客观题

完善程序题-0000

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述:最短覆盖子串

给定一个长度为 n (1 ≤ n ≤ 10^5) 的整数序列 a[],序列中所有元素的值在 1 到 m 之间(m ≤ n)。 再给定一个长度为 k (1 ≤ k ≤ m) 的“目标集合” b[],b 中元素互不相同。

要求:找到一个最短的连续子段,使得该子段包含 b 中的所有元素至少一次。 如果不存在,输出 0。

输入:

第一行 n m k

第二行 n 个整数,表示 a[]

第三行 k 个整数,表示 b[]

输出:

最短子段长度

示例:

输入:

10 5 3

1 3 2 5 4 3 2 1 5 3

2 3 5

输出:

3

#include <iostream>
using namespace std;
const int MAXN = 100005;
int a[MAXN];
bool need[MAXN];
int cnt[MAXN];
int main() {
    int n, m, k;
    cin >> n >> m >> k;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i <= m; i++) {
        need[i] = false;
    }
    for (int i = 0; i < k; i++) {
        int x;
        cin >> x;
        need[x] = true;
    }
    int left = 0;
    int satisfied = 0;
    int min_len = n + 1;
    for (int right = 0; right < n; right++) {
        if (need[a[right]]) {
            cnt[a[right]]++;
            if (_____(1)_____) {
                satisfied++;
            }
        }
        while (_____(2)_____ && left <= right) {
            int cur_len = _____(3)_____;
            if (cur_len < min_len) {
                min_len = cur_len;
            }
            if (need[a[left]]) {
                cnt[a[left]]--;
                if (cnt[a[left]] == 0) {
                    _____(4)_____;
                }
            }
            _____(5)_____;
        }
    }
    if (min_len == n + 1) {
        cout << 0 << endl;
    } else {
        cout << min_len << endl;
    }
    return 0;
}
  1. 程序第 (1) 处应填入? {{ select(1) }}
  • cnt[a[right]] == 1
  • cnt[a[right]] > 0
  • cnt[a[right]] == 0
  • a[right] == need[a[right]]
  1. 程序第 (2) 处应填入? {{ select(2) }}
  • satisfied < k
  • satisfied == k
  • left < right
  • cnt[a[left]] > 0
  1. 程序第 (3) 处应填入? {{ select(3) }}
  • right - left
  • right - left + 1
  • right - left - 1
  • left - right + 1
  1. 程序第 (4) 处应填入? {{ select(4) }}
  • satisfied++
  • satisfied--
  • satisfied = 0
  • satisfied = cnt[a[left]]
  1. 程序第 (5) 处应填入? {{ select(5) }}
  • right++
  • left++
  • left--
  • satisfied++

答案:ABBBB

市赛题汇总

未参加
状态
已结束
规则
ACM/ICPC
题目
373
开始于
2026-4-24 0:00
结束于
2026-4-24 2:00
持续时间
2 小时
主持人
参赛人数
0