现在的位置: 首页 > 综合 > 正文

hdu 2850 Load Balancing(贪心+优先队列)

2013年10月12日 ⁄ 综合 ⁄ 共 866字 ⁄ 字号 评论关闭

每次自己写优先队列都会有一种很山寨的感觉。

将所有的容器入队,将任务从大到小排列,每次把任务都分配给当前最清闲的容器。

第一次提交的时候竟然因为没有输出那个nwa了。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;
#define N 100005
struct 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;
}

抱歉!评论已关闭.