【USACO】Barn Repair

/*
ID: 
PROG: barn1
LANG: C++11
*/
#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int main()
{
  int boards_amount, stall_amount, cows_amount;
  int stall_occupied[250];
  freopen("barn1.in", "r", stdin);
  freopen("barn1.out", "w", stdout);
  cin >> boards_amount >> stall_amount >> cows_amount;
  for (int i = 0; i < cows_amount; i ++){
    scanf("%d", &stall_occupied[i]);
  }
  sort(stall_occupied, stall_occupied + cows_amount);
  struct Gap{
    int start, end;
    int dis() {return end - start + 1;};
  }gap[55];
  int idx = 0;
  for (int i = 1; i < cows_amount; i ++){
    if (stall_occupied[i] - stall_occupied[i - 1] == 1)
      continue;
    else{
      gap[idx].start = stall_occupied[i - 1] + 1; gap[idx++].end = stall_occupied[i] - 1;
    }
  }
  sort(gap, gap+idx, [](Gap a, Gap b){return a.dis() > b.dis();});
  int total_gap = 0;
  for (int i = 0; i < min(idx, boards_amount - 1); i ++){
    total_gap += gap[i].dis();
  }
  total_gap += stall_occupied[0] - 1;
  total_gap += stall_amount - stall_occupied[cows_amount - 1];
  cout << stall_amount - total_gap << endl;
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值