图片说明

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;
}