제출 #294747

#제출 시각아이디문제언어결과실행 시간메모리
294747amoo_safar고대 책들 (IOI17_books)C++17
12 / 100
20 ms8448 KiB
#include "books.h" #include <bits/stdc++.h> #define pb push_back #define F first #define S second #define all(x) x.begin(), x.end() using namespace std; typedef pair<int, int> pii; typedef long long ll; const int N = 1e3 + 10; int mk[N], mk2[N]; int L[N], R[N]; int mn[N][N], mx[N][N]; ll dp[N][N]; ll minimum_walk(vector<int> p, int s) { int n = p.size(); ll ans = 0; ll near = n; for(int i = 0; i < n; i++){ if(p[i] != i){ ans += abs(p[i] - i); } else { mk[i] = 1; R[i] = i; L[i] = i; } } int st = 0, en = n - 1; while(p[st] == st && st < s) st ++; while(p[en] == en && en > s) en --; int com = 0; vector<pii> seg; for(int i = st; i < en; i++){ if(mk[i]) continue; com ++; vector<int> vis; int nw = i; while(!mk[nw]){ mk[nw] = 1; vis.pb(nw); nw = p[nw]; } sort(all(vis)); seg.pb({vis[0], vis.back()}); for(auto x : vis) L[x] = vis[0]; for(auto x : vis) R[x] = vis.back(); } if(com == 0) return 0; sort(all(seg)); int mxr = 0; for(int i = 0; i < (int)seg.size(); i++){ if(mxr < seg[i].F) mk2[mxr] = 1, ans += 2; mxr = max(mxr, seg[i].S); } mk2[mxr] = 1; for(int i = 0; i < n; i++) mn[i][i] = L[i]; for(int i = 0; i < n; i++) mx[i][i] = R[i]; for(int ln = 1; ln < n; ln ++){ for(int i = 0; i + ln < n; i++){ int j = i + ln; mn[i][j] = min(mn[i][j - 1], mn[i + 1][j]); mx[i][j] = max(mx[i][j - 1], mx[i + 1][j]); } } if(ans == 0) return 0; int nwl = s; int nwr = s; while(!mk2[nwr]){ int l2 = mn[nwl][nwr]; int r2 = mx[nwl][nwr]; cerr << "! " << nwl << ' ' << nwr << ' ' << l2 << ' ' << r2 << '\n'; if(pii(l2, r2) == pii(nwl, nwr) && !mk2[r2]){ ans += 2; l2 --; r2 ++; } nwl = l2; nwr = r2; } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

books.cpp: In function 'll minimum_walk(std::vector<int>, int)':
books.cpp:25:5: warning: unused variable 'near' [-Wunused-variable]
   25 |  ll near = n;
      |     ^~~~
#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...