Problem Description
魔法師百小度也有遇到難題的時候——
現在,百小度正在一個古老的石門面前,石門上有一段古老的魔法文字,讀懂這種魔法文字需要耗費大量的能量和大量的腦力。
過了許久,百小度終于讀懂魔法文字的含義:石門裡面有一個石盤,魔法師需要通過魔法将這個石盤旋轉X度,以使上面的刻紋與天相對應,才能打開石門。
但是,旋轉石盤需要N點能量值,而為了解讀密文,百小度的能量值隻剩M點了!破壞石門是不可能的,因為那将需要更多的能量。不過,幸運的是,作為魔法師的百小度可以耗費V點能量,使得自己的能量變為現在剩餘能量的K倍(魔法師的世界你永遠不懂,誰也不知道他是怎麼做到的)。比如,現在百小度有A點能量,那麼他可以使自己的能量變為(A-V)*K點(能量在任何時候都不可以為負,即:如果A小于V的話,就不能夠執行轉換)。
然而,在解讀密文的過程中,百小度預支了他的智商,是以他現在不知道自己是否能夠旋轉石盤,打開石門,你能幫幫他嗎?
Input
第一題很容易,注意不要逾時就一切ok,直接上代碼
輸入資料第一行是一個整數T,表示包含T組測試樣例;
接下來是T行資料,每行有4個自然數N,M,V,K(字元含義見題目描述);
資料範圍:
T<=100
N,M,V,K <= 10^8
#include<iostream>
using namespace std;
int fmagic(long long int N,long long int M,long long int V,long long int K,int count)
{
long long int m=M,n=N,v=V,k=K;
int c=count;
while(m<n)
{
if((m-v)<1 || k<=1 || ((m-v)==1 && k<=2))
return -1;
m=(m-v)*k;
c++;
}
return c;
}
int main()
{
int T,s[100],i=0,count=0;
long long int n,m,v,k;
cin>>T;
while(T--)
{
cin>>n>>m>>v>>k;
s[i++]=fmagic(n,m,v,k,0);
}
while(T<i-1)
cout<<s[++T]<<endl;
return 0;
}