题意不难理解,实现过程不太容易想到方法
这里用的是结构体中套vector,重新定义排序方法,然后加上map判重实现
#include<bits/stdc++.h>
using namespace std;
int res = 1;
const int N = 1e5+10;
struct hh
{
vector<int> a;
int x;
}h[N];
bool cmp(struct hh l,struct hh r)
{
if(l.x != r.x) return l.x > r.x;
for(int i=0;i<l.a.size();i++)
{
if(l.a[i] != r.a[i]) return l.a[i] < r.a[i];
}
}
map<vector<int>,int>mp;
int main()
{
int n,k; scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)
{
vector<int> b;
for(int j=0;j<k;j++)
{
int x;cin >> x;
b.push_back(x);
}
if(mp[b]){
h[mp[b]].x ++;
}else{
mp[b] = res;
h[mp[b]].x ++;
h[mp[b]].a = b;
res ++;
}
}
printf("%d\n",res-1);
sort(h+1,h+res,cmp);
for(int i=1;i<res;i++)
{
printf("%d ",h[i].x);
for(int j=0;j<h[i].a.size();j++)
{
if(j != 0) printf(" ");
printf("%d",h[i].a[j]);
}
puts("");
}
return 0;
}