日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1242:网线主管 | OpenJudge NOI 1.11 04:网线主管

發布時間:2025/3/17 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1242:网线主管 | OpenJudge NOI 1.11 04:网线主管 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1242:網線主管
OpenJudge NOI 1.11 04:網線主管

【題目考點】

1. 二分答案

【解題思路】

看題目中的數據都帶小數點,似乎這是實數域上的問題。但仔細分析,該題的輸入數據精確到厘米,要求輸出結果精確到厘米,實際只要在處理過程中保持為以厘米為單位,那么該問題本質上是整數域的問題。

用二分思想考慮該問題,題目問:要找最長的網線長度。對應的模板為:求滿足某一條件的最大值。
網線長度需要滿足的條件為:將庫存中的網線按該長度進行切割,得到的網線數量大于等于居民需要的網線數量。
假設要判斷為網線長度為x是否滿足條件,先遍歷所有庫存中網線長度,每條網線長度記為l,那么l/x(整除運算)即為這條庫存網線可以切出的成品網線的條數,加和求出總條數。看處理得到的網線總條數是否大于等于居民需要的網線數量k,如果是,那么滿足條件,否則不滿足條件。

注意單位換算,計算過程用厘米為單位,輸出時轉用單位米。
二分查找時,網線長度最小值設為0,最大值為100km=107cm100km=10^7cm100km=107cm,考慮極端情況,假設庫存中每條網線都是107cm10^7cm107cm,一共有10410^4104條,而要切成1cm1cm1cm的網線,共有107?104=101110^7*10^4=10^{11}107?104=1011條網線,超出了int的范圍。所以網線計數變量要設為long long。

【題解代碼】

解法1:二分答案

#include <bits/stdc++.h> using namespace std; int n, k, a[10005];//a[i]:第i條網線的長度 單位:厘米 bool check(int l)//如果需要網線長度為l,最多可以得的網線段數是否大于等于k {long long ct = 0;//計數for(int i = 1; i <= n; ++i)ct += a[i] / l;//整除運算return ct >= k; } int main() {double t; cin >> n >> k;for(int i = 1; i <= n; ++i){cin >> t;a[i] = t * 100;//單位:厘米}if(check(1) == false)//如果切成1厘米一段也不能達到要求的數量,則沒有切割方案 {cout << "0.00";return 0;} int l = 1, r = 1e7, m;while(l < r)//二分答案求滿足條件的最大值{m = (l + r + 1) / 2;if(check(m))//如果網線長為m滿足條件l = m;elser = m - 1;}cout << fixed << setprecision(2) << (double)l / 100;//單位轉為米return 0; } 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的信息学奥赛一本通 1242:网线主管 | OpenJudge NOI 1.11 04:网线主管的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。