View Code of Problem 5

#include<stdio.h>
#include<stdlib.h>
typedef struct{
	int apple;
	int li;
	int index;
}Fruit;
/*int cmp(const void *_a,const void *_b){
	Fruit* a=(Fruit*)_a;
	Fruit* b=(Fruit*)_b;
	if(a->apple==b->apple&&a->li==b->li){
		if(a->index>b->index)
			return 1;
		else
			return -1;
	}
	if(a->apple==b->apple){
		if(a->li>b->li)
			return -1;
		else
			return 1;
	}
	else{
		if(a->apple>b->apple)
			return -1;
		else
			return 1;
	}
}*/
int cmp(const void * a,const void * b)
{
    Fruit *lanzi1=(Fruit *)a;
	Fruit *lanzi2=(Fruit *)b;
	int fruit1 = lanzi1->apple;
	int fruit2 = lanzi2->apple;
	if (fruit1==fruit2)
	{
		fruit1=lanzi1->li;
		fruit2=lanzi2->li;
		if (fruit1==fruit2)
			return lanzi1->index-lanzi2->index;
	}
	return fruit2-fruit1;
}
int main(void){
	int t;
	scanf("%d",&t);
	while(t--){
		int n,m;
		scanf("%d %d",&n,&m);
		Fruit fru[n];
		for(int i=0;i<n;i++){
			scanf("%d %d",&fru[i].apple,&fru[i].li);
			fru[i].index=i+1;
		}
		qsort(fru,n,sizeof(fru[0]),cmp);
		for(int i=0;i<m;i++){
			if(i!=m-i)
			printf("%d ",fru[i].index);
			else
			printf("%d",fru[i].index);
		}
		printf("\n");
	}
} 

Double click to view unformatted code.


Back to problem 5