http://acm.hdu.edu.cn/showproblem.php?pid=1872

稳定排序,用一个变量idx记录位置保持稳定

View Code
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <map>
using namespace std;
typedef struct L{
    char name[51];
    int score;
    int idx;
}L;
L kk[301];
L hh[301];
int cmp(const void*a,const void*b)
{
    L*c=(L*)a;
    L*d=(L*)b;
    if(c->score==d->score)
        return c->idx-d->idx;
    return d->score-c->score;
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%s%d",kk[i].name,&kk[i].score);
            kk[i].idx=i;
        }
        qsort(kk,n,sizeof(L),cmp);
        for(int i=0;i<n;i++)
            scanf("%s%d",hh[i].name,&hh[i].score);
        int flag=1,flagx=1;
        for(int i=0;i<n;i++)
        {
            if(strcmp(kk[i].name,hh[i].name) && kk[i].score==hh[i].score)
            {
                flag=0;
            }
            if(strcmp(kk[i].name,hh[i].name) && kk[i].score!=hh[i].score)
            {
                flag=flagx=0;
            }
        }
        if(flag && flagx)
        {
            puts("Right");
            continue;
        }
        if(flag==0 && flagx==0) 
        {
            puts("Error");
            for(int i=0;i<n;i++)
                printf("%s %d\n",kk[i].name,kk[i].score);
        }
        else
        {
            puts("Not Stable");
            for(int i=0;i<n;i++)
                printf("%s %d\n",kk[i].name,kk[i].score);
        }
    }
    return 0;
}