货车拉货物、基站信号地图、可漫游服务区

题目1.货车拉货物

【题目描述】

有若干辆具有一定最大承载量(体积)的货车,若干件一定体积的货物。每辆货车只能装载体积小于自己最大承载量的货物,且每辆车最多装一件。要求求出所有货车都运一次货物后,所有被运输货物体积之和的最大可能值。

例:货车的最大承载量数组:1,2,5,20,40。
货物体积:1,3,9,9,9,27,81,1000。
则最大运货体积为40。

	private static int findMaxDeliveryExpress(int[] packs, int[] goods) {
		Arrays.sort(packs);
		Arrays.sort(goods);
		int res = 0;
		if (goods[0] > packs[packs.length - 1]) {
			return res;
		}
		for (int i = packs.length - 1, j = goods.length - 1; i >= 0 && j >= 0; j--) {
			if (packs[i] >= goods[j]) {
				res += goods[j];
				i--;
			}
		}
		return res;
	}

题目3.基站信号地图

题目描述

视一片区域为一个 rows * cols 的矩阵(行列编号皆从 1 开始),初始有一批基站分布在某些单元格内(位置无重复)。现对这片区域进行改造,涉及两种操作:
• add:在单元格[row,col]中添加一个基站,若该单元格已经存在基站,则不做任何动作。
• delete:清除单元格[row,col]及周边范围(上、下、左、右、对角的相邻单元格)中的基站。

假设每个基站的信号覆盖范围为上、下、左、右、对角的相邻单元格;每存在一个基站,覆盖范围内的每个单元格的信号强度增加 1 。

改造完成后,请统计最终矩阵各单元格(不含基站位置)的信号强度之和。

输入

l  首行两个整数rows cols,表示矩阵的行数和列数,取值范围均为[1,100]。

l  第二行是一个整数 baseStationCnt,表示初始基站的个数,取值范围[0,100];
接下来 baseStationCnt 行,每行输入一个基站的位置,格式为row col,row的取值范围 [1,rows],col的取值范围 [1,cols];输入保证初始基站位置无重复。

l  然后一行是一个整数 cmdCnt,表示改造操作的个数,取值范围:[0,100]。
接下来 cmdCnt 行,每行一个操作,格式为操作 row col,操作仅为add或delete, row的取值范围 [1,rows],col的取值范围 [1,cols]。

输出

一个整数,表示最终矩阵各单元格(不含基站位置)的信号强度之和。

样例

输入样例 1

4 6

3

2 2

3 3

4 4

3

delete 4 3

add 1 2

delete 2 5

输出样例 1

11

提示样例 1

如下图所示:

左边矩阵表示初始基站的分布(*表示基站)

delete 4 3 操作:清除单元格[4,3]周边范围内的两个基站

add 1 2 操作:在单元格[1,2]中添加基站

delete 2 5 操作:单元格[2,5]周边范围内没有基站,因此该操作不改变矩阵内的基站。

最后存在2个基站,如右边矩阵所示:绿框表示基站[1,2]的信号覆盖范围,蓝框表示基站[2,2]的信号覆盖范围。 最终矩阵每个单元格(不含基站位置)的信号强度为图中数字,和为11。

输入样例 2

1 1

0

0

输出样例 2

0

public class Main {
    // 基站存在标识
    private static final int STATION_FLAG_ON = 1;

    private static final int STATION_FLAG_OFF = 0;

    static class Command {
        private final String cmd;

        private final int row;

        private final int col;

        Command(String inputStr) {
            String[] inputArray = inputStr.split(" ");
            this.cmd = inputArray[0];
            this.row = Integer.parseInt(inputArray[1]);
            this.col = Integer.pars
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值