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; }