[] Luogu1016の予算の旅行者 - アナログ

タイトル説明

旅行者は、(出発タンクが空であると仮定される)別の都市への1つの都市から最小コストのために車を運転したいと考えています。二つの都市間の距離を設定しD1D1 D 1、車両タンク容量CCを移動することができるガソリンのリットル当たり(リットル)C距離D2D2 D 2、ガソリン開始点のリットル当たりPPのPに沿って充填ステーションの数NN N(NN Nがゼロであってもよい)、ガソリンスタンドII Iの出発点からの距離ディディD I、ガソリン当たりのリットルピピP I(I = 1,2、...、ニッケル= 1,2、...、NのI = 1 2 ... N)。結果は、小数点以下に丸められます。あなたは目的地に到達できない場合は、出力が「いいえソリューションありません」。

入力形式

最初の行、D1D1 D 1、CCのC、D2D2 D 2、PP P、NN N.

そして、そこにNN N行。

I + 1I。1 + iが+ 。1行、2つの数値を、始点からiはステーション距離ガソリンディディD i及びリットル価格ピピP Iを。

出力フォーマット

必要最低限​​のコストが、結果は小数点第3位を四捨五入。あなたは目的地に到達できない場合は、出力が「いいえソリューションありません」。

サンプル入力と出力

入力#1
275.6 11.9 27.4 2.8 2 
102.0 2.9 
220.0 2.2
出力#1
26.95

説明/ヒント

N 。6、残りの数字≤500

アイデア:

      これは議論に注意を払う、道路シミュレーションの質問です。

コード:

#include <cstdioを> 
する#include <iostreamの> 
する#include <cstdlib> 
の#include <アルゴリズム> 
の#define N 100000 
名前空間stdを使用。
ダブルD1、C、D2、P、MAXX、MO、lenの。
int型のn; 
構造体ノード{ 
	ダブルCOS、DIS。
} E [N]。
ブールCMP(ノードA、ノードB)
{ 
	a.dis <b.disを返します。
} 
INT移動(今INT)
{ 
	int型缶= 99999。
	INT F = E [今] .DIS。
	(私は++; I [i]は.DIS-F <= MAXX Eを<= N && I =今+ 1 INT)のために
	{ 
		(.cos <E [今] .cos E [I])であれば
		{ 
			MO + =(E [I ] .DIS-F-LEN)/ D2の*のE [今] .cos。
			LEN = 0; 
			私は返します。
		} 
		(99999 || E [i]は.cos <E [缶] .cosを==ことができる)可能であれば= Iであり;
	IF(D1-E [今] <= MAXX .DIS)
	{ 
		MO + =(D1-E [今] .DIS-LEN)を/ D2 * E [今] .cosと、
		9999を返します。
	} 
	(99999 ==ことができる)場合
	、{ 
		プット( "ノーソリューション"); 
		-1を返します。
	} 
	{ 
		MO + = C * E [今] .cos。
		LEN + =(MAXX-eは[缶]は+ Fを.DIS)。
		返すことができます。
	} 
} 
int型のmain()
{ 
	scanf関数( "%LF%LF%LF%LF%のD"、&D1、&C、&D2、&P&N)
	以下のために(INT i = 1; iが++; iが<= N)
	{ 
		scanf関数( "%のLFの%のLF"、&E [i]は.DIS、&E [I] .cos)を、
	} 
	E [0] .DIS = 0。
	E [0] .cos = P。
	ソート(E + 1、E + N + 1、CMP)。
	MAXX = C * D2。
	INTのK = 0、T。
	実行{ 
		T =ムーブ(K)。
		(Tの== - 1)であれば0を返します。
	}一方、(T = 9999!)。
	printf( "%2F。"、MO); 
	0を返します。
}

 

 

 

おすすめ

転載: www.cnblogs.com/yelir/p/11569502.html