当前位置: 首页 > article >正文

租车骑绿岛

租车骑绿岛

真题目录: 点击去查看

E 卷 100分题型

题目描述

部门组织绿岛骑行团建活动。租用公共双人自行车,每辆自行车最多坐两人,最大载重M。给出部门每个人的体重,请问最多需要租用多少双人自行车。

输入描述

第一行两个数字m、n,分别代表自行车限重,部门总人数。

第二行,n个数字,代表每个人的体重,体重都小于等于自行车限重m。

  • 0<m<=200
  • 0<n<=1000000

输出描述

最小需要的双人自行车数量。

用例1

输入

3 4
3 2 2 1

输出

3

说明

题解

本题需要最少的车辆,即尽可能组合出重量小于等于m的两人组。贪心算法 + 双指针

  • 按体重进行升序排序。left 只想最小体重, right指向最大体重。
    • arr[left] + arr[right] <= m left ++, right –
    • arr[left] + arr[right] > m right – , 优先减少体重大的

c++

#include <ios>
#include<iostream>
#include<vector>
#include<string>
#include <utility> 
#include <sstream>
#include<algorithm>
using namespace std;

int main() {
    int m, n;
    cin >> m >> n;
    int res= 0;
    vector<int> ans(n);
    for (int i = 0; i < n; i++) {
        cin >> ans[i];
    }
    // 排序
    sort(ans.begin(), ans.end());
    int right = n - 1;
    int left = 0;
    while (left <= right) {
        int tmp = ans[left] + ans[right];
        // 说明不能同时两个人乘坐
        if (tmp > m) {
            right--;
            res++;
        // 能够同时乘坐
        } else {
        
            right--;
            left++;
            res++;
        }
    }

    cout << res;
    return 0;
}

JAVA

import java.util.Arrays;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int m = sc.nextInt();
    int n = sc.nextInt();

    int[] arr = new int[n];
    for (int i = 0; i < n; i++) {
      arr[i] = sc.nextInt();
    }

    System.out.println(getResult(arr, m));
  }

  public static int getResult(int[] arr, int m) {
    Arrays.sort(arr);

    int count = 0;

    int i = 0;
    int j = arr.length - 1;

    while (i < j) {
      if (arr[i] + arr[j] <= m) i++;
      j--;
      count++;
    }

    if (i == j) count++;

    return count;
  }
}

Python

# 输入获取
m, n = map(int, input().split())
arr = list(map(int, input().split()))


# 算法入口
def getResult(arr, m, n):
    arr.sort()

    count = 0

    i = 0
    j = n - 1

    while i < j:
        if arr[i] + arr[j] <= m:
            i += 1
        j -= 1
        count += 1

    if i == j:
        count += 1

    return count


# 算法调用
print(getResult(arr, m, n))

JavaScript

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 2) {
    const [m, n] = lines[0].split(" ").map(Number);
    const arr = lines[1].split(" ").map(Number);

    console.log(getResult(arr, m, n));

    lines.length = 0;
  }
});

function getResult(arr, m, n) {
  arr.sort((a, b) => a - b);

  let count = 0;

  let i = 0;
  let j = arr.length - 1;

  while (i < j) {
    if (arr[i] + arr[j] <= m) i++;
    j--;
    count++;
  }

  if (i === j) count++;

  return count;
}

Go

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// 读取输入
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	firstLine := strings.Split(scanner.Text(), " ")
	m, _ := strconv.Atoi(firstLine[0])
	n, _ := strconv.Atoi(firstLine[1])

	scanner.Scan()
	inputNumbers := strings.Split(scanner.Text(), " ")
	ans := make([]int, n)
	for i := 0; i < n; i++ {
		ans[i], _ = strconv.Atoi(inputNumbers[i])
	}

	// 排序
	sort.Ints(ans)
	res := 0
	right := n - 1
	left := 0

	for left <= right {
		tmp := ans[left] + ans[right]
		// 说明不能同时两个人乘坐
		if tmp > m {
			right--
			res++
		// 能够同时乘坐
		} else {
			right--
			left++
			res++
		}
	}

	fmt.Println(res)
}


http://www.kler.cn/a/524860.html

相关文章:

  • 中间件安全
  • 【C++ 真题】P1706 全排列问题
  • c++:vector
  • mac安装dockerdesktop优化
  • 支持selenium的chrome driver更新到132.0.6834.110
  • 01-02 三元组与七元组
  • 【解决方案】VMware虚拟机adb连接宿主机夜神模拟器
  • 006 LocalStorage和SessionStorage
  • 1.五子棋对弈python解法——2024年省赛蓝桥杯真题
  • 春晚舞台上的人形机器人:科技与文化的奇妙融合
  • Elasticsearch有哪些应用场景?
  • P4681 [THUSC 2015] 平方运算 Solution
  • 2025_1_29 C语言学习中关于指针
  • 前端拖拽相关功能详解,一篇文章总结前端关于拖拽的应用场景和实现方式(含源码)
  • 【AI论文】Omni-RGPT:通过标记令牌统一图像和视频的区域级理解
  • 单机伪分布Hadoop详细配置
  • 萌新学 Python 之数值处理函数 round 四舍五入、abs 绝对值、pow 幂次方、divmod 元组商和余数
  • 利用飞书机器人进行 - ArXiv自动化检索推荐
  • Java基础知识总结(二十六)--Arrays
  • SpringBoot中@Valid与@Validated使用场景详解
  • 生成模型:扩散模型(DDPM, DDIM, 条件生成)
  • 2025年01月29日Github流行趋势
  • 【hot100】刷题记录(6)-轮转数组
  • [ASR]faster-whisper报错Could not locate cudnn_ops64_9.dll
  • AI编译器之——为什么大模型需要Relax?
  • 房屋租赁系统如何借助智能化手段提升管理效率与租客体验