long max(long long a , long long b){ //a 跟 b 都是超 int 的 还用 int 接受
if(a>b)return a;
return b;
}
long long mod = 1e9 + 7; //低级错误 这个还犯错
int kConcatenationMaxSum(int* arr, int arrSize, int k){
int i ;
long long cut = 0;
long long sum= 0 ;
long long pre_end = 0;
long long end_pre = 0;
long long ans = 0;
for (i = 0 ; i < arrSize ; i++){
sum += arr[i];
}
for (i = arrSize-1 ,cut = 0; i>= 0 ; i--){
cut += arr[i];
end_pre = max(end_pre,cut);
}
for( i = 0 ,cut = 0; i < arrSize ; i++){
cut += arr[i];
pre_end = max(pre_end , cut );
}
for(i = 0,cut = 0 ; i < arrSize; i++){
cut += arr[i];
if(cut < 0)cut = 0;
ans = max (cut , ans); //直接用ans接受 省了一步
}
if(k == 1)return ans % mod;
ans = max(ans , sum * k);//取每一种情况的最大值就好 就是答案
//ans = max(ans , pre_end +sum*(k-1)); 这两步可以不用
//ans = max(ans,end_pre+ sum*(k-1)); 这两步可以不用
if(k>=2){
ans = max (ans , sum*(k-2) + end_pre+pre_end);
ans = max (ans , end_pre+pre_end);
}
ans %= mod;
return ans;
}

京公网安备 11010502036488号