嘘~ 正在从服务器偷取页面 . . .

CF1379C Choosing flowers 题解


CF1379C Choosing flowers 题解

题目链接:CF1379C Choosing flowers

题意

有 $m$ 种物品,每种物品有无限个,你可以购买 $n$ 个物品。

对于第 $i$ 种物品:

第一次买时的贡献是 $a_i$ ,接下来每购买一个的贡献都是 $b_i$。即当你买了 $x_i$ 个第 $i$ 种物品时,贡献是 $a_i+b_i \times (x_i-1)$

现在要你求出最大贡献。

输入格式

第一行一个 $t (1≤t≤10^4)$,表示有 $t$ 组数据。

对于每组数据:

第一行$n$ 和 $m (1≤n≤10^9,1≤m≤10^5)$

接下来 $m$ 行,每行两个整数$a_i$和$b_i(0≤a_i,b_i≤10^9)$

每组数据后有一个空行。

输出格式

对于每组数据,输出一行一个整数表示最大的贡献。

容易发现,最优解一定只有一种物品被买了多次。

考虑枚举这个物品 $i$ ,如果 $i$ 被买了多次,则其他物品 $k_i$ 一定有 $a_{k_i} > b_i$ ,否则 $i$ 不会被买多次

我们对物品按 $a_i$ 排序并预处理前缀和,然后二分出第一个 $a_k$ 大于 $b_i$ 的 $k$ ,再分类讨论即可。

时间复杂度 $\mathcal{O}(n \log n)$

代码:(别忘了判 $k$ 不存在的情况)

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
typedef pair<int,int> pii;
void up(int &x,int y) { x < y ? x = y : 0; }
void down(int &x,int y) { x > y ? x = y : 0; }
#define N ((int)(1e5 + 15))
#define Fi first
#define Se second

pii a[N]; int sum[N];
void solve()
{
    int n,m; cin >> m >> n;
    for(int i = 1; i <= n; i++) { cin >> a[i].Fi >> a[i].Se; }
    sort(a + 1, a + 1 + n);
    for(int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i].Fi;
    int res = 0;
    for(int i = 1; i <= n; i++)
    {
        int l = 1, r = n;
        while(l < r)
        {
            int mid = (l + r) >> 1;
            if(a[mid].Fi > a[i].Se) r = mid; else l = mid + 1;
        }
        if(a[l].Fi <= a[i].Se) up(res, a[i].Fi + (m - 1) * a[i].Se);
        else if(n - l + 1 >= m) up(res, sum[n] - sum[n - m]);
        else if(l <= i) up(res, sum[n] - sum[l - 1] + (m - (n - l + 1)) * a[i].Se);
        else up(res, sum[n] - sum[l - 1] + a[i].Fi + (m - (n - l + 1) - 1) * a[i].Se);
    }
    cout << res << '\n';
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    // freopen("check.in","r",stdin);
    // freopen("check.out","w",stdout);
    int qwq; cin >> qwq; while(qwq--) solve();
    return 0;
}

参考文献

[1] https://www.luogu.com.cn/blog/phiu/solution-cf1379c


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录