#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n; // 输入队伍人数(行数)
vector<int> maxx(5, 0); // 用于记录每个数字(1~5)出现的最大连续段长度
// 定义二维数组 team,n 行 5 列
vector<vector<int>> team(n, vector<int>(5));
// 输入每一行的5个值
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 5; j++)
{
cin >> team[i][j];
}
}
// 遍历每个数字 i,从 1 到 5
for (int i = 1; i <= 5; i++)
{
int l = 0;
// 用滑动窗口查找最大连续区间
while (l < n)
{
// 找到第一个包含数字 i 的合法起点
while (l < n)
{
bool valid = false;
for (int j = 0; j < 5; j++)
{
if (team[l][j] == i)
{
valid = true;
break;
}
}
if (valid)
break;
l++; // 不合法,继续右移
}
int r = l;
// 继续往右扩展,直到某一行不再包含数字 i
while (r < n)
{
bool valid = false;
for (int j = 0; j < 5; j++)
{
if (team[r][j] == i)
{
valid = true;
break;
}
}
if (!valid)
break;
r++; // 向右扩展合法区间
}
// 更新最大长度
maxx[i - 1] = max(r - l, maxx[i - 1]);
l = r; // 从不合法行之后继续找
}
}
// 输出每个数字的最大连续长度
for (int i = 0; i < 5; i++)
{
cout << maxx[i] << " ";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
//vector<<int><vector<int>> a;
int main()
{
int n;
cin >> n;
vector<int> maxx(5,0);
//vector<<char> vector<char>> a();
//vector<<char> vector<char>> (n,vector<char> (5,0));
vector<vector<int>> team(n ,vector<int>(5));
//team = vector<<int>vector<int>> (n,vector<int> (5,0));
for(int i=0;i<n;i++)
{
for(int j=0;j<5;j++)
{
cin >> team[i][j];
}
}
for(int i=1;i<=5;i++)
{
int l=0;
while(l<n)
{
//找到第一个合法的起点 连续区间的左下标
while(l<n)
{
bool valid =false;
for(int j=0;j<5;j++)
{
if(team[l][j] == i )
{
valid = true;
break;
}
}
if(valid)
break;
l++;
}
int r=l;
//向右扩展区间
while(r<n)
{
bool valid =false;
for(int j=0;j<5;j++)
{
if(team[r][j] == i )
{
valid = true;
break;
}
}
if(!valid)
break;
r++;
}
maxx[i-1] = max(r-l,maxx[i-1]);
l = r;
}
}
for(int i=0;i<5;i++)
{
cout << maxx[i] << " ";
}
return 0;
}
模块化
#include <bits/stdc++.h>
using namespace std;
// 判断某队伍中是否包含该成员
bool hasMember(const vector<int>& team, int member) {
return find(team.begin(), team.end(), member) != team.end();
}
//other
bool hasMember(const vector<int>& team, int member) {
for (int x : team) {
if (x == member) {
return true;
}
}
return false;
}
int main() {
int n;
cin >> n;
vector<vector<int>> team(n, vector<int>(5));
vector<int> maxx(5, 0); // 记录每个成员的最大连续区间长度
// 读取队伍信息
for(int i = 0; i < n; ++i) {
for(int j = 0; j < 5; ++j) {
cin >> team[i][j];
}
}
// 枚举每个编号(1 到 5)
for(int i = 0; i < 5; ++i) {
int l = 0;
while(l < n) {
// 找到第一个包含成员 i+1 的队伍
while(l < n && !hasMember(team[l], i + 1)) l++;
int r = l;
// 扩展右边界
while(r < n && hasMember(team[r], i + 1)) r++;
maxx[i] = max(maxx[i], r - l);
l = r;
}
}
// 输出结果
for(int i = 0; i < 5; ++i) {
cout << maxx[i] << " ";
}
return 0;
}