【二部】ストーブ

リンク:https://ac.nowcoder.com/acm/problem/21860
出典:牛オフネットワーク

制限時間:C / C ++ 1秒、2秒言語は、他の
スペースの制限:C / C ++ 32768K、他の言語は65536kも
64ビットIOフォーマット:LLD%

タイトル説明

Jスモールスタートガスストーブを買うためにお金を稼ぐためにしようと、取り組んでいます。
初日、n個のJの元の小さな賃金、Dの元前日よりも彼の給料の翌日。
既知のガスストーブはガスストーブを購入するために、少なくとも数日間、小さなJを求めて、m個の元を必要とします。

説明を入力します。

4つの整数N、M、D、xは
一日あたりの給与量を増加させ、ガソリン価格、それぞれの小さな有料jの最初の日です、その答えは、x以上のものではありません

出力説明:

番号は、その答えを示し
例1

エントリー

コピー
10 100 20 100

輸出

コピー
4

説明

10 + 30 + 50 + 70> = 100

備考:

0≦N&、d≤1e9、N- + D> 0 
1≤m≤1e18
1≤x≤1e9

質問の意味:最初に、毎日支払わすることができますがnで、毎日が過払いD(ノート前日かもしれdがゼロ)こと、そしてあなたが給料を受け取る最小合計は日のx数を超えないガスストーブの必要性、購入するm個の元を超えることができますどのように多くの日尋ねたことがあり
思考:加算の問題を、そしてより多くをd日の価値を高める可能性があるので、これが始まりですSN = A0×n個の+(:算術シーケンス加算式を加算演算Dトレランスコラムの数、nは N×(N-1)×D / 2) に、mが、最大値は1E18を留意されたいです演算シーケンスの和のSn> = Mが、Snが、長い長の範囲を超える式変形するようにさせ、
nは日数で、初期値であり、dは許容範囲であり、mがより大きい必要値の合計が最小であり、得ます

    N * +に(*で(IN-1)×D)/ 2> = M
    2 * +(N *で)()で-1(IN * D)> = 2 * M
    *に(IN-1)* D> = 2 *(M-(N *で))

1 <= <= xに、私は何の答えの半分を考えることを指摘しながら、

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
図4は 、X、D、M、Nっ
5  ブールチェック(LL ){
 6      リターン  *( - 1)* D> = 2 *(M-(N * ))。
7  }
 8  INT メイン(){
 9      CIN >> N >> M >> D >> X。
10      LLのL = 1、R = X、ミッド=(L + R)>> 1 11      一方(L < R){
12          であれば(チェック(MID))、R = ミッド。
13           L =ミッド+ 1 14          半ば=(L + R)>> 1 15      }
 16      のprintf(" %LLDする\ n " 、MID)。
17  }
 18  / * **
 19  +におけるn *(IN-1 *()* D IN)/ 2> = M
 20  2 *(N *で)+(内(IN-1)* D)> = 2 * M
 21  *内(IN-1)* D> = 2 *(M-(N *で))
 22  ** * /

 

 

おすすめ

転載: www.cnblogs.com/brainm/p/11293710.html