Energy ConversionTime
Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6795 Accepted Submission(s): 1642
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
#include#include #include #include #include #include #define INF 0x3f3f3f3f #define maxn 100001 #define LL __int64 using namespace std; int main() { int t,num,ok; scanf("%d",&t); LL n,m,v,k,test; while(t--) { ok=1; num=0; scanf("%I64d%I64d%I64d%I64d",&n,&m,&v,&k); while(m