NC22902. 修理牛棚
描述
输入描述
第 1 行:M , S 和 C(用空格分开)
第 2 到 C+1行:每行包含一个整数,表示牛所占的牛棚的编号。
输出描述
单独的一行包含一个整数表示所需木板的最小总长度。
示例1
输入:
4 50 18 3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43
输出:
25
说明:
一种最优的安排是用板拦住牛棚3-8,14-21,25-31,40-43.C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 508K, 提交时间: 2022-11-30 19:59:01
#include<bits/stdc++.h> using namespace std; int m,s,c; int mlong[205],mlongm[205]; int main() { cin>>m>>s>>c; for(int i=1;i<=c;i++){ cin>>mlong[i]; } sort(mlong+1,mlong+c+1); for(int i=1;i<=c-1;i++){ mlongm[i]=mlong[i+1]-mlong[i]-1; } sort(mlongm+1,mlongm+c); reverse(mlongm+1,mlongm+c); int sum=0; for(int i=1;i<=m-1;i++){ sum+=mlongm[i]; } cout<<mlong[c]-mlong[1]+1-sum; return 0; }
C++ 解法, 执行用时: 3ms, 内存消耗: 400K, 提交时间: 2021-12-12 16:32:28
#include <bits/stdc++.h> using namespace std; const int N=210; int m,s,c; int a[N],b[N]; int main() { cin>>m>>s>>c; for(int i=0;i<c;i++) cin>>a[i]; sort(a,a+c); int ans=a[c-1]-a[0]+1; for(int i=1;i<c;i++) b[i]=a[i]-a[i-1]-1; sort(b+1,b+1+c,greater<int>()); for(int i=1;i<=m-1;i++) ans-=b[i]; cout<<ans<<endl; return 0; }
Python3(3.9) 解法, 执行用时: 43ms, 内存消耗: 6868K, 提交时间: 2021-05-12 20:00:41
import sys M, S, C = map(int, input().split()) if M >= C: print(C) sys.exit() a = [] for i in range(C): a.append(int(input())) a.sort() b = [] for i in range(1, C): b.append(a[i] - a[i-1]) b.sort(reverse=True) ans = a[C-1] - a[0] + 1 for i in range(M - 1): ans = ans - b[i] + 1 print(ans)