1. 程式人生 > >ACM-百度之星資格賽之Energy Conversion——hdu4823

ACM-百度之星資格賽之Energy Conversion——hdu4823

ios break get enter span bmi ria hint -c

Energy Conversion

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 85 Accepted Submission(s): 46


Problem Description   魔法師百小度也有遇到難題的時候——

  如今。百小度正在一個古老的石門面前。石門上有一段古老的魔法文字,讀懂這樣的魔法文字須要耗費大量的能量和大量的腦力。

  過了許久。百小度最終讀懂魔法文字的含義:石門裏面有一個石盤。魔法師須要通過魔法將這個石盤旋轉X度,以使上面的刻紋與天相相應,才幹打開石門。

  可是,旋轉石盤須要N點能量值。而為了解讀密文,百小度的能量值僅僅剩M點了!破壞石門是不可能的,由於那將須要很多其它的能量。只是,幸運的是。作為魔法師的百小度能夠耗費V點能量。使得自己的能量變為如今剩余能量的K倍(魔法師的世界你永遠不懂,誰也不知道他是怎麽做到的)。比方。如今百小度有A點能量,那麽他能夠使自己的能量變為(A-V)*K點(能量在不論什麽時候都不能夠為負,即:假設A小於V的話,就不能夠運行轉換)。

  然而,在解讀密文的過程中,百小度預支了他的智商,所以他如今不知道自己是否可以旋轉石盤,打開石門,你能幫幫他嗎?

Input   輸入數據第一行是一個整數T。表示包括T組測試例子。
  接下來是T行數據,每行有4個自然數N,M,V,K(字符含義見題目描寫敘述)。

  數據範圍:
  T<=100
  N,M,V,K <= 10^8

Output   對於每組數據,請輸出最少做幾次能量轉換才可以有足夠的能量點開門;
  假設無法做到,請直接輸出-1。



Sample Input
4
10 3 1 2
10 2 1 2
10 9 7 3
10 10 10000 0

Sample Output
3
-1
-1
0

Source 2014年百度之星程序設計大賽 - 資格賽

題目:http://acm.hdu.edu.cn/showproblem.php?pid=4823


一道非常easy的題目,題意一目了然。

一個循環就搞定了。

唯一一個坑就是,存儲數據用long long。

然後每次推斷 不僅要推斷 剩余魔法是否足夠使用轉換魔法,還要推斷 這次轉換後魔法是否多余之前沒轉換時的魔法。

這樣就能夠過了。


/****************************************
*****************************************
*        Author:Tree                    *
*From :http://blog.csdn.net/lttree      *
* Title : Energy Conversion             *
*Source: hdu 4823  百度之星資格賽      *
* Hint  : water                         *
*****************************************
****************************************/

#include <iostream>
using namespace std;

int main()
{
    int n,m,v,k,t;
    int step;
    // 要用long long 喲~!

long long now,pre; cin>>t; while( t-- ) { cin>>n>>m>>v>>k; step=0; now=m; while( now<n ) { pre=now; now=(pre-v)*k; // 假設剩余能量小於施展轉換魔法的能量,或者當前能量小於轉換之前的能量。則永遠無法成功 if( now<v || pre>=now ) { step=-1; break; } ++step; } cout<<step<<endl; } return 0; }



ACM-百度之星資格賽之Energy Conversion——hdu4823