为什么三种算法第四个点或第五个点会WA,求大神指点

用冒泡快排优先队列试了三次,要么第四个点WA,要么第五个点WA,求大神指点.
下面WA了第四个点:

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,string> sss;
int i,j,k,n;//循环变量和n 
string name,n1,n2;//name,n1,n2都是是临时变量 
sss ss;//fisrt指向数字长度,second储存字符串 
struct cmp{
    bool operator () (sss x,sss y){//比较 
        if(x.first<y.first) return true;//先比较数字位数 
        if(x.first>y.first) return false;
        n1.clear(),n2.clear();
        n1=x.second.substr(0,x.first),n2=y.second.substr(0,y.first);
        j=0,k=x.first;//再比较数字,返回x<y 
        while(j<k){
            if(n1[j]<n2[j]) return true;
            if(n1[j]>n2[j]) return false;
            j++;
        }
        n1.clear(),n2.clear();
        n1=x.second.substr(x.first),n2=y.second.substr(y.first);
        j=0,k=min(n1.size(),n2.size());
        while(j<k){//再比较名字,返回x>y 
            if(n1[j]>n2[j]) return true;
            if(n1[j]<n2[j]) return false;
            j++;
        }
        return false;
    }
};
priority_queue<sss,vector<sss>,cmp> s;//优先队列直接在线排序 
int main(){
    ios_base::sync_with_stdio(false);//优化输入输出 
    cin>>n;
    for(i=1;i<=n;i++){
        ss.second.clear();
        name.clear();
        cin>>name;
        cin>>ss.second;
        ss.first=ss.second.size();
        ss.second+=name;
        s.push(ss);
    }
    for(i=1;i<=n;i++){
        ss=s.top();
        s.pop();
        name=ss.second.substr(ss.first);
        cout<<name<<endl;
    }
    return 0;
}

0 条评论

目前还没有评论...

信息

ID
1257
难度
6
分类
其他 | 排序 点击显示
标签
(无)
递交数
4117
已通过
1161
通过率
28%
被复制
3
上传者