测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A23549. 动物园里的动物房间一个紧挨着另一个排成一行,房间的门也是一个紧靠着一个,门的宽度都是一样的。有些房间里住着一个动物,有些没有。暴风雨把动物园的门都吹飞了。管理员现在的紧急任务是赶紧找些木板来竖立在那些住着动物的房间面前,防止他们溜出来。最直接的方式可以拿一块长长的木板直接横跨竖立在第一个房间到最后一个房间之间,但是这样太浪费木材长度了,因为有些房间没有动物在里面,可以不竖立木板在这些房间面前。木…

单选题 较易

题目描述

动物园里的动物房间一个紧挨着另一个排成一行,房间的门也是一个紧靠着一个,门的宽度都是一样的。有些房间里住着一个动物,有些没有。暴风雨把动物园的门都吹飞了。管理员现在的紧急任务是赶紧找些木板来竖立在那些住着动物的房间面前,防止他们溜出来。最直接的方式可以拿一块长长的木板直接横跨竖立在第一个房间到最后一个房间之间,但是这样太浪费木材长度了,因为有些房间没有动物在里面,可以不竖立木板在这些房间面前。木板供应商可以提供任意长度的木板,但是木板的块数是有限的,而且价格是按照所买的木板总长度计算的,不是按块数计算。管理员想买最小总长度的木板,把任务完成。(提示:例如长度为3的木板可以竖立在3个紧挨着的房间面前。)

给出m(1<=m<=50)表示供应商能提供的木板块数、s(1<=s<=200)表示房间总数、动物的总数n(1<=n<= s),以及每个动物所在房间编号(编号在1到 s之间),请算出拦住所有有动物的房间所需木板的最小总长度。

输入:第一行三个整数 m,s,n,意义如题目描述。第二行输入 n 个整数,表示动物所在的房间编号,编号并不一定按照从小到大。

输出:一行,一个整数,表示所需木板的最小总长度。

程序如下:

#include<bits/stdc++.h>
using namespace std;
int a[210], b[210];
bool cmp(int x, int y) {①;}
int main()
{
    int m, s, n;
    cin >> m >> s >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    sort(②);
    for(int i = 1; i < n; i++) // 计算“相邻”两个动物所在的房间之间的空隙
        b[i] = ③;
    sort(b + 1, b + n, cmp);
    int ans = ④;
    for(int i = 1; ⑤ ; i++)
        ans = ans - b[i];
    cout << ans;
    return 0;
}

①处应该填(    )。

选项(单选)

上一题 下一题