제출 #417102

#제출 시각아이디문제언어결과실행 시간메모리
417102Kevin_Zhang_TWSky Walking (IOI19_walk)C++17
10 / 100
197 ms123356 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb emplace_back #define AI(i) begin(i), end(i) template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); } template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); } #ifdef KEV #define DE(args...) kout("[ " + string(#args) + " ] = ", args) void kout() { cerr << endl; } template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); } template<class T> void debug(T l, T r) { while (l != r) cerr << *l << " \n"[next(l)==r], ++l; } #else #define DE(...) 0 #define debug(...) 0 #endif // TODO Watch out for the size const int MAX_N = 400010; const ll inf = 1ll << 55; #include "walk.h" // graph is 0 based int n, m; vector<int> xup[MAX_N]; vector<int> x, h, pfsz; vector<pair<int,int>> edge[MAX_N]; int get_id(int i, int j) { assert(binary_search(AI(xup[i]), j)); return lower_bound(AI(xup[i]), j) - begin(xup[i]) + pfsz[i]; } void init_ver() { pfsz.resize(n+1); for (int i = 0;i < n;++i) { sort(AI(xup[i])); xup[i].erase(unique(AI(xup[i])), end(xup[i])); pfsz[i+1] = pfsz[i] + xup[i].size(); for (int j = 1;j < xup[i].size();++j) { int a = pfsz[i]+j-1, b = pfsz[i] + j //int a = get_id(i, xup[i][j-1]), b = get_id(i, xup[i][j]), , d = xup[i][j] - xup[i][j-1]; edge[a].pb(b, d); edge[b].pb(a, d); } } for (int i = 0;i < n;++i) for (int y : xup[i]) DE(i, y, get_id(i, y)); } void mbuild(vector<int> l, vector<int> r, vector<int> y) { map<int, vector<int>> xs; for (int i = 0;i < n;++i) { for (int j : xup[i]) xs[j].pb(i); } for (int i = 0;i < m;++i) { //DE(l[i], r[i], y[i]); vector< int > loc; auto it = lower_bound(AI( xs[y[i]] ), l[i]); while (it != end(xs[y[i]])) { if (*it > r[i]) break; loc.pb(*it++); } // for (int j = l[i];j <= r[i];++j) { // //DE(j, h[j]); // if (h[j] < y[i]) continue; // // loc.pb( j ); // } for (int j = 1;j < loc.size();++j) { int a = get_id(loc[j-1], y[i]), b = get_id(loc[j], y[i]), d = x[ loc[j] ] - x[ loc[j-1] ]; edge[a].pb(b, d); edge[b].pb(a, d); } } } ll sho(int s, int t) { int V = pfsz.back() + 10; vector<ll> dis(V, inf); priority_queue<pair<ll,ll>, vector<pair<ll,ll>>, greater<pair<ll,ll>>> pq; auto upd = [&](int id, ll d) { if (chmin(dis[id], d)) pq.emplace(d, id); }; upd(s, 0); while (pq.size()) { auto [d, x] = pq.top(); pq.pop(); if (d != dis[x]) continue; if (x == t) return d; DE(x, d); for (auto [u, w] : edge[x]) upd(u, d + w); } return -1; } long long min_distance(std::vector<int> x, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int s, int g) { n = x.size(); m = l.size(); ::x = x; ::h = h; for (int i = 0;i < m;++i) { for (int j = l[i];j <= r[i];++j) { if (h[j] < y[i]) continue; xup[j].pb(y[i]); } } xup[s].pb(0), xup[g].pb(0); DE(s, g); init_ver(); mbuild(l, r, y); return sho( get_id(s, 0), get_id(g, 0) ); }

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

walk.cpp: In function 'void init_ver()':
walk.cpp:42:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |   for (int j = 1;j < xup[i].size();++j) {
      |                  ~~^~~~~~~~~~~~~~~
walk.cpp:14:17: warning: statement has no effect [-Wunused-value]
   14 | #define DE(...) 0
      |                 ^
walk.cpp:53:4: note: in expansion of macro 'DE'
   53 |    DE(i, y, get_id(i, y));
      |    ^~
walk.cpp:52:12: warning: unused variable 'y' [-Wunused-variable]
   52 |   for (int y : xup[i])
      |            ^
walk.cpp: In function 'void mbuild(std::vector<int>, std::vector<int>, std::vector<int>)':
walk.cpp:80:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |   for (int j = 1;j < loc.size();++j) {
      |                  ~~^~~~~~~~~~~~
walk.cpp: In function 'll sho(int, int)':
walk.cpp:14:17: warning: statement has no effect [-Wunused-value]
   14 | #define DE(...) 0
      |                 ^
walk.cpp:106:3: note: in expansion of macro 'DE'
  106 |   DE(x, d);
      |   ^~
walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:14:17: warning: statement has no effect [-Wunused-value]
   14 | #define DE(...) 0
      |                 ^
walk.cpp:129:2: note: in expansion of macro 'DE'
  129 |  DE(s, g);
      |  ^~
#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...