제출 #292803

#제출 시각아이디문제언어결과실행 시간메모리
292803Saboon고대 책들 (IOI17_books)C++17
50 / 100
340 ms69640 KiB
#include "books.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6 + 10; bool visited[maxn]; int c[maxn]; vector<pair<int,int>> g[maxn]; ll dp[maxn]; long long MST(int src){ ll ret = 0; memset(dp, 63, sizeof dp); dp[src] = 0; set<pair<ll,int>> S; S.insert({dp[src],src}); while (!S.empty()){ int v = (*S.begin()).second; S.erase(S.begin()); ret += dp[v]; for (auto [u,w] : g[v]){ if (dp[u] > w){ S.erase({dp[u],u}); dp[u] = w; S.insert({dp[u],u}); } } } return 2LL*ret; } long long minimum_walk(vector<int> p, int s){ int n = p.size(); set<int> S; ll answer = 0; for (int i = 0; i < n; i++) answer += abs(p[i]-i); int Max, Min, last; Max = s, last = s+1; for (int i = s; i < n; i++){ if (!visited[i] and p[i] != i){ int x = i; c[i] = i+1; if (i != s){ g[last].push_back({c[i],max(0,i-Max)}); g[c[i]].push_back({last,0}); } while (!visited[x]){ visited[x] = 1; c[x] = c[i]; if (x > Max){ Max = x; last = c[x]; } x = p[x]; } } } Min = s, last = s+1; memset(visited, 0, sizeof visited); for (int i = s; i >= 0; i--){ if (!visited[i]){ int x = i; if (c[i] == 0) c[i] = i+1; if (i != s){ g[last].push_back({c[i],max(0,Min-i)}); g[c[i]].push_back({last,0}); } while (!visited[x]){ visited[x] = 1; c[x] = c[i]; if (Min > x){ Min = x; last = c[x]; } x = p[x]; } } } answer += MST(s+1); return answer; }

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

books.cpp: In function 'long long int minimum_walk(std::vector<int>, int)':
books.cpp:37:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   37 |     for (int i = 0; i < n; i++)
      |     ^~~
books.cpp:39:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   39 |  int Max, Min, last;
      |  ^~~
#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...