百度之星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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84966.shtml
英文地址,請注明出處:http://en.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("太長了不會算");}/…