選機房

選機房

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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章