题目:
思路分析:
简单的结构体排序+STL的set map 的运用
代码实现:
/*
*@Author: GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
/*
* __----~~~~~~~~~~~------___
* . . ~~//====...... __--~ ~~
* -. \_|// |||\\ ~~~~~~::::... /~
* ___-==_ _-~o~ \/ ||| \\ _/~~-
* __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
* _-~~ .=~ | \\-_ '-~7 /- / || \ /
* .~ .~ | \\ -_ / /- / || \ /
* / ____ / | \\ ~-_/ /|- _/ .|| \ /
* |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
* ' ~-| /| |-~\~~ __--~~
* |-~~-_/ | | ~\_ _-~ /\
* / \ \__ \/~ \__
* _--~ _/ | .-~~____--~-/ ~~==.
* ((->/~ '.|||' -_| ~~-/ , . _||
* -_ ~\ ~~---l__i__i__i--~~_/
* _-~-__ ~) \--______________--~~
* //.-~~~-~_--~- |-------~~~~~~~~
* //.-~~~--\
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 神兽保佑 永无BUG
*/
const int MAX=100010;
int n,m;
struct node{
vector<int>f;
int num;
int id;
}e[MAX];
bool cmp(node a,node b){
if(a.num!=b.num){
return a.num>b.num;
}
return a.f<b.f;
}
set<vector<int>>st;
vector<int>v[MAX];
map<vector<int>,int>mp;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int x;
cin>>x;
v[i].push_back(x);
}
mp[v[i]]++;
st.insert(v[i]);
}
cout<<st.size()<<endl;
int ans=0;
for(auto it:st){
e[ans].f=it;
e[ans].num=mp[it];
e[ans].id=ans++;
}
// cout<<"ans = "<<ans<<endl;
sort(e,e+ans,cmp);
for(int i=0;i<ans;i++){
cout<<e[i].num;
for(int j=0;j<e[i].f.size();j++){
cout<<" "<<e[i].f[j];
}
if(i!=ans-1) cout<<endl;
}
}