#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;
}