每次自己寫優先隊列都會有一種很山寨的感覺。
將所有的容器入隊,將任務從大到小排列,每次把任務都分配給當前最清閑的容器。
第一次提交的時候竟然因為沒有輸出那個nwa了。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>using namespace std;#define N 100005struct point{ int x,y; int id;}a[N];struct node{ int x,id; bool friend operator<(node x,node y) { return y.x<x.x; }}b[105];int cmp(const void *a,const void *b){ point *c,*d; c=(point *)a; d=(point *)b; return d->x-c->x;}int cmp1(const void *a,const void *b){ return (*(point *)a).id-(*(point *)b).id;}int main(){ int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); int i; for(i=0;i<n;i++) { scanf("%d",&a[i].x); a[i].id=i; } qsort(a,n,sizeof(a[0]),cmp); priority_queue<node>q; node cur; for(i=0;i<m;i++) { b[i].x=0; b[i].id=i; q.push(b[i]); } for(i=0;i<n;i++) { cur=q.top(); q.pop(); cur.x+=a[i].x; a[i].y=cur.id; q.push(cur); } qsort(a,n,sizeof(a[0]),cmp1);printf("%d\n",n); for(i=0;i<n-1;i++) printf("%d ",a[i].y); printf("%d\n",a[i].y); } return 0;}