// ZGUOJ5.cpp : 定义控制台应用程序的入口点。 // #include<stdio.h> typedef struct ms { int apple; int li; int numer; }ms; void qsort1(ms a[],int n); void qsort2(ms a[],int first,int last); void qsort1(ms a[],int n) { int first=0,last=n-1; qsort2(a,first,last); } void qsort2(ms a[],int first,int last) { int tmp=first,i=first,j=last,flag=0; ms temp=a[first]; while(i<j) { if(flag==0) { if(a[j].apple>temp.apple) { a[tmp]=a[j]; tmp=j; flag=1; } else if(a[j].apple==temp.apple) { if(a[j].li>temp.li) { a[tmp]=a[j]; tmp=j; flag=1; } else if(a[j].li==temp.li) { if(a[j].numer<temp.numer) { a[tmp]=a[j]; tmp=j; flag=1; } else j--; } else j--; } else j--; } else { if(a[i].apple<temp.apple) { a[tmp]=a[i]; tmp=i; flag=0; } else if(a[i].apple==temp.apple) { if(a[i].li<temp.li) { a[tmp]=a[i]; tmp=i; flag=0; } else if(a[i].li==temp.li) { if(a[i].numer>temp.numer) { a[tmp]=a[i]; tmp=i; flag=0; } else i++; } else i++; } else i++; } } a[tmp]=temp; if(first<tmp-1) qsort2(a,first,tmp-1); if(tmp+1<last) qsort2(a,tmp+1,last); } ms yida[100001]; int main() { int t,n,m,i,j,sum1,sum2; scanf("%d",&t); for(i=0;i<t;i++) { sum1=0,sum2=0; scanf("%d%d",&n,&m); for(j=0;j<n;j++) { scanf("%d%d",&yida[j].apple,&yida[j].li); yida[j].numer=j+1; } qsort1(yida,n); for(j=0;j<m;j++) { printf("%d",yida[j].numer); if(j!=m-1) printf(" "); else printf("\n"); } } return 0; } |
Double click to view unformatted code.