ACM | HDU|6227_Rabbit
题意:
有n只兔子分别占据不同的位置,任意一只兔子可以插入任意两只兔子的之间,但要求两只兔子之间要有空位,求这样的移动次数最多能够有多少?
在这里每一只兔子没有区别,可以看做把最左端或者最右端的兔子放入中间的插空,从左到右或者从右到左,就可以得到移动的最多次数了。一句话,就是先把所有两只兔子之间的距离叠加起来,再去减去min(最左端的两只兔子的距离,最右端的两只兔子的距离)。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 int t,n,ans; 7 int position[5005]; 8 while(~scanf("%d",&t)) { 9 while(t--) 10 { 11 scanf("%d",&n); 12 ans = 0; 13 for(int i = 0; i < n; i++) 14 scanf("%d",&position[i]); 15 for(int i = 1; i < n; i++) 16 ans += (position[i] - position[i-1]-1); 17 18 ans -= min(position[1] - position[0]-1,position[n-1] - position[n-2]-1); 19 cout<<ans<<endl; 20 } 21 22 } 23 24 return 0; 25 }