自己写的程序,比网上的一些要简明,用到了C++自带的stable_sort稳定排序,只需要比较一次score判断是否error和比较一次name判断是否stable即可!
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string>
#include <string.h>
#include <cstring>
using namespace std;
struct NS
{
int id;
string name;
int score;
/*bool operator <(const NS a)const
{
if(a.score!=score)
return a.score<score;
return id<a.id;
}*/
}stu[300+2],res[300+2];
int cmp( const NS &a ,const NS &b)
{
return a.score > b.score;
//return (*(NS *)a).score - (*(NS *)b).score ;
}
int main()
{
int n;
while(cin>>n)
{
bool isError=false;
bool notStable=false;
for(int i=0; i<n; i++)
{
stu[i].id=i;
cin>>stu[i].name>>stu[i].score;
}
for(int i=0; i<n; i++)
{
res[i].id=i;
cin>>res[i].name>>res[i].score;
}
stable_sort(stu,stu+n,cmp);
for(int i=0; i<n; i++)
{
if(stu[i].score!=res[i].score)
{
isError=true;
}
}
for(int i=0; i<n; i++)
{
if(res[i].name!=stu[i].name){
notStable=true;
}
}
if(isError){
cout<<"Error"<<endl;
for(int i=0;i<n;i++)
{
cout<<stu[i].name<<" "<<stu[i].score<<endl;
}
}
else if(notStable){
cout<<"Not Stable"<<endl;
for(int i=0;i<n;i++)
{
cout<<stu[i].name<<" "<<stu[i].score<<endl;
}
}
else{
cout<<"Right"<<endl;
}
}
return 0;
}