一、题目
Description:
jlh很喜欢吃水果,苹果是他最喜欢的,其次是梨。他天天想着吃水果,竟然感动了女娲大神,女娲大神给了他n个篮子,让他选择其中的m个(m<=n)个篮子。每个篮子里有a个苹果和b个梨。请你们帮jlh选择篮子吧。
Input:
输入一个t(t<=10),表示有t组测试数据,再输入n和m(0=<m<=n<=100000),接下来的n行,输入a和b表示苹果和梨的数量。
Output:
按jlh选择的顺序(先选苹果多的,苹果数量相同选梨多的,两者相同选序号小的)篮子的序号(1-n),m个数用空格隔开。
Sample Input:
2 2 1 2 0 1 4 3 2 3 4 2 6 3 5
Sample Output:
1 3 1
二、代码
#include<stdio.h>
typedef struct basket
{
int num;
int apple;
int pear;
}basket;
int main()
{
int t;
scanf("%d", &t);
while (t--)//t组测试数据
{
int n, m;
basket BKT[10000];
scanf("%d%d", &n, &m);
for (long i = 0; i < n; i++)//n个篮子
{
int a, b;
scanf("%d%d", &a, &b);
BKT[i].apple = a;
BKT[i].pear = b;
BKT[i].num = i+1;
}
basket tmp = BKT[0];
for (int i = 0; i < n-1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
/*优先选苹果多的*/
if (BKT[j].apple< BKT[j + 1].apple)
{
tmp = BKT[j]; BKT[j] = BKT[j + 1]; BKT[j + 1] = tmp;
}
/*苹果相同,选梨多的*/
else if (BKT[j].apple == BKT[j + 1].apple && BKT[j].pear < BKT[j + 1].pear)
{
tmp = BKT[j]; BKT[j] = BKT[j + 1]; BKT[j + 1] = tmp;
}
/*苹果梨一样,选序号小的*/
else if (BKT[j].apple == BKT[j + 1].apple && BKT[j].pear == BKT[j + 1].pear && BKT[j].num > BKT[j + 1].num)
{
tmp = BKT[j]; BKT[j] = BKT[j + 1]; BKT[j + 1] = tmp;
}
}
}
for (int i = 0; i < m; i++)//选择m个篮子
{
if (i == m - 1)
printf("%d", BKT[i].num);
else
printf("%d ", BKT[i].num);
}
printf("\n");
}
}