제출 #98463

#제출 시각아이디문제언어결과실행 시간메모리
98463bogdan10bos고대 책들 (IOI17_books)C++14
12 / 100
3 ms512 KiB
#include <bits/stdc++.h> #include "books.h" using namespace std; typedef long long LL; typedef pair<int, int> pii; typedef pair<int, pii> p3i; LL minimum_walk(vector<int> p, int s) { LL ans = 0LL; int N = p.size(); for(int i = 0; i < N; i++) ans += abs(i - p[i]); vector<int> f; f.resize(N); for(int i = 0; i < N; i++) f[i] = i; function<int(int)> F = [&](int x) -> int { if(x == f[x]) return x; return f[x] = F(f[x]); } ; for(int i = 0; i < N; i++) { int fx = F(i), fy = F(p[i]); if(fx == fy) continue; f[fy] = fx; } vector<int> nodes; vector<p3i> edges; for(int i = 0; i < N; i++) if(p[i] != i) nodes.push_back(i); for(int i = 0; i < nodes.size(); i++) { int nod = nodes[i]; edges.push_back({abs(s - nod), {s, nod}}); if(i > 0) { int lst = nodes[i - 1]; edges.push_back({abs(nod - lst) + abs(lst - p[nod]) - abs(nod - p[nod]), {nod, lst}}); } } sort(begin(edges), end(edges)); for(auto &e: edges) { int cst = e.first, x = e.second.first, y = e.second.second; int fx = F(x), fy = F(y); if(fx == fy) continue; ans += 2LL * cst; f[fy] = fx; } return ans; }

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

books.cpp: In function 'LL minimum_walk(std::vector<int>, int)':
books.cpp:34:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < nodes.size(); i++)
                    ~~^~~~~~~~~~~~~~
#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...