首页 > 试题广场 >

小红的三带一

[编程题]小红的三带一
  • 热度指数:709 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红定义一个长度为  的数组为“三带一”,当且仅当其包含三个相同的元素和另一个不同的元素。
现在小红拿到了一个长为 n 的数组,他想知道该数组最多包含多少个互不相交的“三带一”连续子数组,请你帮帮他。

输入描述:
第一行输入一个整数 n\left(4 \leqq n \leqq 2 \times 10^5 \right) 。
第二行输入 n 个整数 a_1,a_2, \dots ,a_n \left(1 \leqq a_i \leqq 2 \times 10^5 \right) 代表数组的元素


输出描述:
输出一个整数,代表“三带一”连续子数组的数量。
示例1

输入

8
1 1 4 1 4 9 9 9

输出

2
int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i ++) cin >> a[i];
    int sum = 0;
    for(int i = 3; i < n; i ++) {
        unordered_map<int, int> b;
        b[ a[i - 3] ] ++;
        b[ a[i - 2] ] ++;
        b[ a[i - 1] ] ++;
        b[ a[i] ] ++;
        bool f1 = false, f2 = false;
        for(auto [x, y] : b) {
            if(y == 1) f1 = true;
            if(y == 3) f2 = true;
        }
        if(f1 && f2) sum ++, i += 3;
    }
    cout << sum;
}
发表于 2025-12-06 18:41:58 回复(0)