제출 #1105935

#제출 시각아이디문제언어결과실행 시간메모리
1105935VinhLuu휴가 (IOI14_holiday)C++17
30 / 100
176 ms3664 KiB
#include <bits/stdc++.h> //#define int long long #define ll long long #define all(lpv) lpv.begin(), lpv.end() #define fi first #define se second #include "holiday.h" using namespace std; typedef pair<int,int> pii; const int N = 1e5 + 5; int n, S, K; ll a[N]; namespace sub1{ ll solve(){ ll ans = 0; for(int msk = 0; msk < (1 << n); msk ++){ vector<int> vr; int mi = n + 1, mx = 0; ll cnt = 0; for(int i = 1; i <= n; i ++) if(msk >> (i - 1) & 1){ mi = min(mi, i); mx = max(mx, i); vr.push_back(i); } if(mi <= S && S <= mx){ int remain = K - min(mx - S, S - mi) - (mx - mi); if(remain < (int)vr.size()) continue; }else if(mx <= S){ int remain = K - (S - mi); if(remain < (int)vr.size()) continue; }else{ int remain = K - (mx - S); if(remain < (int)vr.size()) continue; } for(auto j : vr) cnt += a[j]; ans = max(ans, cnt); } return ans; } } namespace sub2{ int cnt[205]; ll solve(){ ll ans = 0; for(int i = 1; i <= n; i ++){ int remain = K - (i - 1); if(remain < 0) break; ll tmp = 0; cnt[a[i]]++; for(int j = 100; j >= 1; j --){ int val = min(remain, cnt[j]); tmp += 1ll * val * j; remain -= val; } ans = max(ans, tmp); } return ans; } } // //int st[N << 2], T[N << 2]; //vector<int> rrh; // //void update(int i,int l,int r,int u,int x,int type){ // if(l > r || r < u || u < l) return; // if(l == r){ // if(type == -1){ // T[i]--; // st[i] -= x; // }else{ // // } // return; // } // // int mid = (l + r) / 2; // update(i << 1, l, mid, u, x, type); // update(i << 1|1, mid + 1, r, u, x, type); // st[i] = st[i << 1] + st[i << 1|1]; // T[i] = T[i << 1] + T[i << 1|1]; //} // //namespace sub3{ // void solve(){ // // for(int r = S; r <= n; r ++){ // // for(int l = S; l >= 1; l --){ // int remain = K - min(r - S, l - S) - (r - l); // } // } // } //} ll findMaxAttraction(int _n, int start, int d, int attraction[]) { n = _n; S = start + 1; K = d; for(int i = 0; i < n; i ++) a[i + 1] = attraction[i]; if(n <= 20) return sub1 :: solve(); // else if(S == 0) return sub2 :: solve(); // pre(); // return sub3() :: solve(); } //#define lpv #ifdef lpv signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "v" if(fopen(task ".inp","r")){ freopen(task ".inp","r",stdin); freopen(task ".out","w",stdout); } int _n, start, d; int attraction[100000]; int i, n_s; n_s = scanf("%d %d %d", &_n, &start, &d); for (i = 0 ; i < _n; ++i) { n_s = scanf("%d", &attraction[i]); } printf("%lld\n", findMaxAttraction(_n, start, d, attraction)); return 0; } #endif // lpv
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...