제출 #281665

#제출 시각아이디문제언어결과실행 시간메모리
281665VimmerSky Walking (IOI19_walk)C++14
컴파일 에러
0 ms0 KiB
#include "walk.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define F first #define S second #define sz(x) int(x.size()) #define pb push_back #define N 100001 using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef pair <int, int> ptr; typedef array <int, 3> a3; vector <vector <int> > g; vector <a3 > edge; vector <int> nums[N], who[N], db[N], del[N]; vector <ll> dst; gp_hash_table <int, int> idr[N]; void add(int a, int b, int cost) { g[a].pb(sz(edge)); g[b].pb(sz(edge)); edge.pb({a, b, cost}); } ll min_distance(vector<int> x, vector<int> h, vector<int> l, vector<int> r, vector<int> y, int s, int to) { if (s == to) return 0; int n = sz(x); int m = sz(l); set <pair <int, int> > st; st.clear(); for (int j = 0; j < m; j++) {db[l[j]].pb(j); del[r[j]].pb(j);} for (int i = 0; i < n; i++) { for (auto j : db[i]) st.insert({y[j], j}); auto it = st.upper_bound(ptr(h[i], 1e9)); if (it != st.begin()) { it--; while (1) { nums[i].pb((*it).S); if (it == st.begin()) break; it--; } } for (auto j : del[i]) st.erase({y[j], j}); } int id = 0; ll ans = 1e18; set <pair <ll, int> > str; set <pair <int, int> > se; se.clear(); for (int i = 0; i < n; i++) for (auto j : nums[i]) { if (i == to) se.insert({id, y[j]}); idr[i][j] = id++; g.emplace_back(); dst.pb(-1); for (auto jr : nums[i]) { if (jr == j) break; add(id - 1, idr[i][jr], abs(y[jr] - y[j]); } if (s == i) {dst[id - 1] = 0; str.insert({y[j], id - 1});} } for (int i = 0; i < n; i++) for (auto j : nums[i]) { for (auto I : who[j]) add(idr[i][j], idr[I][j], abs(x[i] - x[I]); who[j].pb(i); } while (sz(str)) { pair <ll, int> pt = *str.begin(); str.erase(str.begin()); if (pt.F >= ans) return ans; auto it = se.upper_bound(ptr(pt.S, 1e9 + 1e9)); if (it != se.begin()) { it--; if ((*it).F == pt.S) {ans = min(ans, pt.F + (*it).S); se.erase(it); if (sz(se) == 0) return ans;} } for (auto itr : g[pt.S]) { ll s = pt.F + itr.S; if (dst[itr.F] != -1 && dst[itr.F] <= s) continue; if (ans <= s) continue; dst[itr.F] = s; str.insert({s, itr.F}); } } if (ans == 1e18) return -1; return ans; }

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

walk.cpp: In function 'll min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:98:56: error: expected ')' before ';' token
   98 |               add(id - 1, idr[i][jr], abs(y[jr] - y[j]);
      |                  ~                                     ^
      |                                                        )
walk.cpp:108:57: error: expected ')' before ';' token
  108 |               add(idr[i][j], idr[I][j], abs(x[i] - x[I]);
      |                  ~                                      ^
      |                                                         )
walk.cpp:7:11: error: request for member 'second' in 'itr', which is of non-class type 'int'
    7 | #define S second
      |           ^~~~~~
walk.cpp:130:31: note: in expansion of macro 'S'
  130 |             ll s = pt.F + itr.S;
      |                               ^
walk.cpp:6:11: error: request for member 'first' in 'itr', which is of non-class type 'int'
    6 | #define F first
      |           ^~~~~
walk.cpp:132:25: note: in expansion of macro 'F'
  132 |             if (dst[itr.F] != -1 && dst[itr.F] <= s) continue;
      |                         ^
walk.cpp:6:11: error: request for member 'first' in 'itr', which is of non-class type 'int'
    6 | #define F first
      |           ^~~~~
walk.cpp:132:45: note: in expansion of macro 'F'
  132 |             if (dst[itr.F] != -1 && dst[itr.F] <= s) continue;
      |                                             ^
walk.cpp:6:11: error: request for member 'first' in 'itr', which is of non-class type 'int'
    6 | #define F first
      |           ^~~~~
walk.cpp:136:21: note: in expansion of macro 'F'
  136 |             dst[itr.F] = s;
      |                     ^
walk.cpp:6:11: error: request for member 'first' in 'itr', which is of non-class type 'int'
    6 | #define F first
      |           ^~~~~
walk.cpp:138:32: note: in expansion of macro 'F'
  138 |             str.insert({s, itr.F});
      |                                ^
walk.cpp:138:34: error: no matching function for call to 'std::set<std::pair<long long int, int> >::insert(<brace-enclosed initializer list>)'
  138 |             str.insert({s, itr.F});
      |                                  ^
In file included from /usr/include/c++/9/set:61,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:87,
                 from walk.cpp:2:
/usr/include/c++/9/bits/stl_set.h:509:7: note: candidate: 'std::pair<typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<_Key>::other>::const_iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(const value_type&) [with _Key = std::pair<long long int, int>; _Compare = std::less<std::pair<long long int, int> >; _Alloc = std::allocator<std::pair<long long int, int> >; typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<_Key>::other>::const_iterator = std::_Rb_tree_const_iterator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::value_type = std::pair<long long int, int>]'
  509 |       insert(const value_type& __x)
      |       ^~~~~~
/usr/include/c++/9/bits/stl_set.h:509:32: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const value_type&' {aka 'const std::pair<long long int, int>&'}
  509 |       insert(const value_type& __x)
      |              ~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/9/bits/stl_set.h:518:7: note: candidate: 'std::pair<typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<_Key>::other>::const_iterator, bool> std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::value_type&&) [with _Key = std::pair<long long int, int>; _Compare = std::less<std::pair<long long int, int> >; _Alloc = std::allocator<std::pair<long long int, int> >; typename std::_Rb_tree<_Key, _Key, std::_Identity<_Tp>, _Compare, typename __gnu_cxx::__alloc_traits<_Allocator>::rebind<_Key>::other>::const_iterator = std::_Rb_tree_const_iterator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::value_type = std::pair<long long int, int>]'
  518 |       insert(value_type&& __x)
      |       ^~~~~~
/usr/include/c++/9/bits/stl_set.h:518:27: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::set<std::pair<long long int, int> >::value_type&&' {aka 'std::pair<long long int, int>&&'}
  518 |       insert(value_type&& __x)
      |              ~~~~~~~~~~~~~^~~
/usr/include/c++/9/bits/stl_set.h:546:7: note: candidate: 'std::set<_Key, _Compare, _Alloc>::iterator std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::const_iterator, const value_type&) [with _Key = std::pair<long long int, int>; _Compare = std::less<std::pair<long long int, int> >; _Alloc = std::allocator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::value_type = std::pair<long long int, int>]'
  546 |       insert(const_iterator __position, const value_type& __x)
      |       ^~~~~~
/usr/include/c++/9/bits/stl_set.h:546:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/9/bits/stl_set.h:551:7: note: candidate: 'std::set<_Key, _Compare, _Alloc>::iterator std::set<_Key, _Compare, _Alloc>::insert(std::set<_Key, _Compare, _Alloc>::const_iterator, std::set<_Key, _Compare, _Alloc>::value_type&&) [with _Key = std::pair<long long int, int>; _Compare = std::less<std::pair<long long int, int> >; _Alloc = std::allocator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree_const_iterator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<long long int, int> >; std::set<_Key, _Compare, _Alloc>::value_type = std::pair<long long int, int>]'
  551 |       insert(const_iterator __position, value_type&& __x)
      |       ^~~~~~
/usr/include/c++/9/bits/stl_set.h:551:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/9/bits/stl_set.h:566:2: note: candidate: 'template<class _InputIterator> void std::set<_Key, _Compare, _Alloc>::insert(_InputIterator, _InputIterator) [with _InputIterator = _InputIterator; _Key = std::pair<long long int, int>; _Compare = std::less<std::pair<long long int, int> >; _Alloc = std::allocator<std::pair<long long int, int> >]'
  566 |  insert(_InputIterator __first, _InputIterator __last)
      |  ^~~~~~
/usr/include/c++/9/bits/stl_set.h:566:2: note:   template argument deduction/substitution failed:
walk.cpp:138:34: note:   candidate expects 2 arguments, 1 provided
  138 |             str.insert({s, itr.F});
      |                                  ^
In file included from /usr/include/c++/9/set:61,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:87,
                 from walk.cpp:2:
/usr/include/c++/9/bits/stl_set.h:578:7: note: candidate: 'void std::set<_Key, _Compare, _Alloc>::insert(std::initializer_list<_Tp>) [with _Key = std::pair<long long int, int>; _Compare = std::less<std::pair<long long int, int> >; _Alloc = std::allocator<std::pair<long long int, int> >]'
  578 |       insert(initializer_list<value_type> __l)
      |       ^~~~~~
/usr/include/c++/9/bits/stl_set.h:578:43: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::initializer_list<std::pair<long long int, int> >'
  578 |       insert(initializer_list<value_type> __l)
      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~