Advertisement

上海计算机学会2022年11月月赛C++丙组T3最长平台

阅读量:
题目描述

给定一个整数数列 a1​,a2​,…,an​,请找出最长平台。所谓平台,就是指数列中一段连续的、完全相等的数字,单个数字也可以成为一个平台。最长平台可能不止一个,在找到最长平台的同时,输出最长平台的数量。

输入格式

第一行:单个整数 n
第二行:a1​,a2​,…,an​

输出格式

两个整数:表示最长平台的长度与最长平台的数量

数据范围
  • 对于 50%50% 的数据,n≤1000
  • 对于 100%100% 的数据,n≤500,000
  • 1≤ai​≤1,000,000
样例数据

输入:

7
2 2 2 1 3 3 3

输出:

3 2

说明:

最长平台为2 2 2或3 3 3

输入:

5
3 1 4 1 5

输出:

1 5

说明:

每个数字单独成一个平台

题解

本题关键点:数组需要多循环一次,保证最后一个数字的最长平台数量更新;还要判断跟原来最长平台一样长则sum+1 。

代码如下。

复制代码
 #include <iostream>

    
 using namespace std;
    
 int main() {
    
 	int n;
    
     cin >> n;
    
     int a[n];
    
     int maxlen = 0; //初始化最长平台长度
    
 	int sum = 0; //初始化最长平台个数
    
     for (int i = 1; i <= n; i++) {
    
     cin >> a[i];
    
     }
    
     int len = 0;
    
     for(int i = 1; i <= n + 1; i++) {
    
     	//如果跟上一个数字相同
    
     if (a[i] == a[i - 1]) {
    
         len++;
    
     } else {
    
         if(len > maxlen) {
    
             maxlen = len;
    
             sum = 1;/
    
         } else if(len == maxlen) {
    
             sum++;
    
         }
    
         len = 1;
    
     }
    
     }
    
     cout << maxlen << " " << sum<<endl;
    
     return 0;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~