未通过原因:
1.比较函数一开始忘记写return
2.输入的数据是一连串,要在while循环中
3.修改代码时,忘记删除原先的。
总结:题目未AC时要耐心检查代码,不要一直认为自己的思路没问题,很大可能是代码书写的细节问题!
方法一:使用sort函数加自定义比较规则,给每组数据编号
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct E {
string name;
int score;
int id;
};
int cmp1(E a,E b) {
if(a.score!=b.score) {
return a.score<b.score;
} else {
return a.id<b.id;
}
}
int cmp2(E a,E b) {
if(a.score!=b.score) {
return a.score>b.score;
} else {
return a.id<b.id;
}
}
int main() {
int n;int flag;
while(cin>>n>>flag) {
vector<E> v;
string s;
int d;
for(int i=0; i<n; i++) {
cin>>s;
cin>>d;
E e;
e.name=s;
e.score=d;
e.id=i;
v.push_back(e);
}
if(flag==1) {
sort(v.begin(),v.end(),cmp1);
} else {
sort(v.begin(),v.end(),cmp2);
}
for(int i=0; i<n; i++) {
cout<<v[i].name<<" "<<v[i].score<<endl;
}
}
return 0;
}
方法二:直接使用stable_sort() 实现稳定排序。
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct E {
string name;
int score;
};
int cmp1(E a,E b) {
return a.score<b.score;
}
int cmp2(E a,E b) {
return a.score>b.score;
}
int main() {
int n;int flag;
while(cin>>n>>flag) {
vector<E> v;
string s;
int d;
for(int i=0; i<n; i++) {
cin>>s;
cin>>d;
E e;
e.name=s;
e.score=d;
v.push_back(e);
}
if(flag==1) {
stable_sort(v.begin(),v.end(),cmp1);
} else {
stable_sort(v.begin(),v.end(),cmp2);
}
for(int i=0; i<n; i++) {
cout<<v[i].name<<" "<<v[i].score<<endl;
}
}
return 0;
}