現在有n(1 <= n <= 1000)條繩子,
他們的長度分別為l1,l2,……,ln(1 <= li <= 10000),如果從他們中切割出k(1 <= k <= 1000)條長度相同的繩子,
這k條繩子每條最長能多長?
收起
共有兩行,第一行包含兩個正整數n和k,用乙個空格分割;第二行包含n個數,一次表示n條繩子的長度,兩數間用乙個空格分隔,每條繩子的長度的小數不超過兩位。
僅包含乙個數,表示所得k條繩子的最大長度。答案四捨五入保留小數點後兩位
原題的樣例似乎出了個問題,樣例的精確的答案是2.005,四捨五入的話應該是2.01才對。
4 11
8.02 7.43 4.57 5.39
2.01
這個就是二分的思想,關鍵是精度,保留的時候好像忽視3位小數的大小,所以要自己設計實現。題目問每條最長能多長?每次偏右查詢
下邊的比我的漂亮#include#include#include#include#include#include #include #include #include#include#include #include#include #include #include #define inf 0x3f3f3f3f
#define exp 0.00001
#define mmt(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const ll max=1000000;
using namespace std;
double n,k,num=0,sum=0;
double ans[10010];
bool judge(double a );
int main()
double high=sum/k;
double low=0.0;
double mid;
while(fabs(high-low)>exp)
mid=mid*1000+0.5;//使得精度準確些
mid/=1000;
printf("%.2lf",mid);
}bool judge(double a )
if(count>=k) return 1;
return 0;
}
code:
#include using namespace std;
int n, k, a[1000];
int main()
int l = 0, r = 1e7 + 1;
while (l < r - 1)
if (s < k) else
}printf("%.2f\n", (l + 5) / 10 / 100.0);
return 0;
}核心在於把這個問題轉化為整數,這個事情就好做多了。
分割繩子(二分)
時間限制 1 sec 記憶體限制 128 mb 題目描述 現有n條繩子,它們的長度分別為l1,l2,ln,如果從它們中切割出k條長度相同的繩子,這k條繩子每條最長能有多長?輸入共有兩行,第一行包含兩個正整數n和k,用乙個空格分隔 第二行包含n個數,依次表示n條繩子的長度,兩數間用乙個空格分隔。每條繩...
繩子切割 二分查詢
題目描述 有n條繩子,它們的長度為li li 1000 如果從它們中切割出k條長度相同的繩子的話,這條繩子每條最長能有多長?答案保留到小數點後2位。輸入輸入包含兩行,第一行有兩個整數n和k,n代表n條繩子,k代表切割出的長度。4 11 8 02 7.43 4.57 5.39 輸出輸出能切割出最長的長...
割繩子問題(二分)
題目描述 有 n 條繩子,它們的長度分別為 l ili 如果從它們中切割出 k 條長度相同的繩子,這 kk 條繩子每條最長能有多長?答案保留到小數點後 2 位 直接捨掉 2 位後的小數 輸入格式 第一行兩個整數 n 和 k,接下來 n 行,描述了每條繩子的長度 l ili 輸出格式 切割後每條繩子的...