View Code of Problem 5

#include<stdio.h>

int main(void){
    int t;
  	scanf("%d",&t);
  	while(t--){
          int a,b,m,n; //a是苹果,b是梨,在n个篮子中选m个
          int apple[100000],li[100000],sum[100000];
          int i,j,k,flag,temp,sumTest;

  		scanf("%d%d",&n,&m);  //n个篮子,选其中m个篮子
          	for(i=0;i<n;++i){
          		scanf("%d%d",&a,&b);
                  	apple[i] = a;
                  	li[i] = b;
                  	sum[i] = a*10+b;   //sum数组求权值
          	}
          //使sum数组前m个数有序排列
         	 for(j=0;j<m;++j){
                   	flag = 0;
                   	for(k=n-1;k>j;--k)
                          if(sum[k]>sum[k-1]){
                          	temp = sum[k-1];
                            	sum[k-1] = sum[k];
                            	sum[k] = temp;
                            	flag = 1;
                          }
                   if(!flag)
                     break;
         	 }
          	//挑选出前m个权值最大的篮子
          for(j=0;j<m;++j){
            for(k=0;k<n;++k){
              	sumTest = apple[k]*10+li[k];
              if(sumTest==sum[j]){
                printf("%d ",k+1);
              	break;
              }
            }
          }
          printf("\n");
        }
	return 0;
}

Double click to view unformatted code.


Back to problem 5