2 条题解
-
5
首先,用贪心的方式,哪边大/小删哪个是不可取的,因为存在可以 hack 掉代码的数据,例如:
5 2 5 1 8 4 3 //预计输出 15 13 //实际输出 14 13
所以我们得使用其他方法
注意到,删去两边 = 留下中间,故我们可以用前缀和枚举中间剩下的部分的最大/最小值
#include<bits/stdc++.h> using namespace std; long long a[2000006],qian[200006],maxx=-1e18,minn=1e18,n,k; int main(){ //freopen("delete.in","r",stdin); //freopen("delete.out","w",stdout); cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; qian[i]=qian[i]+a[i]; } for(int i=0;i<=k;i++){ maxx=max(maxx,qian[n-k+i]-qian[i]); minn=min(minn,qian[n-k+i]-qian[i]); } cout<<maxx<<" "<<minn; return 0; }
我给这份代码加了几个 bug,切忌 Ctrl+C/V
信息
- ID
- 785
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 116
- 已通过
- 22
- 上传者