题目链接
这个题看起来思路一下子就来了,但是就是过不了全部样例,起初自己用string来存后面的数字,用map映射,但是总是有样例过不了,后来看到了大佬的博客真的绝绝子,属实自己对STL了解太少了。。 这里有要注意,vector竟然可以比较大小!!!还有可以用来作为map的关键字!!!
#include<bits/stdc++.h>
using namespace std;
map<vector<int>,int>mp;
vector<int>v;
bool cmp(pair<vector<int>,int> p1,pair<vector<int>,int> p2){
if(p1.second!=p2.second) return p1.second>p2.second;
else {
return p1.first<p2.first;
}
}
int main(){
int n,m;
cin>>n>>m;
getchar();
for(int i=0;i<n;i++){
v.clear();
for(int j=1;j<=m;j++){
int t;
scanf("%d",&t);
v.push_back(t);
}
mp[v]++;
}
cout<<mp.size()<<endl;
vector<pair<vector<int>,int>>P(mp.begin(),mp.end());
sort(P.begin(),P.end(),cmp);
for(auto i : P){
cout<<i.second;
for(int j=0;j<m;j++){
cout<<" "<<i.first[j];
}
cout<<endl;
}
return 0;
}
|