这题目有个3分的傻逼测试点。
你把注释打开,把数组的输出关闭,他对了。
你把直接复制代码跑,错了!
我把输入的数组直接用字符串读进来,存到uop的s中,然后在需要输出整个数组的时候,直接输出,按道理一点问题都不该有的。但是这个后台的傻逼测试样例,它不过。给我整无语了。
#include<bits/stdc++.h>
using namespace std;
class uop{
public:
string s;
int num;
vector<int> nums;
};
bool cmp(uop &a ,uop& b){
if(a.num!=b.num) return a.num>b.num;
for(int i=0;i<a.nums.size();i++){
if(a.nums[i]!=b.nums[i]) return a.nums[i]<b.nums[i];
}
return false;
}
int main(){
map<string,uop> tg;
int N,M;
cin>>N>>M;
for(int i=0;i<N;i++){
string temp="",op;
vector<int> otp;
for(int j=0;j<M;j++){
if(j==0){
cin>>temp;
otp.push_back(atoi(temp.c_str()));
}
else{
cin>>op;
temp+=" "+op;
otp.push_back(atoi(op.c_str()));
}
}
if(tg.find(temp)!=tg.end()){
tg[temp].num++;
}else{
tg[temp].num=1;
tg[temp].nums=otp;
tg[temp].s=temp;
}
}
vector<uop> dat;
for(auto it2=tg.begin();it2!=tg.end();it2++){
uop kl;
dat.push_back(it2->second);
}
printf("%d\n",dat.size());
sort(dat.begin(),dat.end(),cmp);
for(int i=0;i<dat.size();i++){
printf("%d",dat[i].num);
// for(int t:dat[i].nums){
// printf(" %d",t);
// }
printf(" %s",dat[i].s.c_str());
printf("\n");
}
return 0;
}