StarCraft FZU - 2219

标签: 二分 FZU
4人阅读 评论(0) 收藏 举报
分类:

点击打开链接

这题是训练时队友写的 自己就没想到...

感觉二分很神奇 可以把很多复杂的问题简化成一个判定性的问题 在简化问题之后很多原本不可知的东西就变成已知量 从而可以找到更简单的方法来解决简化的问题 然后由这个问题的执行结果决定下一步该怎么做

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define ll long long

ll num[100010],tem[100010];
ll k;
int n,m;

bool judge(ll lim)
{
    ll pre;
    int cur,cnt;
    memcpy(tem,num,sizeof(num));
    cur=n,cnt=m,pre=0;
    while(1<=cnt&&cnt<=cur-1&&cur>=1)
    {
        if(tem[cur]+k<=lim)
        {
            tem[cur]+=k;
            cnt*=2,pre+=k;
        }
        else
        {
            cur--,cnt--;
            tem[cur]+=pre;
        }
    }
    if(cnt>=cur) return true;
    else return false;
}

int main()
{
    ll l,r,mid,ans;
    int t,i,j;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%I64d",&n,&m,&k);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
        }
        sort(num+1,num+n+1);
        l=num[n],r=num[n]+20*k;
        while(l<=r)
        {
            mid=(l+r)/2;
            if(judge(mid))
            {
                r=mid-1;
                ans=mid;
            }
            else
            {
                l=mid+1;
            }
        }
        printf("%I64d\n",ans);
    }
    return 0;
}

查看评论

FZU 2219 StarCraft(优先队列贪心)

思路:手推一下样例大概猜到这样一个贪心,n个工作m个工人,那么需要n-m次分裂,每次分裂出来的一个人去做时间最长的工作,剩下的一个继续分裂,直到工人的数量够了,其实就是一个小根堆,每次取两个元素出来,...
  • qq_21057881
  • qq_21057881
  • 2016-11-01 22:29:14
  • 456

FZU2219 StarCraft--贪心+优先队列

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2219m棵二叉树,表示m个初始工人,每一次分叉都是使用魔法将一个工人变成两个工人,因为每次需要k单位的时间,所以...
  • LaoJiu_
  • LaoJiu_
  • 2017-05-16 11:01:16
  • 343

FZU 2219 StarCraft (贪心 优先队列)

FZU 2219 StarCraft (贪心 优先队列)
  • Tc_To_Top
  • Tc_To_Top
  • 2016-08-20 20:53:21
  • 533

FZU 2219 StarCraft

ZB loves playing StarCraft and he likes Zerg most! One day, when ZB was playing SC2, he came up wit...
  • clx55555
  • clx55555
  • 2018-01-28 17:11:41
  • 74

FZU - 2219 StarCraft

哈夫曼编码
  • sinat_29278271
  • sinat_29278271
  • 2016-04-04 17:54:27
  • 505

FZU - 2219 StarCraft(贪心)

题意:m个工人,n个建筑,每一个建筑需要ti时间建造,并且消耗一个工人,每一个工人可以在k时间后分裂成两个工人,输出建造n个建筑需要的最小时间。思路:总共需要n-m个工人,所以需要n-m次分裂,分裂出...
  • GYH0730
  • GYH0730
  • 2018-04-15 21:22:45
  • 1

FZU 2219 StarCraft (哈夫曼树)

Description ZB loves playing StarCraft and he likes Zerg most! One day, when ZB was playing...
  • qq_28954601
  • qq_28954601
  • 2018-01-27 22:20:48
  • 76

FZU 2219【贪心】

思路: 因为工人造完一个房子就死了,所以如果m 最优的方案应该是耗时长的房子应该尽快建,而且最优的是越多的房子在建越好,也就是如果当前人数不到n,只派一个人去分裂。 解决方案是从还需要新的n-m...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2017-03-01 16:30:06
  • 212

FZU 2219 StarCraft(贪心+优先队列)

Problem Description ZB loves playing StarCraft and he likes Zerg most! One day, when ZB was playin...
  • so_so_y
  • so_so_y
  • 2018-02-15 20:22:21
  • 111

FZU - 2219 StarCraft (哈夫曼树,贪心+优先队列)

1.题面 http://acm.fzu.edu.cn/problem.php?pid=2219 2.题意 你有m个工人,要造n个建筑,每个工人只能建造一个建筑,每个建筑只能被一个...
  • h1021456873
  • h1021456873
  • 2017-02-21 20:25:27
  • 210
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1927
    排名: 2万+
    文章分类
    友情链接
    http://www.cnblogs.com/yzm10