HDU 5884 Sort (二分 贪心(k叉哈夫曼树))

来源:互联网 发布:大数据风控体系 编辑:程序博客网 时间:2024/05/16 14:52

官方题解:



代码:

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+5;int a[maxn];int n, T;namespace fastIO {    #define BUF_SIZE 1000000    //fread -> read    bool IOerror = 0;    inline char nc() {        static char buf[BUF_SIZE], *p1 = buf + BUF_SIZE, *pend = buf + BUF_SIZE;        if(p1 == pend) {            p1 = buf;            pend = buf + fread(buf, 1, BUF_SIZE, stdin);            if(pend == p1) {                IOerror = 1;                return -1;            }        }        return *p1++;    }    inline bool blank(char ch) {        return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t';    }    inline void read(int &x) {        char ch;        while(blank(ch = nc()));        if(IOerror)            return;        for(x = ch - '0'; (ch = nc()) >= '0' && ch <= '9'; x = x * 10 + ch - '0');    }    #undef BUF_SIZE};using namespace fastIO;bool judge(int x){    priority_queue<int, vector<int>, greater<int> > pq;    int cost = 0, s = 0;    s = (n-1)%(x-1);    if((n-1)%(x-1))    {        s++;        int tmp = 0;        for(int i = 1; i <= (n-1)%(x-1)+1; i++)        {            cost += a[i];            if(cost > T) return 0;            tmp += a[i];        }        pq.push(tmp);    }    for(int i = s+1; i <= n; i++)        pq.push(a[i]);    while(pq.size() >= x)    {        int num = x;        int tmp = 0;        while(num--)        {            cost += pq.top();            if(cost > T) return 0;            tmp += pq.top();            pq.pop();        }        pq.push(tmp);    }    if(cost > T) return 0;    return 1;}int main(void){    int _;    read(_);    while(_--)    {        read(n);        read(T);        for(int i = 1; i <= n; i++)            read(a[i]);        sort(a+1, a+1+n);        int ans = 0, l = 2, r = n;        while(l <= r)        {            int mid = (l+r)/2;            if(judge(mid)) r = mid-1, ans = mid;            else l = mid+1;        }        printf("%d\n", ans);    }    return 0;}


原创粉丝点击