GESP认证C++编程真题解析 | B4416 [GESP202509 四级] 最长连续段

欢迎大家订阅我的CSDN专栏算法题解:C++与Python实现
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[B4416 GESP202509 四级] 最长连续段 - 洛谷

【题目描述】

对于 $k$ 个整数构成的数组 $[b_1,b_2,…,b_k]$,如果对 $1≤i$$<$$k$ 都有 $b_{i+1}$$=$$b_{i+1}$,那么称数组 $b$ 是一个连续段。

给定由 $n$ 个整数构成的数组 $[a_1,a_2,…,a_n]$,你可以任意重排数组 $a$ 中元素顺序。请问在重排顺序之后,$a$ 所有是连续段的子数组中,最长的子数组长度是多少?

例如,对于数组 $[1,0,2,4]$,可以将其重排为 $[4,0,1,2]$,有以下 $10$ 个子数组:

$[4],[0],[1],[2],[4,0],[0,1],[1,2],[4,0,1],[0,1,2],[4,0,1,2]$其中除 $[4,0],[4,0,1],[4,0,1,2]$ 以外的子数组均是连续段,因此是连续段的子数组中,最长子数组长度为 $3$。

【输入】

第一行,一个正整数 $n$,表示数组长度。

第二行,$n$ 个整数 $a_1,a_2,…,a_n$,表示数组中的整数。

【输出】

一行,一个整数,表示数组 $a$ 重排顺序后,所有是连续段的子数组的最长长度。

【输入样例】

4
1 0 2 4

【输出样例】

3

【算法标签】

《洛谷 B4416 最长连续段》 #离散化# #排序# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;  // 定义数组最大长度

int n;                  // 输入数字的个数
int cur = 0;            // 记录去重后的数字个数
int maxn = 0;          // 存储最长连续序列的长度
int a[N];              // 存储去重后的数字
map<int, int> mp;      // 哈希表,用于判断数字是否重复

int main()
{
    // 输入数字个数
    cin >> n;

    // 输入数字并去重
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        
        // 如果数字未出现过,则加入数组
        if (mp[x] == 0)
        {
            a[++cur] = x;
        }
        
        // 标记数字已出现
        mp[x] = 1;
    }

    // 对去重后的数字进行排序
    sort(a + 1, a + cur + 1);

    // 计算最长连续序列的长度
    int cnt = 1;  // 当前连续序列的长度
    for (int i = 2; i <= cur; i++)
    {
        // 如果当前数字与前一个数字连续
        if (a[i] == a[i - 1] + 1)
        {
            cnt++;
        }
        // 如果不连续,则更新最大值并重置计数器
        else
        {
            maxn = max(maxn, cnt);
            cnt = 1;
        }
    }

    // 处理最后一个连续序列
    maxn = max(maxn, cnt);

    // 输出最长连续序列的长度
    cout << maxn << endl;

    return 0;
}

【运行结果】

4
1 0 2 4
3
posted @ 2026-01-14 15:03  热爱编程的通信人  阅读(0)  评论(0)    收藏  举报