제출 #726033

#제출 시각아이디문제언어결과실행 시간메모리
726033adrilen쌀 창고 (IOI11_ricehub)C++17
100 / 100
94 ms2884 KiB
#include "ricehub.h" #include<bits/stdc++.h> using namespace std; using ll = long long; typedef pair<int, int> pii; int besthub(int n, int L, int X[], long long b) { vector <ll> fields; for (int i = 0; i < n; i++) fields.emplace_back(X[i]); if (n <= 5e3) { ll cur = 0; if (n == 1) return 1; int output = 0; ll p; int left, right; for (int i = 0; i < n; i++) { p = fields[i]; cur = b; left = i - 1, right = i + 1; while (true) { if (left < 0 && right == n) { break; } else if (left < 0) { if (cur >= fields[right] - p) { cur -= fields[right] - p; right++; } else break; } else if (right == n) { if (cur >= p - fields[left]) { cur -= p - fields[left]; left--; } else break; } else if (p - fields[left] < fields[right] - p) { if (cur >= p - fields[left]) { cur -= p - fields[left]; left--; } else break; } else { if (cur >= fields[right] - p) { cur -= fields[right] - p; right++; } else break; } } output = max(output, right - left - 1); } return output; } auto pos = fields.begin(), lt = fields.begin(), rt = fields.begin() + 1; ll cur = 0; if (n == 1) return 1; long output = 0; while (rt != fields.end()) { while (cur > b) { cur -= *pos - *lt; lt++; } while (rt != fields.end() && cur + (*rt - *pos) <= b) { cur += (*rt - *pos); rt++; } while (rt != fields.end() && (*pos - *lt) > (*rt - *pos)) { cur += (*rt - *pos) - (*pos - *lt); lt++, rt++; while (rt != fields.end() && cur + (*rt - *pos) <= b) { cur += (*rt - *pos); rt++; } } output = max(output, ((rt - fields.begin()) - (lt - fields.begin()))); pos++; if (rt != fields.end()) { cur += (*pos - *(pos - 1)) * ((pos - fields.begin()) - (lt - fields.begin())); cur += (*(pos - 1) - *pos) * ((rt - fields.begin()) - (pos - fields.begin())); } } // cerr << output << "\n"; return output; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...