首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

POJ 1064 Cable Master:二分答案分數化整數避免精度誤差

     編輯:關於C++

問題描述

有 N(≤10000)根纜繩,長度以米為單位保留兩位小數(厘米精度)。需切出 K(≤10000)段等長纜繩,長度盡可能長。輸出最大長度(保留兩位小數),無法切出至少 1 厘米時輸出 0.00。

二分 + 整數化

  • 將所有長度乘 100 轉為整數(厘米),長度範圍 [1, 10^7]。
  • 二分長度 L(整數厘米)。判斷函數 check(L):Σ (len_i / L) ≥ K。
  • 二分找最大可行 L,輸出 L/100.0 格式化兩位小數。

代碼


int len[10005];
bool ok(int L) {
    int cnt=0;
    for(int i=0;i= k;
}
int main() {
    while(scanf("%d%d",&n,&k)!=EOF) {
        int mx=0;
        for(int i=0;i

關鍵細節

  • 浮點讀入轉整數時加 1e-6 防止如 8.02*100=801.999... 截斷為 801 的誤差。
  • 二分邊界:l=1(至少 1 厘米),r=max_len。
  • 輸出用 %.2f 直接格式化 double,或手動整數除法拼接小數點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved