1 条题解
-
0Takagi-san (njnu19200437) LV 10 MOD @ 2022-04-02 16:37:06
lc周赛里抄的题目
https://leetcode-cn.com/problems/append-k-integers-with-minimal-sum/
将数组排序后枚举,若前一个数是l,后一个数是r,则需要添加r-l+1个数,和增加 (l+1)+...+(r-1)(这个值用等差数列公式算。)
时间复杂度主要体现在排序上,是\(\mathcal{O(n \log n)}\)
最终输出ans。
#include<bits/stdc++.h> using namespace std; int main() { int n, k;cin>>n>>k; vector<long long> a(n+2, 0); for(int i=1;i<=n;i++) cin>>a[i]; a[0] = 0; a[n+1] = 1e10; sort(a.begin(), a.end()); long long ans = -1e10; for(int i=1;i<=n+1;i++) { ans+=a[i]; int t = a[i] - a[i-1] - 1; if(t >= 0) { if(k>=t) { k-=t; ans += (a[i]-1 + a[i-1]+1) * (a[i]-1 - a[i-1]) / 2; } else { ans += (a[i-1]+1 + a[i-1]+k) * k / 2; k=0; } } } cout<<ans; return 0; }
- 1
信息
- ID
- 1346
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 266
- 已通过
- 16
- 通过率
- 6%
- 被复制
- 2
- 上传者