View Code of Problem 5

#include <stdio.h>
#define MaxArr 100000
#define flag 1
void TestData(int i);
void Input(int i);
void Output(int i);
int Judge1(int i,int j,int k);
int Judge2(int i,int j,int k);


struct Test{
	int n;
	int m;
	int a[MaxArr];
	int b[MaxArr]; 
	int number[MaxArr];//排序
}test[10];

int main() {
	int t;
	scanf("%d",&t);
	int size = t;
	for(int i=0;i<t;i++){
		Input(i);
		TestData(i);
		printf("\n");
	}
	for(int i=0;i<size;i++)
		Output(i); 	
	return 0;
}
void exchange(int i,int j,int k){
	int temp = test[i].number[j];
	test[i].number[j] = test[i].number[k];
	test[i].number[k] = temp;
}

void TestData(int i){
	int select=0;
	for(int j=0;j<test[i].n-1;j++)//找前m个 
		for(int k=j+1;k<test[i].n;k++)			
			if(Judge1(i,j,k)||Judge2(i,j,k)) 
				exchange(i,j,k);		
}

int Judge1(int i,int j,int k){//苹果多 
	if(test[i].a[j]<test[i].a[k])
		return 1;
	else 
		return 0;
}

int Judge2(int i,int j,int k){//苹果相同,梨多 
	if((test[i].a[j]==test[i].a[k])&&(test[i].b[j]<test[i].b[k]))
		return 1;
	else 
		return 0;
}

void Input(int i){
	scanf("%d %d",&test[i].n,&test[i].m);
	for(int j=0;j<test[i].n;j++){
		scanf("%d %d",&test[i].a[j],&test[i].b[j]);
		test[i].number[j]=j+1;	
	}
}

void Output(int i){
	for(int j=0;j<test[i].m;j++)
		printf("%d ",test[i].number[j]);
	printf("\n");
}

Double click to view unformatted code.


Back to problem 5