- 水王争霸
- 2017-06-06 20:38:55 @
用冒泡快排优先队列试了三次,要么第四个点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 条评论
目前还没有评论...