HDU 1872 稳定排序

 

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;

}

 

你可能感兴趣的:(HDU)