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   IceDream61  阅读(217)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示