百度之星2024 初赛第一场 补给

百度之星2024 初赛第一场 补给

    • 题干描述
    • 问题分析:
    • C++代码
    • Java代码:
    • Python代码
    • 补充说明:

题干描述

参考自马蹄集OJ,原文链接1

可怕的战争发生了,小度作为后勤保障工作人员,也要为了保卫国家而努力。
现在有 𝑁(1≤𝑁≤103)个堡垒需要补给,然而总的预算 𝐵(1≤𝐵≤10^9)是有限的。
现在已知第 𝑖 个堡垒需要价值 𝑃(𝑖)的补给,并且需要 𝑆(𝑖)的运费。- 鉴于小度与供应商之间长期稳定的合作关系,供应商慷慨地提供了一次特别的采购优惠。 - 具体而言,小度可以选择对某次补给进行半价采购。- 这意味着,如果小度决定在向第 𝑖 个堡垒提供补给时利用这一优惠,- 那么此次补给的采购及运输总费用将减少至 ⌊𝑃(𝑖)/2⌋+𝑆(𝑖),其中优惠价格按照向下取整的原则计算。- 对于其他堡垒 j,补给的采购和运输费用则保持不变,即 𝑃(𝑗)+𝑆(𝑗)。请计算小度的最多能给多少堡垒提供补给?

格式
输入格式:

第1行2个整数:𝑁和 𝐵 。(1≤𝑁≤103,1≤𝐵≤10^9); 第2到 𝑁+1行:第 𝑖+1
行包含两个空格分隔的整数,𝑃(𝑖)和𝑆(𝑖)。(0≤P(i),S(i)≤10^9)。

输出格式:

1 行 1 个整数表示能提供补给的最大数。

样例 1
输入:

5 29
6 3
2 8
10 2
1 2
12 5

输出:

4

**

问题分析:

1.注意本题要求的是尽可能多的堡垒,那么我们的目标就是尽量优先那些花费少的堡垒
2.读题的时候要注意,每个堡垒花费来自两个方面,一个是补给本身𝑃(𝑗),一个是运费𝑆(𝑗)),所以考虑的时候,应该是二者的和𝑃(𝑗)+𝑆(𝑗)。
3.为了尽可能多的补给堡垒,那么应该对运费和补给费用的和(𝑃(𝑗)+𝑆(𝑗))从小到大进行排序。
4.考虑优惠政策,由于只能用一次,为了优惠的最多,是不是考虑给贵的堡垒?但是如果直接给最贵的可能导致钱变少了,因此是不是应该先从少的开始,直到不够了,再试试能不能通过打折为更多的堡垒供给。
5.因此本地就是排序+贪心(贪心策略:每次选择总费用最少的堡垒)。

C++代码

参考文章2

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>using namespace std;typedef long long ll;const int N=1010;struct node
{ll p;ll s;ll sum;
}a[N];bool cmp(node x,node y)
{return x.sum<y.sum;
}int ans;int main()
{int n,B; cin>>n>>B;for(int i=1;i<=n;i++) cin>>a[i].p>>a[i].s;for(int i=1;i<=n;i++) a[i].sum=a[i].p+a[i].s;sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){if(B>=a[i].sum){B-=a[i].sum;ans++;}else{if(B>=floor(a[i].p/2)+a[i].s){ans++;break;}}}cout<<ans<<endl;return 0;
}

Java代码:

import java.util.Scanner;
import java.util.*;class Main {static class Fort {long p;long s;long sum;Fort(long p, long s) {this.p = p;this.s = s;this.sum = p + s;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();long B = scanner.nextLong();Fort[] forts = new Fort[N];for (int i = 0; i < N; i++) {long p = scanner.nextLong();long s = scanner.nextLong();forts[i] = new Fort(p, s);}Arrays.sort(forts, Comparator.comparingLong(f -> f.sum));int maxCount = 0;for (int i = 0; i < N; i++) {long discountedCost = forts[i].p / 2 + forts[i].s;if (discountedCost > B) {continue;}long remaining = B - discountedCost;int count = 1;for (int j = 0; j < N; j++) {if (j == i) {continue;}if (remaining >= forts[j].sum) {remaining -= forts[j].sum;count++;} else {break;}}if (count > maxCount) {maxCount = count;}}System.out.println(maxCount);}
}

Python代码

def max_forts():import sysinput = sys.stdin.read().split()idx = 0N = int(input[idx])idx += 1B = int(input[idx])idx += 1forts = []for _ in range(N):p = int(input[idx])idx += 1s = int(input[idx])idx += 1forts.append((p, s, p + s))forts.sort(key=lambda x: x[2])max_count = 0for i in range(N):discounted_cost = forts[i][0] // 2 + forts[i][1]if discounted_cost > B:continueremaining = B - discounted_costcount = 1for j in range(N):if j == i:continueif remaining >= forts[j][2]:remaining -= forts[j][2]count += 1else:breakif count > max_count:max_count = countprint(max_count)max_forts()

补充说明:

大家首先一定要学会基础的内容哦,例如需要自行编写代码,获得用例的输入,本题的C++代码为例:

int n,B; cin>>n>>B;
for(int i=1;i<=n;i++) cin>>a[i].p>>a[i].s;
for(int i=1;i<=n;i++) a[i].sum=a[i].p+a[i].s;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScripts console.log和console.dir区别

console.log 和 console.dir 都是 JavaScript 中用于在浏览器控制台打印信息的方法 &#xff0c;二者主要有以下区别&#xff1a; 输出内容和格式 console.log&#xff1a;主要用于输出简单的日志信息&#xff0c;直接打印数据的字符串表示 。对于对象、数组等引用类型&#…

uniapp 开发企业微信小程序时,如何在当前页面真正销毁前或者关闭小程序前调用一个api接口

在 UniApp 开发企业微信小程序时&#xff0c;若需在页面销毁或小程序关闭前调用 API 接口&#xff0c;需结合页面生命周期和应用生命周期实现。以下是具体实现方案及注意事项&#xff1a; 一、在页面销毁前调用 API&#xff08;页面级&#xff09; 通过页面生命周期钩子 onUnl…

聊聊 Metasploit 免杀

各位小伙伴们&#xff0c;晚上好&#xff01; 咱们今天打开宵夜“安全食材箱”&#xff0c;聊聊渗透测试绕过杀毒&#xff08;免杀&#xff09;的那些门道。你可以把免杀理解为——深夜做宵夜时&#xff0c;家里有人睡觉&#xff0c;但你非得去厨房整点美食&#xff0c;还不能…

Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用

文章目录 Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用引言JNI基础回顾JNI中的参数传递基本数据类型传递字符串传递数组传递对象传递 Java → C → Java 双向调用从C/C调用Java方法实现一个完整的回调机制 内存管理与注意事项性能优化提示结论参考资源 …

2025-05-28 Python深度学习8——优化器

文章目录 1 工作原理2 常见优化器2.1 SGD2.2 Adam 3 优化器参数4 学习率5 使用最佳实践 本文环境&#xff1a; Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 ​ 优化器 (Optimizer) 是深度学习中的核心组件&#xff0c;负责根据损失函数的梯度来更新模型的参数&#xff0c;使…

Web攻防-SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错

知识点&#xff1a; 1、Web攻防-SQL注入-操作方法&增删改查 2、Web攻防-SQL注入-HTTP头&UA&Cookie 3、Web攻防-SQL注入-HTTP头&XFF&Referer 案例说明&#xff1a; 在应用中&#xff0c;存在增删改查数据的操作&#xff0c;其中SQL语句结构不一导致注入语句…

Windows MongoDB C++驱动安装

MongoDB驱动下载 MongoDB 官网MongoDB C驱动程序入门MongoDB C驱动程序入门 安装环境 安装CMAKE安装Visual Studio 编译MongoDB C驱动 C驱动依赖C驱动&#xff0c;需要先编译C驱动 下载MongoDB C驱动源码 打开CMAKE(cmake-gui) 选择源码及输出路径,然后点击configure …

使用 C/C++ 和 OpenCV 调用摄像头

使用 C/C 和 OpenCV 调用摄像头 &#x1f4f8; OpenCV 是一个强大的计算机视觉库&#xff0c;它使得从摄像头捕获和处理视频流变得非常简单。本文将指导你如何使用 C/C 和 OpenCV 来调用摄像头、读取视频帧并进行显示。 准备工作 在开始之前&#xff0c;请确保你已经正确安装…

使用微软最近开源的WSL在Windows上优雅的运行Linux

install wsl https://github.com/microsoft/WSL/releases/download/2.4.13/wsl.2.4.13.0.x64.msi install any distribution from microsoft store, such as kali-linux from Kali office website list of distribution PS C:\Users\50240> wsl -l -o 以下是可安装的有…

Win11安装Dify

1、打开Virtual Machine Platform功能 电脑系统为&#xff1a;Windows 11 家庭中文版24H2版本。 打开控制面板&#xff0c;点击“程序”&#xff0c;点击“启用或关闭Windows功能”。 下图标记的“Virtual Machine Platform”、“适用于 Linux 的 Windows 子系统”、“Windows…

C++模板类深度解析与气象领域应用指南

支持开源&#xff0c;为了更好的后来者 ————————————————————————————————————————————————————By 我说的 C模板类深度解析与气象领域应用指南 一、模板类核心概念 1.1 模板类定义 模板类是C泛型编程的核心机制&#x…

MongoDB(七) - MongoDB副本集安装与配置

文章目录 前言一、下载MongoDB1. 下载MongoDB2. 上传安装包3. 创建相关目录 二、安装配置MongoDB1. 解压MongoDB安装包2. 重命名MongoDB文件夹名称3. 修改配置文件4. 分发MongoDB文件夹5. 配置环境变量6. 启动副本集7. 进入MongoDB客户端8. 初始化副本集8.1 初始化副本集8.2 添…

mac笔记本如何快捷键截图后自动复制到粘贴板

前提&#xff1a;之前只会进行部分区域截图操作&#xff08;commandshift4&#xff09;操作&#xff0c;截图后发现未自动保存在剪贴板&#xff0c;还要进行一步手动复制到剪贴板的操作。 mac笔记本如何快捷键截图后自动复制到粘贴板 截取 Mac 屏幕的一部分并将其自动复制到剪…

WPF 按钮点击音效实现

WPF 按钮点击音效实现 下面我将为您提供一个完整的 WPF 按钮点击音效实现方案&#xff0c;包含多种实现方式和高级功能&#xff1a; 完整实现方案 MainWindow.xaml <Window x:Class"ButtonClickSound.MainWindow"xmlns"http://schemas.microsoft.com/win…

C++ list基础概念、list初始化、list赋值操作、list大小操作、list数据插入

list基础概念&#xff1a;list中的每一部分是一个Node&#xff0c;由三部分组成&#xff1a;val、next、prev&#xff08;指向上一个节点的指针&#xff09; list初始化的代码&#xff0c;见下 #include<iostream> #include<list>using namespace std;void printL…

【Pandas】pandas DataFrame equals

Pandas2.2 DataFrame Reindexing selection label manipulation 方法描述DataFrame.add_prefix(prefix[, axis])用于在 DataFrame 的行标签或列标签前添加指定前缀的方法DataFrame.add_suffix(suffix[, axis])用于在 DataFrame 的行标签或列标签后添加指定后缀的方法DataFram…

【ROS2】创建单独的launch包

【ROS】郭老二博文之:ROS目录 1、简述 项目中,可以创建单独的launch包来管理所有的节点启动 2、示例 1)创建launch包(python) ros2 pkg create --build-type ament_python laoer_launch --license Apache-2.02)创建启动文件 先创建目录:launch 在目录中创建文件:r…

GitHub 趋势日报 (2025年05月23日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1All-Hands-AI/OpenHands&#x1f64c;开放式&#xff1a;少代码&#xff0c;做…

鸿蒙OSUniApp 实现的数据可视化图表组件#三方框架 #Uniapp

UniApp 实现的数据可视化图表组件 前言 在移动互联网时代&#xff0c;数据可视化已成为产品展示和决策分析的重要手段。无论是运营后台、健康监测、还是电商分析&#xff0c;图表组件都能让数据一目了然。UniApp 作为一款优秀的跨平台开发框架&#xff0c;支持在鸿蒙&#xf…

[ctfshow web入门] web124

信息收集 error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];// 长度不允许超过80个字符if (strlen($content) > 80) {die("太长了不会算");}/…