zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    10uF的电容能滤除什么频率的电源纹波?
    Integrate Logic Analyzer入门
    状态机
    Setup和Hold(Max/Min)分析
    RS232
    Vivado时序分析概念setup time, hold time
    python学习第34天
    python学习第33天
    python学习第32天
    python学习第31天
  • 原文地址:https://www.cnblogs.com/icedream61/p/4323268.html
Copyright © 2011-2022 走看看