acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
  • 商城
登录
注册
题目详情提交记录(0)
  • 把两个牛中间的间隔空棚数量,排序就可以了

    #include<bits/stdc++.h> using namespace std; typedef long long ll; int a[205],b[205]; int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int m,n,t; cin>>m>>n>>t; for(int i=1;i<=t;i++)cin>>a[i]; sort(a+1,a+t+1); if(t<=m){cout<<t;return 0;}//如果牛的数量少于木板要求的数量,就是输出,牛的数量,因为一个牛一块板最省; int cnt=t,ans=t,k=0;//先设定一共有牛的数量的木板块数,总长也是牛的数量; cnt=块数, for(int i=2;i<=t;i++){ if(a[i]-a[i-1]==1)cnt--;//如果两个牛棚挨着,就减一块木块,总长不变; else b[k]=a[i]-a[i-1]-1;//如果两个牛棚不挨着,就把这个差,存在新的数组里; } if(cnt<=m){cout<<t;return 0;}//如果精减木板,就少于m,就输出t; sort(b+1,b+k+1);//把这个差(就是每两个不挨着的牛的中间的空棚数,排序); for(int i=1;i<=min(k,cnt-m);i){//多几块板,我们就合并几块,最少的间距;注意遍历到k与cnt-m的最小值; ans+=b[i]; } cout<<ans; }

    userId_undefined
    华英雄
    时间刺客秩序白银快乐小狗分支·分支解题者
    18阅读
    0回复
    0点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页