首页 > 其他分享 >ABC374 E 题解

ABC374 E 题解

时间:2024-10-06 17:10:53浏览次数:7  
标签:ab 机器 int 题解 add i64 枚举 ABC374

ABC374 E 题解

E - Sensor Optimization Dilemma 2

题目链接:AT | 洛谷

容易发现答案可以二分。于是我们把问题转化为了判定性问题:给定目标 \(x\),能否在花费不超过预算的情况下,使得每个过程的产量都不低于 \(x\)?

进一步,由于各个过程的生产互不相关,所以我们要尽可能让每个过程的费用尽可能小,这样一定是最优的。对于每个过程分别考虑,就是要问:

给定两种机器,第一种机器的产量为 \(a\),价格为 \(p\);第二种机器的产量为 \(b\),价格为 \(q\)。要使总产量达到 \(x\),如何让花费尽可能少?

(其实我从这里开始就想不出来了)

一种显然的暴力是枚举某一种机器的数量——例如第一种,从 \(0\) 枚举到 \(\left\lceil \dfrac{x}{a} \right\rceil\),同时可以 \(O(1)\) 计算出所需的第二种机器的数量。这样算出的答案显然一定正确,但枚举的次数是 \(O(x/a)\),当 \(x\) 很大且 \(a\) 很小时,无法接受。

想到正解或许需要一点灵感。考虑这个事实:如果要生产 \(ab\) 个零件,有两种方案:购买 \(b\) 个第一种机器,花费 \(bp\);或 \(a\) 个第二种机器,花费 \(aq\)。可能还有别的方案,但可以别的证明一定不会更优。(从“性价比”的角度来考虑。)

从这个事实,可以推出:在最优方案中,两种机器的产量不可能同时达到 \(ab\)。如果两种机器的产量都达到了 \(ab\),总可以把较贵的 \(ab\) 产量交换给另一种机器,使得费用更低。因此,以下两种情况不可能同时发生:

  1. 第一种机器的数量达到 \(b\)。
  2. 第二种机器的数量达到 \(a\)。

这实际上就是“两种机器的产量不可能同时达到 \(ab\)”的另一种表述方法。

有了这个结论之后,就可以分别枚举两种机器的数量:第一种机器从 \(0\) 枚举到 \(b - 1\),第二种机器从 \(0\) 枚举到 \(a - 1\)。根据上述结论,这样就可以保证枚举到最优策略。设 \(a\) 与 \(b\) 的值域为 \(V\),我们就在 \(O(\log(XV)NV)\) 的时间内通过了此题。

参考代码:

auto check = [&](const i64 x) -> bool
{
    i64 tot = 0;
    for(int i = 0; i < n; i++)
    {
        i64 a = A[i], b = B[i], p = P[i], q = Q[i], xx = x, add = 0x3f3f3f3f3f3f3f3f;

        for(int j = 0; j < b; j++)
        {
            i64 tmp = j * p + ceil(max(0ll, xx - j * a), b) * q;
            add = min(add, tmp);
        }
        for(int j = 0; j < a; j++)
        {
            i64 tmp = j * q + ceil(max(0ll, xx - j * b), a) * p;
            add = min(add, tmp);
        }

        tot += add;
        if(tot > lim) return false;
    }
    return true;
};

int L = 0, R = 1e9, ans = -1;
while(L <= R)
{
    int mid = (L + R) >> 1;
    if(check(mid)) L = mid + 1, ans = mid;
    else R = mid - 1;
}

提交记录

标签:ab,机器,int,题解,add,i64,枚举,ABC374
From: https://www.cnblogs.com/dengstar/p/18449210

相关文章

  • P7078 [CSP-S2020] 贪吃蛇 题解
    P7078[CSP-S2020]贪吃蛇这题好啊题目传送门看到题之后觉得有点像砍蚯蚓的那道题看看题目可以证明,若一条蛇在吃完之后不是最弱的那一条蛇,那么他一定会选择吃,证明如下设蛇长为\(a_{1,\dots,n}\)且依次递增,那么很明显的因为​......
  • 鲁的智力 题解
    题意有\(n\)个人,\(m\)个学科,你第\(i\)门学科排在第\(a_i\)名,且每个人在每个学科得到的分数是一个\(0\)到\(1\)之间的一个实数,求你总分排名的最大、小值。题解先考虑排名最高的情况。我们可以每一科都这样构造:\[b_1=1\]\[b_2=1-\Deltax\]\[b_3=1-2\De......
  • 游览计划 题解
    题意给定一张无向图,选取四个点\(a\neb\nec\ned\),求\(f(a,b)+f(b,c)+f(c,d)\)的最大值,其中\(f(u,v)\)表示点\(u\)到点\(v\)的最短路长度。题解如果顺着枚举四个点\(a\)、\(b\)、\(c\)、\(d\),是一个\(n^4\)的复杂度,显然过不了。但是我们发现如果确定......
  • 洛谷 P3523 题解
    洛谷P3523[POI2011]DYN-Dynamite分析二分答案,问题转化为:对于给定的\(K\),选择尽可能少的节点,使得所有关键节点都被「覆盖」。对于一个关键节点,「覆盖」的定义为:存在一个被选择的点与这个关键节点的距离不大于\(K\)。方便起见,我们指定\(1\)号节点是这棵树的根节点。我们......
  • [题解]ABC374 A~E
    A-Takahashisan2直接判断字符串是否以san结尾即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ strings; cin>>s; intn=s.size(); if(s[n-1]=='n'&&s[n-2]=='a'&&s[n-3]=='s')cout<<&......
  • P11059 [入门赛 #27] 数字 (Hard Ver.)题解
    Solution先读题:在给定x的位数\(n\)和模数\(p\)后,要求构造一个\(x\)在满足\(x\modp\)的余数尽可能小的前提下使\(x\)的数字尽可能小。我们假设\(x\)的各位数字之和为\(m\),有\(1\lem\le9n\)。.(当\(x\)仅在最高位有1时\(m=1\),称为情况一,当x每位为9时\(m=9n\),称为情况二......
  • ABC374E 题解
    好题。爱做。标签:二分。求最大的最小值,考虑二分答案。然后问题就转化成了(求\(n\)次):有两种物品,每种物品有一个代价和价值,求获得不少于给定价值所需的最小代价。下文记物品的代价为\(w\),价值为\(v\),所拿的数量为\(cnt\)。假设有两种物品\(S\)与\(T\),\(S\)物品的性价比......
  • P10678 『STA - R6』月 题解
    Solution看了别的大佬的题解,感觉都是数学证明然后用树和图做的,看不懂啊。。。萌新瑟瑟发抖用vector模拟树,然后贪心摸索做出来了。注意到要求最深叶子结点和最浅叶子结点的距离最短时的情况,那么此时根节点应该是树中度数最大的点,把树尽可能的拓宽,深度换宽度。那么同理的根节点......
  • 题解:P11008 『STA - R7』异或生成序列
    Solution序列\(p\)是\(1\)~\(n\)的排列,因此考虑搜索回溯。由\(\sumn\le2\times10^6\)得知\(O(n^2)\)会炸,深感遗憾但仍考虑剪枝。坚信深搜过百万的蒟蒻。。。原\(b\)序列为长度\(n-1\)的序列:{\(b_1,b_2,b_3\cdotsb_n-1\)}将其前面插入一个元素\(......
  • 题解:AT_abc374_d [ABC374D] Laser Marking
    看到\(n\le6\),就知道这道题又是一道搜索了。题面有点长,信息也给的有点多,但稍微分析就可以得到只需要搜索印刷线段的顺序即可。具体的,我们在深搜函数里面传\(4\)个参数,分别代表已选线段的数量,当前位置的横纵坐标,以及当前时间。为了方便,我们表示的是已经印刷完当前线段后的时间......