天天看點

2014百度之星1001

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;
}