結果

問題 No.550 夏休みの思い出(1)
ユーザー IL_mstaIL_msta
提出日時 2017-07-29 00:13:49
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 3,924 bytes
コンパイル時間 1,240 ms
コンパイル使用メモリ 106,304 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-10-10 07:04:17
合計ジャッジ時間 2,526 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 AC 2 ms
6,820 KB
testcase_05 WA -
testcase_06 AC 2 ms
6,816 KB
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 AC 2 ms
6,820 KB
testcase_12 AC 2 ms
6,820 KB
testcase_13 AC 2 ms
6,820 KB
testcase_14 AC 1 ms
6,816 KB
testcase_15 AC 3 ms
6,816 KB
testcase_16 AC 2 ms
6,816 KB
testcase_17 AC 2 ms
6,820 KB
testcase_18 AC 2 ms
6,816 KB
testcase_19 AC 2 ms
6,816 KB
testcase_20 AC 3 ms
6,820 KB
testcase_21 AC 3 ms
6,820 KB
testcase_22 AC 2 ms
6,820 KB
testcase_23 AC 2 ms
6,820 KB
testcase_24 AC 2 ms
6,820 KB
testcase_25 AC 2 ms
6,816 KB
testcase_26 AC 2 ms
6,820 KB
testcase_27 AC 2 ms
6,820 KB
testcase_28 AC 2 ms
6,820 KB
testcase_29 AC 2 ms
6,816 KB
testcase_30 AC 2 ms
6,820 KB
testcase_31 AC 2 ms
6,820 KB
testcase_32 AC 2 ms
6,820 KB
testcase_33 AC 2 ms
6,824 KB
testcase_34 AC 2 ms
6,816 KB
testcase_35 AC 2 ms
6,816 KB
testcase_36 AC 2 ms
6,816 KB
testcase_37 AC 2 ms
6,820 KB
testcase_38 AC 2 ms
6,816 KB
testcase_39 AC 2 ms
6,820 KB
testcase_40 AC 2 ms
6,820 KB
testcase_41 AC 2 ms
6,816 KB
testcase_42 AC 2 ms
6,820 KB
testcase_43 AC 2 ms
6,816 KB
testcase_44 AC 2 ms
6,820 KB
testcase_45 AC 2 ms
6,820 KB
testcase_46 AC 2 ms
6,820 KB
testcase_47 AC 2 ms
6,816 KB
testcase_48 AC 2 ms
6,816 KB
testcase_49 AC 2 ms
6,816 KB
testcase_50 AC 2 ms
6,816 KB
testcase_51 AC 2 ms
6,820 KB
testcase_52 AC 2 ms
6,816 KB
testcase_53 AC 2 ms
6,820 KB
testcase_54 AC 2 ms
6,820 KB
testcase_55 AC 2 ms
6,816 KB
testcase_56 AC 2 ms
6,820 KB
testcase_57 AC 2 ms
6,820 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#pragma region include
#include <iostream>
#include <iomanip>
#include <stdio.h>

#include <sstream>
#include <algorithm>
#include <cmath>
#include <complex>

#include <string>
#include <cstring>
#include <vector>
#include <tuple>
#include <bitset>

#include <queue>
#include <complex>
#include <set>
#include <map>
#include <stack>
#include <list>

#include <fstream>
#include <random>
//#include <time.h>
#include <ctime>
#pragma endregion //#include
/////////
#define REP(i, x, n) for(int i = x; i < n; ++i)
#define rep(i,n) REP(i,0,n)
#define ALL(X) X.begin(), X.end()
/////////
#pragma region typedef
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef std::pair<LL,LL> PLL;//
typedef std::pair<int,int> PII;//
#pragma endregion //typedef
////定数
const int INF = (int)1e9;
const LL MOD = (LL)1e9+7;
const LL LINF = (LL)1e18+20;
const double PI = acos(-1.0);
const double EPS = 1e-9;
/////////
using namespace::std;

LD A,B,C,D;
LD X1(){
	LD a = (-27*A*A*D+9*A*B*C-2*B*B*B);
	LD b = 4*(3*A*C-B*B);
	b = b*b*b;
	a = a*a + b;
	a = sqrt(a);
	a -= 27*A*A*D+9*A*B*C-2*B*B*B;
	a = pow(a,(LD)1/3);
	LD a_ = (LD)3.0*pow(2,(LD)1/3) * A;
	a = a/a_;
	
	LD a2 = pow(2,(LD)1/3) * (3*A*C-B*B);
	LD a2_ = 3*A * a;
	a2 = a2 / a2_;
	LD ans = a + a2 - B/(3*A);
	return ans;
}

LD X2(){
	LD ans = 0;
	//i
	return ans;
}
pair<LD,LD> niji(LD A,LD B,LD C){
	pair<LD,LD> ans;
	LD D = sqrt( B*B-4*A*C );
	ans.first = (-B+D)/(2*A);
	ans.second = (-B-D)/(2*A);
	if( ans.first > ans.second ){
		swap(ans.first, ans.second);
	}
	return ans;
}
LD f(LD X){
	return A*X*X*X+B*X*X+C*X+D;
}
LD ff(LD X){
	return (LD)3.0*A*X*X+(LD)2.0*B*X+C;
}
void solve(){
	A = 1;
	cin >> B >> C >> D;
	/*
	解と係数の関係
	α+β+γ = -B/A
	αβ+βγ+γα = C/A
	αβγ= -D/A

	A = 1;
	α+β+γ = -B
	αβ+βγ+γα = C
	αβγ= -D
	*/
	pair<LD,LD> kabe;
	kabe = niji(3*A, 2*B,C);
	if( kabe.first < 0 ){
		kabe.first -= EPS;
	}else{
		kabe.first += EPS;
	}
	if( kabe.second < 0){
		kabe.second -= EPS;
	}else{
		kabe.second += EPS;
	}

	vector<LL> ans(3);
	LD L,R;
	L = -LINF;
	R = floor( kabe.first );

	LD mid;
	int NNN = 10000;
	bool flag = true;
	LD temp_ = ff(R);
	LD temp = f(R);
	if( f(R) < 0 ){
		flag = false;
	}
	{
		LD tempL = f(L);
		LD tempR = f(R);
		if( tempL > tempR ){
			flag = false;
		}
	}
	while(NNN--){
		mid = (L+R)/2;
		if( f(mid) > 0 ){
			if( flag ){
				R = mid;
			}else{
				L = mid;
			}
		}else{
			if( flag ){
				L = mid;
			}else{
				R = mid;
			}
		}
	}
	if( R < 0 ){
		ans[0] = R - EPS;
	}else{
		ans[0] = R + EPS;
	}
	/////
	L = floor(kabe.first);
	if( L <= ans[0] ){
		L += 1;
	}
	R = floor( kabe.second );
	{
		LD tempL = f(L);
		LD tempR = f(R);
		if( tempL > tempR ){
			flag = false;
		}
	}
	NNN = 10000;
	while(NNN--){
		mid = (L+R)/2;
		if( f(mid) > 0 ){
			if( flag ){
				R = mid;
			}else{
				L = mid;
			}
		}else{
			if( flag ){
				L = mid;
			}else{
				R = mid;
			}
		}
	}
	if( R < 0 ){
		ans[1] = R - EPS;
	}else{
		ans[1] = R + EPS;
	}
	///
	NNN = 10000;
	L = floor(kabe.second);
	if( L <= ans[1] ){
		L += 1;
	}
	R = LINF;
	flag = true;
	{
		LD tempL = f(L);
		LD tempR = f(R);
		if( tempL > tempR ){
			flag = false;
		}
	}
	
	while(NNN--){
		mid = (L+R)/2;
		if( f(mid) > 0 ){
			if( flag ){
				R = mid;
			}else{
				L = mid;
			}
		}else{
			if( flag ){
				L = mid;
			}else{
				R = mid;
			}
		}
	}
	if( R < 0 ){
		ans[2] = R - EPS;
	}else{
		ans[2] = R + EPS;
	}
	
	/*for(int i=0;i<3;++i){
		for(int j=-1;j<=1;++j){
			if( f( ans[i]+j ) == 0 ){
				ans[i] = ans[i]+j;
				break;
			}
		}
	}*/
	sort( ALL(ans) );
	for(int i=0;i<3;++i){
		if(i) cout << " ";
		cout << ans[i];
	}
	cout << endl;
}

#pragma region main
signed main(void){
	std::cin.tie(0);
	std::ios::sync_with_stdio(false);
	std::cout << std::fixed;//小数を10進数表示
	cout << setprecision(16);//小数点以下の桁数を指定//coutとcerrで別	

	solve();
}
#pragma endregion //main()
0