Submission #989366

#TimeUsernameProblemLanguageResultExecution timeMemory
989366muhammadFeast (NOI19_feast)C++17
0 / 100
45 ms5588 KiB
#include <bits/stdc++.h> using namespace std ; int main() { ios::sync_with_stdio(false); cin.tie(0) ; // freopen("revegetate.in", "r", stdin); // freopen("revegetate.out", "w", stdout); int n , k ; cin >> n >> k ; int p=0 , ne=0 , z =0 ; int arn [n] ; vector <int> po ; vector <int> neg ; //int ze ; vector <int> negsum ; int nesum = 0 ; for (int i = 0 ; i < n ;i++ ) { cin >> arn[i] ; if (arn[i] > 0 ) { p++ ; int pos = arn[i] ; po.push_back(pos) ; }else if (arn[i] < 0 ) { ne++ ; int nega =arn[i] ; neg.push_back(nega) ; }else { z++ ; // ze = 0 ; } } int res = 0 ; for (int i = 1 ; i < n ; i++ ) { if (arn[i] > 0 && arn[i-1] >= 0 ) { negsum.push_back(0) ; }else if (arn[i] < 0 && arn[i-1] > 0 ){ nesum = arn[i] ; for (int j = i + 1 ; j < n ; j++ ) { if (arn[j] > 0 ) { negsum.push_back(nesum) ; i = j -1 ; break; }else { nesum += arn[j] ; } } } } if (n == k ) { if (p == n || z == 0 ) { for (int i = 0 ; i < n ; i++ ) { res += arn[i] ; } cout << res << endl; }else { if (z >= 1 ) { for (int i = 0 ; i < p ; i++ ) { res += po[i] ; } cout << res << endl; } } }else if (n > k ) { int dif = n - k ; if (ne == dif ) { for (int i = 0 ; i < p ; i++ ) { res += po[i] ; } }else if (ne > dif && z == 0 ) { for (int i = 1 ; i < ne && neg[i] > neg[i-1] ; i++ ) { swap (neg[i], neg[i-1]) ; for (int j = i - 1 ; j > 0 && neg[j] > neg[j-1] ; j-- ) { swap (neg[j],neg[j-1]) ; } } for (int i = 0 ; i < ne - dif ; i++ ) { res += neg[i] ; } for (int i = 0 ; i < p ; i++ ) { res += po[i] ; } cout << res << endl; }else if (z >= 1 && ne > dif ) { for (int i = 0 ; i < p ; i++ ) { res += po[i] ; } cout << res << endl; }else if (ne < dif ) { // int wdif = dif - ne ; sort (po.begin(), po.end()) ; sort (negsum.begin(), negsum.end()) ; int os = (int) negsum.size() ; for (int i = p-1 , j = 1 , o = (int) os - 1 ; i >=0 && o >= 0 ; i--, j++ ) { if (j <= k ) { res += po[i] ; // cout << " res" << " " << endl; }else { if (po[i] + negsum[o] > 0 ) { res += po[i] + negsum[o] ; }else { break; } o--; } } cout << res << endl; // cout << os << endl; } } return 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...