Submission #1220965

#TimeUsernameProblemLanguageResultExecution timeMemory
1220965vicvicOBELISK (NOI14_obelisk)C++20
25 / 25
61 ms1352 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int k, m; int dp[505][105]; vector <pair <int, int>> layer[505]; int dist (pair <int, int> a, pair <int, int> b) { int ret=1ll << 60; pair <int, int> d={abs (b.first-a.first), abs (b.second-a.second)}; if (m==1) return d.first+d.second; int v_x=d.first/(m+1)*(m+1); int v_y=d.second/(m+1)*(m+1); for (auto p : vector <pair <int, int>>{{v_x, v_y}, {v_x, v_y+m+1}, {v_x+m+1, v_y}, {v_x+m+1, v_y+m+1}}) { int res=p.first/(m+1)*2+p.second/(m+1)*2; res+=abs (p.first-d.first)!=0 && p.second==0?2+abs (p.first-d.first):abs (p.first-d.first); res+=abs (p.second-d.second)!=0 && p.first==0?2+abs (p.second-d.second):abs (p.second-d.second); ret=min (ret, res); } return ret; } int32_t main () { memset (dp, 0x3f, sizeof(dp)); ios_base :: sync_with_stdio (0); cin.tie (nullptr); cin >> k >> m; int s_x, s_y, e_x, e_y; cin >> s_x >> s_y >> e_x >> e_y; pair <int, int> s={s_x, s_y}, e={e_x, e_y}; layer[0].push_back (s); for (int i=1;i<k;i++) { int cnt; cin >> cnt; for (int j=1;j<=cnt;j++) { int x, y; cin >> x >> y; layer[i].push_back ({x, y}); } } layer[k].push_back (e); dp[0][0]=0; for (int i=0;i<k;i++) { for (int j=0;j<layer[i].size();j++) { for (int k=0;k<layer[i+1].size();k++) { dp[i+1][k]=min (dp[i+1][k], dp[i][j]+dist (layer[i][j], layer[i+1][k])); } } } cout << dp[k][0]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...