输入样例:
7 3
35 28 74
-1 -1 22
28 74 35
-1 -1 22
11 66 0
35 28 74
35 28 74
输出样例:
4
3 35 28 74
2 -1 -1 22
1 11 66 0
1 28 74 35
用map来存数据,map的第一个元素用vector来存,是每个功能输出的数据,第二个数据用int,是同样功能的个数。需要了解的是vector是可以直接用于排序的
输入结束之后,再把map存在一个结构体类型的vector中,然后对这个vector进行排序,然后输出即可。
#include<bits/stdc++.h>
using namespace std;
map<vector<int>, int> mp; // 用map统计输入系列测试输入的种类以及个数
struct no{ //将map的元素重新整理为结构体,并对结构体重载小于号
vector<int> v;
int ct;
bool operator < (const no&vv) const{
if(ct==vv.ct) return v<vv.v;
return ct>vv.ct;
}
};
vector<no> ans; //不推荐用结构体数组,所以用动态数组vector存答案ans
int main(){
cin>>n>>m;
while(n--){
vector<int> v;
for(int i=0;i<m;i++){
int num;
cin>>num;
v.push_back(num);
}
if(mp.count(v)) mp[v]++;
else mp[v]=1;
}
cout<<mp.size()<<endl; //不同功能的个数
for(auto i: mp){
no nn;
nn.ct=i.second;
nn.v = i.first;
ans.push_back(nn);
}
sort(ans.begin(), ans.end()); //排序后输出
for(auto i:ans){
cout<<i.ct;
for(auto j:i.v) cout<<" "<<j;
cout<<endl;
}
return 0;
}