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 }

 

你可能感兴趣的:(USACO)