选机房
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。
文件第一行:一个正整数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; }