Submission #468998

#TimeUsernameProblemLanguageResultExecution timeMemory
468998MilladLiteh and Newfiteh (INOI20_litehfiteh)C++14
0 / 100
2 ms2380 KiB
// In the name of god #include <bits/stdc++.h> #define F first #define S second #define pb push_back #define debug(x) cerr << #x << " : " << x << '\n' using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll, ll> pll; const ll maxn = 1e5 + 5; const ll inf = 1e18; const ll lg = 20; ll n, a[maxn], dp[maxn][lg + 1][lg + 1], pw2[lg + 1], ANS[maxn]; int main(){ pw2[0] = 1; for(ll i = 1; i < lg; i ++)pw2[i] = (pw2[i - 1] * 2ll); cin >> n; for(ll i = 0; i < n; i ++){ cin >> a[i]; ANS[i] =inf; for(ll j = 0; j < lg; j ++){ if(a[i] < j)dp[i][0][j] = -1; else if(a[i] == j)dp[i][0][j] = 0; else if(a[i] == j + 1)dp[i][0][j] = 1; else dp[i][0][j] = -1; if(dp[i][0][0] != -1){ if(!i)ANS[i] = min(ANS[i], dp[i][0][0]); else if(ANS[i - 1] != -1)ANS[i] = min(ANS[i], dp[i][0][0] + ANS[i - 1]); } } ll d; for(ll j = 1; pw2[j] < lg; j ++){ for(ll k = 0; k < lg; k ++){ if(pw2[j] > (i + 1ll)){ dp[i][j][k] = -1; continue; } d = inf; if((k < (lg - 1ll)) &&(dp[i][j - 1][k + 1] != -1) && (dp[i - pw2[j - 1]][j - 1][k + 1] != -1)) d = min(d, dp[i - pw2[j - 1]][j - 1][k + 1] + dp[i][j - 1][k + 1] + 1ll); if((dp[i][j - 1][k] != -1) && (dp[i - pw2[j - 1]][j - 1][k] != -1)) d = min(d, dp[i - pw2[j - 1]][j - 1][k] + dp[i][j - 1][k]); if(d == inf)d = -1; dp[i][j][k] = d; } if(dp[i][j][0] != -1){ if(pw2[j] == i + 1ll)ANS[i] = min(ANS[i], dp[i][j][0]); else if(ANS[i - pw2[j]] != -1)ANS[i] = min(ANS[i], dp[i][j][0] + ANS[i - pw2[j]]); } } if(ANS[i] == inf)ANS[i] = -1; } cout << ANS[n - 1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...