Time Limit: 3000MS

Memory Limit: 32768KB

64bit IO Format: %lld & %llu

LightOJ - 1425


The Monkey and the Oiled Bamboo



Submit Status




Description




It's time to remember the disastrous moment of the old school math. Yes, the little math problem with the monkey climbing on an oiled bamboo. It goes like:

"A monkey is trying to reach the top of an oiled bamboo. When he climbs up 3 feet, he slips down 2 feet. Climbing up 3 feet takes 3 seconds. Slipping down 2 feet takes 1 second. If the pole is 12 feet tall, how much time does the monkey need to reach the top?"

When I was given the problem, I took it seriously. But after a while I was thinking of killing the monkey instead of doing the horrible math! I had rather different plans (!) for the man who oiled the bamboo.

Now we, the problem-setters, got a similar oiled bamboo. So, we thought we could do better than the traditional monkey. So, I tried first. I jumped and climbed up 3.5 feet (better than the monkey! Huh!) But in the very next second I just slipped and fell off to the ground. I couldn't remember anything after that, when I woke up, I found myself in a bed and the anxious faces of the problem setters around me. So, like old school times, the monkey won with the oiled bamboo.

So, I made another plan (somehow I want to beat the monkey), I took a ladder instead of the bamboo. Initially I am on the ground. In each jump I can jump from the current rung (or the ground) to the next rung only (can't skip rungs). Initially I set my strength factor k. The meaning of k is, in any jump I can't jump more thank feet. And if I jump exactly k feet in a jump, k is decremented by 1. But if I jump less than k feet, k remains same.

For example, let the height of the rungs from the ground be 1, 6, 7, 11, 13 respectively and k be 5. Now the steps are:

1.      Jumped 1 foot from the ground to the 1st rung (ground to 1). Since I jumped less than k feet, k remains 5.

2.      Jumped 5 feet for the next rung (1 to 6). So, k becomes 4.

3.      Jumped 1 foot for the 3rd rung (6 to 7). So, k remains 4.

4.      Jumped 4 feet for the 4th rung (7 to 11). Thus k becomes 3.

5.      Jumped 2 feet for the 5th rung (11 to 13). And so, k remains 3.

Now you are given the heights of the rungs of the ladder from the ground, you have to find the minimum strength factor k, such that I can reach the top rung.





Input



Input starts with an integer T (≤ 12), denoting the number of test cases.

Each case starts with a line containing an integer n (1 ≤ n ≤ 105) denoting the number of rungs in the ladder. The next line contains n space separated integers, r1, r2 ..., rn (1 ≤ r1 < r2 < ... < rn ≤ 109)denoting the heights of the rungs from the ground.





Output



For each case, print the case number and the minimum possible value of as described above.





Sample Input



2

5

1 6 7 11 13

4

3 9 10 14





Sample Output



Case 1: 5

Case 2: 6




Source



Problem Setter: Jane Alam Jan


Special Thanks: Sohel Hafiz


//题意:输入一个数字n,接下来一行输入n个数


表示你第 i 步到达的高度,问最小的爬升距离k是多少才能让你爬到杆顶?当然爬升是有规定的,如果你某一步的爬升距离等于k时,k的值就得减1,否则一直是k(某一步的爬升距离不能超过k)。


//思路:


根据题意规定可知,先求出相邻两高度之间的高度差的最大值mm,再用这个最大值mm遍历这n个高度差,看是否满足题意,若不满足,那么k==mm+1,否则k==mm;


Hait:你开始是在0高度处(在这块WA了一次)。。



#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#define N 100010
using namespace std;
int a[N],b[N];
int main()
{
	int t,T=1,n,i,j,k;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		scanf("%d",&a[0]);
		b[0]=a[0];
		int mm=b[0];
		for(i=1;i<n;i++)
		{
			scanf("%d",&a[i]);
			b[i]=a[i]-a[i-1];
			mm=max(mm,b[i]);
		}
		int m=mm;
		int flag=0;
		for(i=1;i<n;i++)
		{
			if(mm==b[i])
				mm--;
			else if(mm<b[i])
			{
				flag=1;
				break;
			}
		}
		printf("Case %d: ",T++);
		if(flag)
			printf("%d\n",m+1);
		else
			printf("%d\n",m);
	}
}