2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)
生活随笔
收集整理的這篇文章主要介紹了
2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Energy Conversion
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4278????Accepted Submission(s): 1024
現在,百小度正在一個古老的石門面前,石門上有一段古老的魔法文字,讀懂這種魔法文字需要耗費大量的能量和大量的腦力。
過了許久,百小度終于讀懂魔法文字的含義:石門里面有一個石盤,魔法師需要通過魔法將這個石盤旋轉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邏輯題,精度問題。 思路:邏輯是這樣的,先排除不需要轉換就有足夠的能量開門的情況,即:N<=M。剩下的就是能量不夠的情況,需要轉換來產生能量,而這個時候會有兩種情況,轉換的能量越來越少(例如 V==M,剛開始轉換就消耗了所有能量,K多大都沒用了),轉換的能量越來越多。排除能量越來越少的情況,即:(M-V)*K<=M。剩下的就是能量越來越多的情況,最后模擬一下能量轉化過程,不斷循環產生能量,直到有足夠的能量開門為止,輸出轉換的次數。 注意:(M-V)*K 結果可能超出 int 范圍,所以每個數用?long long?類型,注意輸入輸出的時候要使用 "I64d"。 代碼: 1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 5 int main() 6 { 7 long long n,m,v,k; 8 int T; 9 scanf("%d",&T); 10 while(T--){ 11 scanf("%I64d%I64d%I64d%I64d",&n,&m,&v,&k); 12 int sum = 0; 13 if(m>=n) //不用轉換就可以 14 printf("0\n"); 15 else if((m-v)*k<=m) //一定不可以 16 printf("-1\n"); 17 else{ //模擬轉換過程,直到擁有足夠的能量 18 while(m<n){ 19 m = (m-v)*k; 20 sum++; 21 } 22 printf("%d\n",sum); 23 } 24 } 25 return 0; 26 }
?
Freecode :?www.cnblogs.com/yym2013轉載于:https://www.cnblogs.com/yym2013/p/3733182.html
總結
以上是生活随笔為你收集整理的2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 修改历史提交信息
- 下一篇: Arnold+Shave 渲染毛发