新食堂的早餐搭配 (二分做法)

Posted JunMain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新食堂的早餐搭配 (二分做法)相关的知识,希望对你有一定的参考价值。

题目描述

新食堂的早餐搭配: 阿明在一食堂选择早餐,他的想法是选择一份主食和一款饮 料,且花费不超过 x 元。

一维整型数组 main 中记录了每种 主食的价格,一维整型数组 drinks 中记录了每种饮料的价 格。

请问针对不同的预设参数,共有多少种购买方案。

输入格式

第一行输入 n , m n, m n,m(表示主食饮料种类), cost(总预算)

第二行输入每个主食价格

第三行输入每个饮料价格

输出格式

输出选择一份主食和一款饮 料,且花费不超过 cost 元,的总方案数

数据范围

0 ≤ m , n ≤ 1 0 5 0\\leq m,n \\leq 10^5 0m,n105

样例

输入:

3 3 15
10 20 5
5 5 2

输出:

6

-----------------------------

输入:
3 4 18
3 13 4 
6 4 12 10

输出:

9

-----------------------------

输入:
3 4 18
3 7 4
6 4 12 10

输出:
11



暴力 O ( n ∗ m ) O(n*m) O(nm)

n, m 为 1 0 5 10^5 105时已经超时

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;

int food[N], drink[N];
LL ans;


int main()

    int n, m, cost;
    cin >> n >> m >> cost;
    
    for (int i = 1; i <= n; i ++)   cin >> food[i];
    
    for (int i = 1; i <= m; i ++ )  cin >> drink[i];
   

    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++ )
            if (food[i] + drink[j] <= cost)    ans ++;
    
   
    cout << ans;
    
    return 0;


二分 O ( n l o g m ) O(nlog_m) O(nlogm)

先数组排序 O ( l o g m ) O(log_m) O(logm)

然后让枚举一次层循环n, f o o d [ n ] + d r i n k [ m ] ≤ c o s t food[n] + drink[m] \\leq cost food[n]+drink[m]cost 进行二分边界答案

二分模板

总共的时间复杂度 O ( n l o g m ) O(nlog_m) O(nlogm)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;

int food[N], drink[N];
int n, m, cost;
LL ans;

void binary(int x)

    int l = 1, r = m;
    
    while (l < r)
    
        int mid = l + r + 1 >> 1;
        if (food[x] + drink[mid] <= cost)     l = mid;
        else     r = mid - 1;
    

    ans += l;


int main()


    cin >> n >> m >> cost;
    
    for (int i = 1; i <= n; i ++)   cin >> food[i];
    for (int i = 1; i <= m; i ++ )  cin >> drink[i];
   
    sort(drink+1,drink+m+1);
    
     for (int i = 1; i <= n; i ++)
        binary(i);

     cout << ans;
    
    return 0;

以上是关于新食堂的早餐搭配 (二分做法)的主要内容,如果未能解决你的问题,请参考以下文章

新食堂的早餐搭配 (二分做法)

⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合

力扣 - LCP 18. 早餐组合

力扣 - LCP 18. 早餐组合

21天减肥袖珍指南

luoguP2672 推销员