#のP1909は、鉛筆の問題解決を買います

タイトル説明

P nは教師は、子どもたちがNOIPのギフトを参加として鉛筆を買いに店に行く必要があります。彼女は店に合計見つかった  3 異なる可能性が異なるパッケージの数で包装鉛筆、鉛筆の3種類、価格は変更される場合があります。公平を期すためには、Pの先生は鉛筆の同じパッケージを購入することを決めました。

ショップは、Pの先生はより多くを購入する必要があるかもしれないので、鉛筆のパッケージを開くことが許可されていないN-を子どもたちが贈り物を送信するためにためのn-鉛筆で十分です。

今Pの先生は各パッケージの数は、少なくとも十分に購入するには、十分なものである保存、知りたいと思ったN- 多くのお金を費やす必要以上のn-鉛筆を。

入力形式

最初の行は、正の整数含まN- 、N-必要鉛筆の数を表します。

次の3行2つの2つの正の整数説明包装さ鉛筆:前記第1 のAは、ペンシル内のこのようなパッケージの整数、最初表し2つの2価格整数ようなパッケージ。

すべてのことを確認してください。7 7桁以下である10000 。1 0 0 0 0を含む正の整数。

出力フォーマット

1 お金を表す整数は、少なくともP教師を取ります。

サンプル入力と出力

入力#1
1  57 
2  2  2 
3  50  30 
4  30  27
コードの表示
出力#1
1  57
コードの表示
 
入力#2
1  9998 
2  128  233 
3  128  2333 
4  128  666
コードの表示
出力#2
1  18407
コードの表示
入力#3
1  9999 
2  101  1111年
3  1  9999 
4  1111  9999
コードの表示
出力#3
1  89991
コードの表示

説明/ヒント

鉛筆三つの異なる包装材は、次のとおりです。

  • 2 2負荷速度は2 2。
  • 50 。5 0率があることを意味30 3。0であり;
  • 30 。3 0手段率は27 2 7

Pの先生は、少なくとも購入する必要があります57本の5 7鉛筆を。

彼女は最初のパッケージを購入することを選択した場合、その後、彼女は購入したい29 2 合計、9部を2 \ =タイムズ29 58 2 × 2 。9 = 。5 。8本のスティックを、お金はそれがためにかかる2 \ =タイムズ29 58 2 × 2 。9 = 5 8

実際には、Pの教師は、第三のパッケージを購入することを選択しますので、あなたは購入する必要がある2つの2コピーを。なおに利用できる最終的な鉛筆より多く、30 \ 60倍= 2 。3 0 × 2 = 6本の0スティックが、コストはに減少した27 \ 54は、2倍=で2 。7 × 2 = 5 。4、第より少ないです。

第二のパッケージについては各ペンシルが最低価格ですが、送信するのに十分な購入する必要があるものの、2 2部を、実際のコストは、到達した  30 \タイムズ2 = 60 。3 0 × 2 = 6 0、したがって、無教師P彼らは、選択されます。

だから、答えは最終的な出力ということである54です。5 4

[サブタスク]

サブタスクは、テストデータの特性の一部を説明します。あなたが問題を解決するために問題が発生した場合は、試験データの一部のみを解決しようとすることができます。

データサイズと次の表の各テストポイントの特性:

「整数倍」を意味テーブルの上にある:それはある場合K K、データを対応する鉛筆の数が必要示しN- N-鉛筆セットは(あなたが必ずしも鉛筆を買うことができないことを意味する)、各整数倍のためのパッケージの数です。

問題の解決策

  • 分析

重要蓄積するビット演算を使用し、倍増のアイデアです

。1 I << 1は同等です* I 2
コードの表示
  • 問題の解決策

1つの#include <ビット/ STDC ++ H.>
 2  使用して 名前空間STD;
 3  INT I、J、K、N-、M、W、ANS;
 4  int型のmain()
 5。 {
 6。      scanfの(" %のD "、およびN-)。
 7      ための(I = 0 ;私は< 3 ; I ++ 8      {
 9          scanfの(" %のDの%のD "、&​​J、およびK);
 10          、M = J;
 11          W = K; // 入力共存初期価格と番号
12は         、一方(J <N-)
 13である         {
 14              J = << 1。;
 15              K = << 1。 ; // 価格増加数は2 * N-より大きくなるまで
16          }
 17。         一方、(J> N-)
 18である         {
 19。              J- = M;
 20であります              - K- W =; // * 2を購入するあまりにつながる可能性があり、マイナスの一部
21である         }
 22であり         、一方(J < N-)
 23は         、{
 24              J + = M;
 25              ; K = Wの+ //は、減算後小さすぎる可能性があり、およびプラスいくつか
26         }
 27          IF(K <|| ANS ANS == 0 28              ANS = K; //は最小コストであるかどうかを決定する
29      }
 30      のprintf(" %d個の\ N- " 、ANS);
 31である     リターン 0 ; // 出力とリターン
32 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/ssf-lrk/p/11263204.html