結果

問題 No.67 よくある棒を切る問題 (1)
コンテスト
ユーザー picakun
提出日時 2017-06-06 23:04:57
言語 C++11
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=gnu++11 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 99 ms / 5,000 ms
コード長 818 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 427 ms
コンパイル使用メモリ 93,724 KB
実行使用メモリ 7,212 KB
最終ジャッジ日時 2026-07-06 16:27:51
合計ジャッジ時間 4,087 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<math.h>
#include<iomanip>
#define REP(i,s,e) for(int i = s; i < e; i++)
#define PREP(i,s,e) for(int i = s; i >= e; i--)
#define rep(i,n) REP(i,0,n)

using namespace std;
int N;
int L[200000];

long long cut(float length){
	long long ans=0;
	rep(i,N)
		ans += L[i]/length;
	return ans;
}


int main(){
	cin >> N;
	int l[N];
	int M=0;
	rep(i,N)
		cin >> L[i];
	long long K;
	cin >> K;
	double high,low;
	low = 0.0;
	high = 1000000000;
	double middle;
	while(low + 1e-9 < high && low * (1 + 1e-9) < high){
		//temp = cut(middle);
		long long temp = 0;
		middle = (low + high) / 2;
		rep(i,N) temp += L[i]/middle;
		if(temp < K)
			high = middle;
		else
			low = middle;
	}
	cout << fixed << setprecision(10) << middle <<endl;
	return 0;
}
0