2567 谷仓维修
2567 谷倉維修
?時間限制: 1 s ?空間限制: 32000 KB ?題目等級 : 白銀 Silver ? 題目描述?Description在一個夜黑風高,下著暴風雨的夜晚,farmer John的牛棚的屋頂、門被吹飛了。 好在許多牛正在度假,所以牛棚沒有住滿。 牛棚一個緊挨著另一個被排成一行,牛就住在里面過夜。 有些牛棚里有牛,有些沒有。 所有的牛棚有相同的寬度。 自門遺失以后,farmer John必須盡快在牛棚之前豎立起新的木板。 他的新木材供應商將會供應他任何他想要的長度,但是吝嗇的供應商只能提供有限數目的木板。 farmer John想將他購買的木板總長度減到最少,請你幫farmer John算出最少需要多少木板(每個牛棚占一塊木板)。
輸入描述?Input Description- 第 1 行: 木板最大的數目M ,牛棚的總數S 和 牛的總數C(用空格分開)
- 第 2 到 C+1行: 每行包含一個整數,表示牛所占的牛棚的編號。
單獨的一行包含一個整數表示所需木板的最小總長度。
樣例輸入?Sample Input 4 50 18 3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43 樣例輸出?Sample Output 25 數據范圍及提示?Data Size & Hint給出:可能買到的木板最大的數目M(1<= M<=50);牛棚的總數S(1<= S<=200); 牛棚里牛的總數C(1 <= C <=S);和牛所在的牛棚的編號stall_number(1 <= stall_number <= S),計算攔住所有有牛的牛棚所需木板的最小總長度。 輸出所需木板的最小總長度作為答案。
思路:算出來兩兩相鄰之間的距離,并計算出第一個牛棚到最后一個牛棚的距離和,因為可以用m個木板,所以只允許中間空(m-1)個空隙,所以,求出最大的空隙,減去即可;
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 int m,s,c,h; 6 int num[1010]; 7 int t[1010]; 8 int ans,k,n; 9 bool cmp(int a,int b) 10 { 11 return a>b; 12 } 13 int main() 14 { 15 cin>>m>>s>>c; 16 for(int i=1;i<=c;++i) 17 cin>>num[++h]; 18 sort(num+1,num+h+1); 19 ans=num[h]-num[1]+1; 20 for(int i=1;i<h;++i) 21 { 22 t[i]=num[i+1]-num[i]-1; 23 } 24 sort(t+1,t+h+1,cmp); 25 for(int i=1;i<m;++i) 26 { 27 ans-=t[i]; 28 } 29 cout<<ans; 30 return 0; 31 }?
轉載于:https://www.cnblogs.com/mjtcn/p/6764438.html
總結
- 上一篇: CentOs7安装JDK/Tomcat/
- 下一篇: 图书管理系统活动图和时序图