제출 #123181

#제출 시각아이디문제언어결과실행 시간메모리
123181SirCeness고대 책들 (IOI17_books)C++14
0 / 100
3 ms376 KiB
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define inside sl<=l&&r<=sr #define outside r<sl||sr<l #define inf 1000000009 using namespace std; typedef long long ll; int n; vector<int> arr; vector<ll> numara; vector<ll> beg; vector<ll> en; vector<pair<int, pair<int, int> > > edges; int num = 0; vector<pair<ll, ll> > minler; vector<int> dsu; int find(int node){ if (dsu[node] == node) return node; int ans = find(dsu[node]); return dsu[node] = ans; } void unionn(int node1, int node2){ node1 = find(node1); node2 = find(node2); if (node1 == node2) return; dsu[node1] = node2; } ll minimum_walk(vector<int> p, int s){ arr = p; n = p.size(); numara.resize(n); int sonn = n-1; while (p[sonn] == sonn && sonn > 0) sonn--; if (sonn == 0) return 0; int strt = 0; while (p[strt] == strt) strt++; ll ans = 0; for (int i = 0; i < n; i++) numara[i] = -1; for (int i = 0; i < n; i++){ if (numara[i] == -1 && p[i] != i){ int node = i; int lmost = node; int rmost = node; while (numara[node] == -1){ numara[node] = num; ans += abs(p[node] - node); node = p[node]; lmost = min(lmost, node); rmost = max(rmost, node); } beg.pb(lmost); en.pb(rmost); num++; //ans += (2*(rmost-lmost)); } } for (int i = 0; i < n; i++) cout << numara[i] << " "; cout << endl; vector<list<int> > begs(n); vector<list<int> > ens(n); for (int i = 0; i < num; i++){ begs[beg[i]].pb(i); ens[en[i]].pb(i); } set<int> open; for (int i = strt; i <= sonn; i++){ for (list<int>::iterator it = begs[i].begin(); it != begs[i].end(); ++it){ open.insert(*it); } for (list<int>::iterator it = ens[i].begin(); it != ens[i].end(); ++it){ open.erase(open.find(*it)); } if (open.size() == 0) ans += 2; } ans -= 2; int mindist = inf; for (int i = s; i < n; i++){ if (numara[i] != -1){ mindist = min(mindist, i-s); break; } } for (int i = s; i >= 0; i--){ if (numara[i] != -1){ mindist = min(mindist, s-i); break; } } ans += 2*mindist; /*cout << "sonn: " << sonn << endl; cout << "strt: " << strt << endl; cout << "mindist: " << mindist << endl;*/ return ans; }

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

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