本文主要是介绍上海计算机学会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;
}
这篇关于上海计算机学会2022年11月月赛C++丙组T3最长平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!