华为软件类笔试-嵌入式软件开发 9-27

《嵌入式软件开发笔试与面试手册》https://blog.nowcoder.net/zhuanlan/jvN8gj

《软件开发笔试汇总》https://blog.nowcoder.net/zhuanlan/0oDWVm

3、货物运输

m件货物和n辆卡车,每辆卡车只能运送一件货物,卡车的载重量需要大于等于货物重量才能运输;

另有x个载重为y的拖斗,每辆卡车最多可以拖挂一个拖斗以提升载重量,共同运输一件更重的货物;

请你返回最多可以运输多少件货物。

解答要求

时间限制:C/C++ 1000ms,其他语言:2000ms

内存限制: C/C++ 256MB,其他语言:512MB

输入

三行数据︰

1. m n x y

2. weight0 weight1 weight2 ...

3. load0 load1 load2 ...

1行包含四个数字,分别为︰

m:货物数量

n:卡车数量

x:拖斗数量

y:拖斗载重

2行为货物的重量列表,以空格分隔;

3行为卡车的载重列表,以空格分隔;

范围:

1<=货物/卡车<= 50000

0<=拖斗数量<= 50000

0<=货物重量/卡车载重量/拖斗载重量<= 1000000000

输出

一个整数,最多可以运输货物的数量。

样例1

输入:

5 5 1 5

9 5 9 8 5

1 6 2 6 4

输出:

3

解释:

2号卡车运输1号货物,6>=5

4号卡车运输5号货物,6>=5

5号卡车挂拖斗,运输3号货物,4+5>=8

样例2

输入:

4 4 2 3

9 6 7 8

5 2 3 4

输出:

2

解释:1号卡车挂拖斗,运输4号货物,53>=8

4号卡车挂拖斗,运输3号货物,43>=7

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int m, n, x, y;
    cin >> m >> n >> x >> y;

    vector<int> weights(m);
    for (int i = 0; i < m; ++i) {
        cin >> weights[i];
    }

    vector<int> loads(n);
    for (int i = 0; i < n; ++i) {
        cin >> loads[i];
    }

    // 按升序对重量和载重进行排序
    sort(weights.begin(), weights.end());
    sort(loads.begin(), loads.end());

    int count = 0;
    vector<bool> used(m, false);

    // 首先,尝试不使用拖斗来运输货物
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (!used[j] && loads[i] >= weights[j]) {
                count++;
                used[j] = true;
                break;
            }
        }
    }

    // 然后,再尝试使用拖斗
    for (int i = 0; i < n && x > 0; ++i) {
        for (int j = 0; j < m; ++j) {
            if (!used[j] && loads[i] + y >= weights[j]) {
                count++;
                used[j] = true;
                x--;
                break;
            }
        }
    }

    cout << count << endl;

    return 0;
}

1、双十一促销活动

某商城进行“双十一”促销活动,活动采用等价格减免的方式,某位客人—次购买了N件商品,需要帮忙计算本次购买能获得的总优惠。给定商品价格数组p,其中p[i]表示第i件商品的价格,第i件商品能获得的优惠为第i件商品之前的第j件商品的价格,其中p[j]<= p[i],并且j<i,p[j]是离p[i]最近的一个小于等于p[i]的商品。求本次购买能获得的总优惠。

例如:给定价格数组p=[9,4,3,5]p[3]=5能获得的优惠为p[2]=3p[2]是满足条件离p[3]最近的一个商品,其中p[1]=4也小于p[3],但不是离p[3]最近的商品。

解答要求

时间限制:C/C++1000ms,其他语言:2000ms内存限制:C/C++ 256MB,其他语言:512MB

输入

第一行是商品的个数N1<=N<=100000 ;

第二行是用空格分隔的N个整数,数组元素的值表示商品的价格,0<p[i]100000

例如

5

9 4 5 2 4

输出

输出为一个整数,表示本次购买获得的总优惠

例如︰

6

样例1

输入:

5

9 4 5 2 4

输出:

6

解释∶商品0的价格为p[0]=9,第一件商品之前无其他商品,该商品获得的优惠为0

商品1的价格为p[1]=4 ,p[1]之前不存在满足条件的商品,该商品获得的优惠为0

商品2的价格为p[2]=5 , p[2]之前满足条件的最近一个商品为p[1]=4,该商品获得的优惠为4

商品3的价格为p[3]=2p[3]之前没有满足条件的商品,该商品获得的优惠为0

商品4的价格为p[4]=4p[4]之前满足条件的最近的一个商品为p[3]=2,该商品获得的优惠为2

由此可以计算出本次购买可以获得的总优惠为:42= 6

 

样例2

输入:

4

1 2 3 5

输出:

6

解释∶商品0的价格为p[0]=1,第一件商品之前无其他0

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要发布嵌入式软件开发相关岗位的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

1 23 评论
分享
牛客网
牛客企业服务