제출 #339857

#제출 시각아이디문제언어결과실행 시간메모리
339857Vladikus004등산 경로 (IZhO12_route)C++14
0 / 100
2077 ms6408 KiB
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define inf 2e9 using namespace std; typedef long long ll; typedef pair <int, int> pii; #define int long long const int N = 1000000 + 3; int n, k, a[N], b[N], cnt[N], buff[N]; ll solve(int k){ vector <int> st; for (int i = n - 1; i >= 0; i--) if (b[i] > 0) st.pb(i); for (int i = n - 1; i >= 0; i--){ while (!st.empty() && b[st.back()] == 0) st.pop_back(); if (b[i] > 0) st.push_back(i); if (b[i] < 0){ while (b[i] < 0 && !st.empty()){ int gt = min(-b[i], b[st.back()]); cnt[(st.back() + n - i) % n] += gt; b[st.back()] -= gt; b[i] += gt; while (!st.empty() && b[st.back()] == 0) st.pop_back(); } } } int ans = 0; for (int i = 1; i <= n; i++){ int gt = min(k/i, cnt[i]); k -= i * gt; cnt[i] -= gt; ans += gt; cnt[i] = 0; } return ans*2; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); // freopen("input.txt", "r", stdin); cin >> n >> k; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 1; i++) b[i] = a[i + 1] - a[i]; b[n - 1] = a[0] - a[n - 1]; int ans = 0; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++) buff[j] = b[j]; ans = max(ans, solve(k)); for (int j = 0; j < n; j++) b[j] = buff[j]; b[n] = b[0]; for (int j = 0; j < n; j++) b[j] = b[j + 1]; } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...