1. 程式人生 > >hdu 6227 Rabbits題解

hdu 6227 Rabbits題解

Here N (N ≥ 3) rabbits are playing by the river. They are playing on a number line, each occupying a different integer. In a single move, one of the outer rabbits jumps into a space between any other two. At no point may two rabbits occupy the same position. 
Help them play as long as possible

Input

The input has several test cases. The first line of input contains an integer t (1 ≤ t ≤ 500) indicating the number of test cases. 
For each case the first line contains the integer N (3 ≤ N ≤ 500) described as above. The second line contains n integers a1a1 < a2a2 < a3a3 < ... < aNaN which are the initial positions of the rabbits. For each rabbit, its initial position 
aiai satisfies 1 ≤ aiai ≤ 10000. 

Output

For each case, output the largest number of moves the rabbits can make. 

Sample Input

5
3
3 4 6
3
2 3 5
3
3 5 9
4
1 2 3 4
4
1 2 4 5

Sample Output

1
1
3
0
1

這道題主要是審題問題,有兩個容易誤解的地方。第一個是題目中所說的兩邊其實是指第一隻兔子和最後一隻兔子,也就是隊伍的最左最右兩邊,而不是相對於某一隻特定的兔子的左邊和右邊。也就是說不是最左最右的兔子是不能動的。第二個是兩邊其實就是大範圍的兩邊,而不一定是相鄰的兩邊,因為題中強調了是any other two。接下來就是一次貪心。

#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 510
using namespace std;
int a[N];
int b[N];
int main(){
	int n,k;
	scanf("%d",&k);
	while(k--){
		scanf("%d",&n);
		int sum=0;
		for(int i=0;i<n;++i)
			scanf("%d",&a[i]);
		for(int i=0;i<n-1;++i){
			b[i]=a[i+1]-a[i]-1;
			sum+=b[i]; 
		}
		int ans=sum-min(b[0],b[n-2]);
		printf("%d\n",ans);			 
	}
	return 0;
}