Submission #1013448

#TimeUsernameProblemLanguageResultExecution timeMemory
1013448amine_arouaNestabilnost (COI23_nestabilnost)C++17
0 / 100
1438 ms524288 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define int long long #define nl '\n' int n; vector<int> a , f; vector<map<int ,int>> possible_k; vector<int> dp; signed main() { cin>>n; a.assign(n , 0); f.assign(n + 1 , 0); for(int i = 0 ; i < n ; i++) cin>>a[i]; int mn = 1e9; for(int i = 1 ; i <= n;i++) { cin>>f[i]; mn = min(mn , f[i]); } for(int i = 1 ; i <= n - 1 ; i++) { int u , v; cin>>u>>v; } if(n == 1) { cout<<mn<<nl; return 0; } possible_k.assign(n , map<int ,int>()); for(int i = 0 ; i + 1 < n ; i++) { int diff = abs(a[i] + 1 - a[i + 1]); vector<int> vals; if(diff == 0) { for(int j = 1 ; j <= n;j++) { vals.pb(j); } } else { for(int d = 1 ; d* d <= diff ; d++) { if(d * d == diff) { vals.pb(d); } else if(diff % d == 0) { vals.pb(d); vals.pb(diff/d); } } } for(auto k : vals) { if(possible_k[i].count(k)) continue; int last = i + 1; for( ; last < n && (abs(a[last - 1] - a[last] + 1) % k == 0); last++); for(int j = i; j < last ; j++) { possible_k[j][k] = last; } } } dp.assign(n + 1 , 1e18); dp[n] = 0; for(int i = n - 1 ; i >= 0 ; i--) { dp[i] = dp[i + 1] + mn; if(i + 1 < n) { for(auto [k , last] : possible_k[i]) { dp[i] = min(dp[i] , dp[last] + f[k]); } } } cout<<dp[0]<<nl; }
#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...