USACO Section1.3 Barn Repair 解题报告

    barn1解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  有一列牛棚,编号从1到S,相邻的牛棚紧挨着(间距为0),每个牛棚长度是一个单位。
  其中有C头牛,分别在各自的牛棚中,不存在多个牛挤在一个牛棚的情况。
  现在下雨了,可是顶棚被刮飞了,于是John需要买些板子给牛棚安上暂时过夜。
  木材供应商比较坏,板子长度随便选,但最多卖N块。因此John需要考虑如何买,才能在保护到所有牛的前提下,让板子的长度尽量短。
【数据范围】
  1<=M<=50
  1<=S<=200
  1<=C<=S
  牛所在牛棚的编号保证合法。
【输入样例】
  4 50 18
  3
  4
  6
  8
  14
  15
  16
  17
  21
  25
  26
  27
  30
  31
  40
  41
  42
  43
【输出样例】
  25
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  将相邻牛棚的间距都求出来,共C-1个。
  降序排序,把前N-1个减去,就是最后答案了。
  当然,如果不足N-1个,那就都减去就好了。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  遗漏了一种情况。
  忘记了间距可能不足N-1个,于是WA(Wrong Answer)了。

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 1 /*
 2 ID: icedrea1
 3 PROB: barn1
 4 LANG: C++
 5 */
 6 
 7 #include <iostream>
 8 #include <fstream>
 9 using namespace std;
10 
11 void qsort(int a[],int l,int r)
12 {
13     if(l>=r) return;
14     int i=l,j=r,x=a[(l+r)>>1];
15     while(1)
16     {
17         while(a[i]<x) ++i;
18         while(a[j]>x) --j;
19         if(i>j) break;
20         swap(a[i],a[j]);
21         ++i; --j;
22     }
23     qsort(a,l,j); qsort(a,i,r);
24 }
25 
26 int main()
27 {
28     ifstream in("barn1.in");
29     ofstream out("barn1.out");
30 
31     int M,S,C;
32     int site[201],cha[200];
33     int sum;
34 
35     in>>M>>S>>C;
36     for(int i=1;i<=C;++i) in>>site[i];
37     qsort(site,1,C);
38     sum=site[C]-site[1]+1;
39 
40     for(int i=1;i!=C;++i) cha[i]=site[i+1]-site[i]-1;
41     qsort(cha,1,C-1);
42     for(int i=C-1;--M&&i>=1;--i) sum-=cha[i];
43 
44     out<<sum<<endl;
45 
46     in.close();
47     out.close();
48     return 0;
49 }

 

posted on 2015-03-09 12:32  IceDream61  阅读(210)  评论(0编辑  收藏  举报

导航