http://acm.hdu.edu.cn/showproblem.php?pid=1872
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct STU
{
char no[100];
int score;
};
STU buf[305],tmp[305];
bool cmp(STU A,STU B)
{
return A.score>B.score;
}
int main()
{
int n,i,j;
while (scanf("%d",&n)!=EOF)
{
int flag1=true,flag2=true; //flag1对应排序是否正确,flag2对应排序是否稳定
for (i=1;i<=n;i++) //buf保存待排数据
{
scanf("%s%d",buf[i].no,&buf[i].score);
}
stable_sort(buf+1,buf+1+n,cmp); //稳定排序
for (i=1;i<=n;i++) //tmp保存样例排序后的数据
{
scanf("%s%d",tmp[i].no,&tmp[i].score);
}
for (i=1;i<=n;i++)
{
for (j=i+1;j<=n;j++)
{
if (tmp[j].score>tmp[i].score) //若排序不对
{
flag1=false;
break;
}
}
if (flag1==false)
{
break;
}
}
for (i=1;i<=n;i++) //若tmp排序和稳定排序后结果(编号顺序)不同
{
if ( strcmp( tmp[i].no, buf[i].no) )
{
flag2=false;
break;
}
}
if (flag1==false) //排序错误
{
printf("Error\n");
for (i=1;i<=n;i++)
{
printf("%s %d\n",buf[i].no,buf[i].score);
}
}
else if (flag1==true&&flag2==false) //排序正确但是不稳定
{
printf("Not Stable\n");
for (i=1;i<=n;i++)
{
printf("%s %d\n",buf[i].no,buf[i].score);
}
}
else
printf("Right\n");
}
return 0;
}