2 条题解

  • 5
    @ 2024-10-5 14:17:35

    首先,用贪心的方式,哪边大/小删哪个是不可取的,因为存在可以 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
上传者