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 }
原文地址:https://www.cnblogs.com/jj81/p/7822061.html