选机房

选机房

1000ms
65535KB
64-bit integer IO format: %lld      Java class name: Main
Font Size:
BNU程序设计大赛就要开始了,决赛地点暂时定在电子楼,因为电子楼有很多各种大小的机房,目前估计参赛的队伍总数为n,但是学校可能没有那么大的机房容纳所有队伍,可能要将选手分配在几个小机房中进行比赛,xyjian老大安排你去选机房,为了让比赛选手相对集中,要求选中机房的总数最少,另外在满足这一前提的情况下尽可能选择较大的机房。现在你得到了BNU所有机房的能容纳队伍数目的情况表,请你编程自动选择机房。

Input

输入文件包含多组数据。
文件第一行:一个正整数t<=20表示测试数据的组数。
接下来t行表示t组数据,每组数据按照以下格式:
第一行两个正整数n<=100000和k<=1000以空格隔开,表示参赛队的总数和可以选择的机房总数k。
接下来k行每行一个正整数c<=20000。
第1行表示1号机房所能容纳的队伍总数,第2行表示2号机房能容纳的队伍数,以此类推,已知所有k个机房的大小均不相同,并且所有机房的总容量大于n。

Output

对每组数据输出所要选择的机房的编号,每个编号一行,从小到大输出,每组数据后请输出一个空行。

Sample Input

2
200 2
300
400
100 5
50
4
20
40
5

Sample Output

2

1
3
4

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{
    int c,flag;
    bool operator < (const node &b) const
    {
        return c<b.c;
    }
}a[1010];
int mark[1010];
priority_queue<node>pq;
int main()
{
    int test;
    int n,k,i,j;
    node temp;
    cin>>test;
    while(test--)
    {
        j=0;
        memset(mark,0,sizeof(mark));
        cin>>n>>k;
        for(i=0;i<k;i++)
        {
            cin>>a[i].c;
            a[i].flag=i+1;
            pq.push(a[i]);
        }
        temp=pq.top();
        pq.pop();
        mark[j++]=temp.flag;
        while(n-temp.c>=0)
        {
            n-=temp.c;
            temp=pq.top();
            pq.pop();
            mark[j++]=temp.flag;
        }
        while(!pq.empty())
        {
            pq.pop();
        }
        sort(mark,mark+j);
        for(i=0;i<j;i++)
        {
            cout<<mark[i]<<endl;
        }
        cout<<endl;
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值