我感觉我这代码挺好懂的
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+100; int a[maxn]; int main(){ int t,n,k; cin>>t; while(t--){ long long ans=0; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=n;i>=1;i--){ a[i]-=a[i-1]; } for(int i=2;i<=n-k+1;i++){ if(a[i]<0){ a[i+k]+=a[i]; ans-=a[i]; a[i]=0; } } for(int i=n;i>=k+1;i--){ if(a[i]>0){ a[i-k]+=a[i]; ans+=a[i]; a[i]=0; } } int flag=0; for(int i=2;i<=n;i++){ if(a[i]){ flag=1; break; } } if(flag) printf("-1\n"); else printf("%lld\n",ans); } return 0; }