主要问题
- 是否存在这个数组
- 排序
解决办法
- map<vector , int> 查看是否存在
- 自定义排序sort第三参数
易错:cin、cout多次使用时间长,选择scanf,printf
代码
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 1e4 + 10;
int n , m;
struct Node{
vector<int> arr;
int cnt = 0;
}node[N];
bool cmp (const Node & a , const Node & b)
{
if(a.cnt == b.cnt)
{
for(int i = 0 ; i < m ; i ++)
{
if(a.arr[i] == b.arr[i])continue;
return a.arr[i] < b.arr[i];
}
}
return a.cnt > b.cnt;
}
int main()
{
int x;
scanf("%d%d" , &n , &m);
map < vector <int> , int > map1;
for(int i = 0 ; i < n ; i ++)
{
vector <int> tmp;
for(int j = 0 ; j < m ; j ++)
{
scanf("%d" , &x);
tmp.push_back(x);
}
map1[tmp]++;
}
int i = 0;
for(auto a : map1)
node[i].arr = a.first , node[i ++].cnt = a.second;
sort(node , node + i , cmp);
printf("%d\n" , i);
for(int j = 0 ; j < i ; j ++)
{
printf("%d " , node[j].cnt);
for(int p = 0 ; p < m - 1 ; p ++)
printf("%d " , node[j].arr[p]);
printf("%d\n" , node[j].arr[m - 1]);
}
return 0;
}