#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 到 5for (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;// 继续往右扩展,直到某一行不再包含数字 iwhile (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;
}