제출 #1269251

#제출 시각아이디문제언어결과실행 시간메모리
1269251onimFeast (NOI19_feast)C++17
12 / 100
51 ms7400 KiB
// author : MOHAMMED OMAR FAIAZ ONIM // gmail : u2104029@student.cuet.ac.bd // 戦え #include <bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; const int N = 2e5 + 5; const long long INF = 1e18; #define ll long long int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int testcases = 1; // cin>>testcases; while (testcases--) { ll n, k; cin >> n >> k; vector<ll> v(n); vector<ll> comp; for (ll i = 0; i < n; i++) { cin >> v[i]; } ll sum = 0, l = 0, ok = 1; vector<ll> neg; vector<ll> poscomp; ll sz = 0; while (l < n) { if (ok) { while (ok && l < n && v[l] >= 0) { sz++; sum += v[l]; l++; } comp.push_back(sum); poscomp.push_back(sum); } else { while (!ok && l < n && v[l] < 0) { neg.push_back(v[l]); sum += v[l]; l++; } comp.push_back(sum); } sum = 0; ok ^= 1; } if (k >= poscomp.size()) { ll ans = accumulate(poscomp.begin(), poscomp.end(), 0ll); ll rem = max(k - sz, 0ll); sort(neg.begin(), neg.end()); while (rem--) { ans += neg.back(); neg.pop_back(); } cout << ans << "\n"; return 0; } // sz = poscomp.size(); // cout<<sz<<endl; ll y = 20; while (y--) { for (ll i = 0; i < comp.size(); i++) { if (comp[i] < 0 && i - 1 >= 0 && i + 1 < comp.size() && (comp[i - 1] + comp[i + 1] + comp[i]) > max(comp[i - 1], comp[i+1])) { // cout<<comp[i-1]<<" "<<comp[i]<<" "<<comp[i+1]<<" "<<endl; comp[i + 1] = comp[i - 1] + comp[i + 1] + comp[i]; comp[i - 1] = 0; comp[i] = 0; // cout<<"ok"<<endl; } } // for (auto &to : comp) // cout << to << " "; // cout << endl; vector<ll> v; for (auto &i : comp) { if (i != 0) v.push_back(i); } comp = v; for (ll i = comp.size() - 1; i >= 0; i--) { if (comp[i] < 0 && i - 1 >= 0 && i + 1 < comp.size() && (comp[i - 1] + comp[i + 1] + comp[i]) > max(comp[i - 1], comp[i+1])) { comp[i + 1] = 0; comp[i] = 0; comp[i - 1] = comp[i - 1] + comp[i + 1] + comp[i]; } } v.clear(); for (auto &i : comp) { if (i != 0) v.push_back(i); } comp = v; } sort(comp.begin(), comp.end()); ll ans = 0; while (k--) { ans += comp.back(); comp.pop_back(); } cout << ans << endl; } }
#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...