#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
const int size = 10;
class group{
public:
int row;
int rank;
int size;
int number;
int m[10];
bool operator<=(group &v);
bool operator>(group &v);
void sort();
};
bool group::operator<=(group &v){
for(int j = 0;j<rank;j++){
if(m[j]>v.m[j])
return false;
}
return true;
}
bool group::operator>(group &v){
for(int j = 0;j<rank;j++){
if(m[j]<=v.m[j])
return false;
}
return true;
}
void group::sort(){
for(int i = 0;i<rank;i++){
for(int j = i;j<rank;j++){
if(m[i]>m[j]){
int temp = m[i];
m[i] = m[j];
m[j] = temp;
}
}
}
}
bool sm(group &v,const group &u){
int z = 0;
if(v.m[z]>u.m[z])
return false;
else{
while(v.m[z]==u.m[z]){
z++;
}
if(v.m[z]>u.m[z])
return false;
else
return true;
}
}
int main(){
int a,b;
cin >> a;
cin >> b;
group c[10];
vector<group> d;
for(int k = 0;k<a;k++){
c[k].row = a;
c[k].rank = b;
}
for(int i = 0;i<a;i++){
for(int j = 0;j<b;j++)
cin >> c[i].m[j];
c[i].number = i+1;
}
for(int k = 0;k<a;k++){
c[k].sort();
d.push_back(c[k]);
}
sort(d.begin(),d.end(),sm);
int u[10];
int f[10][10];
int max = 0;
int sign = 0;
for(int t = 0;t<a;t++){
int n = 0;
int z = t+1;
int i = t;
f[t][n] = d[t].number;
while(z<a){
while(z<a&&d[i]<=d[z]){
f[t][n+1] = d[z].number;
i++;
z++;
n++;
}
if(z<a){
z++;
}
}
if(z>1&&d[a-2]<=d[a-1]&&f[t][i-1]==d[a-2].number){
f[t][n+1] = d[a-1].number;
n++;
}
u[t] = n;
if(u[t]>max){
max = u[t];
sign = t;
}
}
cout << max<<" ";
cout << endl;
for(int j = 0;j<max;j++){
cout << f[sign][j]<<" ";
}
cout << endl;
}
【C++】OJ103
最新推荐文章于 2024-08-08 17:12:48 发布