結果

問題 No.67 よくある棒を切る問題 (1)
ユーザー picakun
提出日時 2017-06-06 23:04:57
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 140 ms / 5,000 ms
コード長 818 bytes
コンパイル時間 743 ms
コンパイル使用メモリ 73,148 KB
実行使用メモリ 8,608 KB
最終ジャッジ日時 2025-03-03 10:42:42
合計ジャッジ時間 4,453 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 30
権限があれば一括ダウンロードができます
コンパイルメッセージ
In file included from /usr/include/c++/13/iostream:41,
                 from main.cpp:1:
In member function ‘std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char; _Traits = std::char_traits<char>]’,
    inlined from ‘int main()’ at main.cpp:45:39:
/usr/include/c++/13/ostream:223:25: warning: ‘middle’ may be used uninitialized [-Wmaybe-uninitialized]
  223 |       { return _M_insert(__f); }
      |                ~~~~~~~~~^~~~~
main.cpp: In function ‘int main()’:
main.cpp:34:16: note: ‘middle’ was declared here
   34 |         double middle;
      |                ^~~~~~

ソースコード

diff #

#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