这傻逼天梯赛啊!我整天被它后台的样例搞疯了!题干一直都说得不清不楚的,样例却是面面俱到,生怕参赛选手写的代码和他的相法有一丁点不同。
现在就这道题,我前面有一条博文https://blog.csdn.net/weixin_60705585/article/details/137547495?spm=1001.2014.3001.5502说我发现这个题目肯定存在一个坑爹的测试样例,这回我就这个问题进行了探索,确定出具体是什么问题了!
这个题目的后台测试样例里有一个样例存在输入为 “-0” 的存在,但是他样例输出的时候,他不输出“-0”,他输出“0”,我真的无语了!
我就是那个大冤种!
大家都是直接读int类型进来,然后int类型输出,过了。
我用string读,用string为哈希的key,然后在输出的时候,就不用遍历输出了,直接输出string就可以了,结果错了。
我真的是当时恼羞成怒了,浪费了我好长时间。天梯赛的测试样例真的是阴间啊!
然后一点点排查,最后发现这个问题:int输出对了,我将string输入作为string输出错了。
然后最近心态平稳了,想具体排除一下原因,写一堆测试代码。
最后,查出最后一个3分的样例中确实存在傻逼的“-0”输入的问题!
样输入是“-0”,输出是“0” ✔,跟他一样输出 ”-0“ ×。
真的是让人无语!
#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()));
//测试出确实存在傻逼的“-0”输入的样例
// if(op=="-0"){
// cout<<endl;
// }
}
}
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);
string uiop="";
for(int t:dat[i].nums){
uiop+=" "+to_string(t);
}
cout<<uiop<<endl;
}
return 0;
}