fork download
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5.  
  6. void kcanketenate(int *b,int n,int k,int *a){
  7.  
  8. int j =0;
  9. while(k) {
  10. for(int i=0;i<n;i++){
  11. b[j] = a[i];
  12. j++;
  13. }
  14. k--;
  15. }
  16. }
  17.  
  18. long long maxFind( int *b,int n) {
  19.  
  20. long long maxsofar = INT_MIN;
  21. long long currensum = 0;
  22.  
  23. for(int i =0;i<n;i++){
  24. currensum = currensum +b[i];
  25.  
  26. maxsofar = max(maxsofar,currensum);
  27. if(currensum < 0) {
  28. currensum = 0;
  29. }
  30. }
  31.  
  32. return maxsofar;
  33. }
  34.  
  35. int main() {
  36. // your code goes here
  37. int t;
  38. cin>>t;
  39. while(t--){
  40. int n,k;
  41. cin>>n>>k;
  42.  
  43. int a[n];
  44. for(int i=0;i<n;i++){
  45. cin>>a[i];
  46. }
  47.  
  48. int b [n*2];
  49. kcanketenate(b,n,2,a);
  50.  
  51.  
  52. int sum = 0;
  53. for(int i=0;i<n;i++){
  54. sum += a[i];
  55. }
  56.  
  57. long long kmax = maxFind(b,2*n);
  58. if (k ==1 ) {
  59. cout<<kmax<<endl;
  60. } else {
  61. if(sum < 0){
  62. cout<<kmax<<endl;
  63. } else {
  64. cout<<kmax + (k-2) * sum<<endl;
  65. }
  66. }
  67. }
  68. return 0;
  69. }
Success #stdin #stdout 0s 4356KB
stdin
2
2 3
1 2
3 2
1 -2 1
stdout
9
2