# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
873580 | 2023-11-15T10:22:07 Z | sleepntsheep | Cop and Robber (BOI14_coprobber) | C++17 | Compilation error |
0 ms | 0 KB |
#include "coprobber.h" #include <array> #include <queue> #include <string.h> int N, G[MAX_N][MAX_N][2], C[MAX_N][MAX_N][2], deg[MAX_N], at; bool (*A)[MAX_N]; int start(int N, bool A[MAX_N][MAX_N]) { ::N = N, ::A = A; memset(G, -1, sizeof G); std::queue<std::tuple<int, int, int, int>> q; for (int i = 0; i < N; ++i) G[i][i][0] = G[i][i][1] = 0, q.emplace(i, i, 0, 0), q.emplace(i, i, 1, 0); for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) deg[i] += A[i][j]; for (; q.size(); ) { auto [u, v, t, g] = q.front(); q.pop(); if (t) /* robber, was cop */ { for (auto k = 0; k < N; ++k) { if (!A[u][k]) continue; if (!g && G[k][v][0] == -1) { q.emplace(k, v, 0, G[k][v][!t] = 0); } else { } } } else /* was robber */ { for (auto k = 0; k < N; ++k) { if (!A[v][k]) continue; if (!g) { if (++C[u][k][0] == deg[k]) { q.emplace(u, k, !t, G[u][k][!t] = 0); } } else if (G[u][k][!t] == -1) { q.emplace(u, k, !t, G[u][k][!t] = 1); } } } } for (int i = 0; i < N; ++i) { int losing = 0; for (int j = 0; j < N; ++j) losing += !!G[i][j][0]; if (!losing) return at = i; } return -1; } int nextMove(int R) { if (!G[at][R][1]) return at; for (int j = 0; j < N; ++j) if (A[at][j] && !G[j][R][1]) return j; return -1; }
Compilation message
coprobber.cpp: In function 'int start(int, bool (*)[500])': coprobber.cpp:19:14: error: 'std::tuple<int, int, int, int> <structured bindings>' has incomplete type 19 | auto [u, v, t, g] = q.front(); | ^~~~~~~~~~~~ In file included from /usr/include/c++/10/deque:69, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/deque.tcc: In instantiation of 'std::deque<_Tp, _Alloc>::reference std::deque<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {int&, int&, int, int}; _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::deque<_Tp, _Alloc>::reference = std::tuple<int, int, int, int>&]': /usr/include/c++/10/bits/stl_queue.h:277:25: required from 'decltype(auto) std::queue<_Tp, _Sequence>::emplace(_Args&& ...) [with _Args = {int&, int&, int, int}; _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >]' coprobber.cpp:14:82: required from here /usr/include/c++/10/bits/deque.tcc:168:41: error: invalid use of incomplete type 'class std::tuple<int, int, int, int>' 168 | != this->_M_impl._M_finish._M_last - 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ In file included from /usr/include/c++/10/bits/move.h:57, from /usr/include/c++/10/bits/stl_pair.h:59, from /usr/include/c++/10/utility:70, from /usr/include/c++/10/array:38, from coprobber.cpp:2: /usr/include/c++/10/type_traits:2631:11: note: declaration of 'class std::tuple<int, int, int, int>' 2631 | class tuple; | ^~~~~ In file included from /usr/include/c++/10/deque:69, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/deque.tcc:173:32: error: cannot increment a pointer to incomplete type 'std::tuple<int, int, int, int>' 173 | ++this->_M_impl._M_finish._M_cur; | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~ In file included from /usr/include/c++/10/deque:67, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/stl_deque.h: In instantiation of 'void std::deque<_Tp, _Alloc>::_M_destroy_data(std::deque<_Tp, _Alloc>::iterator, std::deque<_Tp, _Alloc>::iterator, const std::allocator<_Tp1>&) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::deque<_Tp, _Alloc>::iterator = std::_Deque_base<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >::iterator]': /usr/include/c++/10/bits/stl_deque.h:1004:24: required from 'std::deque<_Tp, _Alloc>::~deque() [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >]' /usr/include/c++/10/bits/stl_queue.h:96:11: required from here /usr/include/c++/10/bits/stl_deque.h:2045:7: error: invalid use of incomplete type 'std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >::value_type' {aka 'class std::tuple<int, int, int, int>'} 2045 | if (!__has_trivial_destructor(value_type)) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/10/bits/move.h:57, from /usr/include/c++/10/bits/stl_pair.h:59, from /usr/include/c++/10/utility:70, from /usr/include/c++/10/array:38, from coprobber.cpp:2: /usr/include/c++/10/type_traits:2631:11: note: declaration of 'std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >::value_type' {aka 'class std::tuple<int, int, int, int>'} 2631 | class tuple; | ^~~~~ In file included from /usr/include/c++/10/deque:67, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/stl_deque.h: In instantiation of 'void std::deque<_Tp, _Alloc>::pop_front() [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >]': /usr/include/c++/10/bits/stl_queue.h:301:13: required from 'void std::queue<_Tp, _Sequence>::pop() [with _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >]' coprobber.cpp:20:15: required from here /usr/include/c++/10/bits/stl_deque.h:1533:40: error: invalid use of incomplete type 'class std::tuple<int, int, int, int>' 1533 | != this->_M_impl._M_start._M_last - 1) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ In file included from /usr/include/c++/10/bits/move.h:57, from /usr/include/c++/10/bits/stl_pair.h:59, from /usr/include/c++/10/utility:70, from /usr/include/c++/10/array:38, from coprobber.cpp:2: /usr/include/c++/10/type_traits:2631:11: note: declaration of 'class std::tuple<int, int, int, int>' 2631 | class tuple; | ^~~~~ In file included from /usr/include/c++/10/deque:67, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/stl_deque.h:1537:31: error: cannot increment a pointer to incomplete type 'std::tuple<int, int, int, int>' 1537 | ++this->_M_impl._M_start._M_cur; | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~ /usr/include/c++/10/bits/stl_deque.h: In instantiation of 'void std::_Deque_base<_Tp, _Alloc>::_M_initialize_map(std::size_t) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::size_t = long unsigned int]': /usr/include/c++/10/bits/stl_deque.h:436:9: required from 'std::_Deque_base<_Tp, _Alloc>::_Deque_base() [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >]' /usr/include/c++/10/bits/stl_deque.h:831:7: required from 'std::queue<_Tp, _Sequence>::queue() [with _Seq = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >; _Requires = void; _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >]' coprobber.cpp:13:48: required from here /usr/include/c++/10/bits/stl_deque.h:617:69: error: invalid application of 'sizeof' to incomplete type 'std::tuple<int, int, int, int>' 617 | const size_t __num_nodes = (__num_elements / __deque_buf_size(sizeof(_Tp)) | ^~~~~~~~~~~ /usr/include/c++/10/bits/stl_deque.h:648:25: error: invalid application of 'sizeof' to incomplete type 'std::tuple<int, int, int, int>' 648 | % __deque_buf_size(sizeof(_Tp))); | ^~~~~~~~~~~ /usr/include/c++/10/bits/stl_deque.h: In instantiation of 'std::_Deque_iterator<std::tuple<int, int, int, int>, std::tuple<int, int, int, int>&, std::tuple<int, int, int, int>*>::difference_type std::operator-(const _Self&, const _Self&)': /usr/include/c++/10/bits/stl_deque.h:1231:40: required from 'std::deque<_Tp, _Alloc>::size_type std::deque<_Tp, _Alloc>::size() const [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::deque<_Tp, _Alloc>::size_type = long unsigned int]' /usr/include/c++/10/bits/stl_queue.h:209:22: required from 'std::queue<_Tp, _Sequence>::size_type std::queue<_Tp, _Sequence>::size() const [with _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >; std::queue<_Tp, _Sequence>::size_type = long unsigned int]' coprobber.cpp:17:19: required from here /usr/include/c++/10/bits/stl_deque.h:356:52: error: invalid use of incomplete type 'class std::tuple<int, int, int, int>' 356 | * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first) | ~~~~~~~~~~~~^~~~~~~~~~~~~~~ In file included from /usr/include/c++/10/bits/move.h:57, from /usr/include/c++/10/bits/stl_pair.h:59, from /usr/include/c++/10/utility:70, from /usr/include/c++/10/array:38, from coprobber.cpp:2: /usr/include/c++/10/type_traits:2631:11: note: declaration of 'class std::tuple<int, int, int, int>' 2631 | class tuple; | ^~~~~ In file included from /usr/include/c++/10/deque:67, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/stl_deque.h:357:19: error: invalid use of incomplete type 'class std::tuple<int, int, int, int>' 357 | + (__y._M_last - __y._M_cur); | ~~~~~~~~~~~~~^~~~~~~~~~~~~ In file included from /usr/include/c++/10/bits/move.h:57, from /usr/include/c++/10/bits/stl_pair.h:59, from /usr/include/c++/10/utility:70, from /usr/include/c++/10/array:38, from coprobber.cpp:2: /usr/include/c++/10/type_traits:2631:11: note: declaration of 'class std::tuple<int, int, int, int>' 2631 | class tuple; | ^~~~~ In file included from /usr/include/c++/10/deque:67, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/bits/stl_deque.h: In instantiation of 'void std::_Deque_base<_Tp, _Alloc>::_M_deallocate_node(std::_Deque_base<_Tp, _Alloc>::_Ptr) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::_Deque_base<_Tp, _Alloc>::_Ptr = std::tuple<int, int, int, int>*]': /usr/include/c++/10/bits/stl_deque.h:676:2: required from 'void std::_Deque_base<_Tp, _Alloc>::_M_destroy_nodes(std::_Deque_base<_Tp, _Alloc>::_Map_pointer, std::_Deque_base<_Tp, _Alloc>::_Map_pointer) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::_Deque_base<_Tp, _Alloc>::_Map_pointer = std::tuple<int, int, int, int>**]' /usr/include/c++/10/bits/stl_deque.h:598:4: required from 'std::_Deque_base<_Tp, _Alloc>::~_Deque_base() [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >]' /usr/include/c++/10/bits/stl_deque.h:831:7: required from 'std::queue<_Tp, _Sequence>::queue() [with _Seq = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >; _Requires = void; _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >]' coprobber.cpp:13:48: required from here /usr/include/c++/10/bits/stl_deque.h:566:53: error: invalid application of 'sizeof' to incomplete type 'std::tuple<int, int, int, int>' 566 | _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp))); | ^~~~~~~~~~~ /usr/include/c++/10/bits/stl_deque.h: In instantiation of 'static std::size_t std::_Deque_iterator<_Tp, _Ref, _Ptr>::_S_buffer_size() [with _Tp = std::tuple<int, int, int, int>; _Ref = std::tuple<int, int, int, int>&; _Ptr = std::tuple<int, int, int, int>*; std::size_t = long unsigned int]': /usr/include/c++/10/bits/stl_deque.h:355:39: required from 'std::_Deque_iterator<std::tuple<int, int, int, int>, std::tuple<int, int, int, int>&, std::tuple<int, int, int, int>*>::difference_type std::operator-(const _Self&, const _Self&)' /usr/include/c++/10/bits/stl_deque.h:1231:40: required from 'std::deque<_Tp, _Alloc>::size_type std::deque<_Tp, _Alloc>::size() const [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::deque<_Tp, _Alloc>::size_type = long unsigned int]' /usr/include/c++/10/bits/stl_queue.h:209:22: required from 'std::queue<_Tp, _Sequence>::size_type std::queue<_Tp, _Sequence>::size() const [with _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >; std::queue<_Tp, _Sequence>::size_type = long unsigned int]' coprobber.cpp:17:19: required from here /usr/include/c++/10/bits/stl_deque.h:132:33: error: invalid application of 'sizeof' to incomplete type 'std::tuple<int, int, int, int>' 132 | { return __deque_buf_size(sizeof(_Tp)); } | ^~~~~~~~~~~ In file included from /usr/include/x86_64-linux-gnu/c++/10/bits/c++allocator.h:33, from /usr/include/c++/10/bits/allocator.h:46, from /usr/include/c++/10/deque:64, from /usr/include/c++/10/queue:60, from coprobber.cpp:3: /usr/include/c++/10/ext/new_allocator.h: In instantiation of 'void __gnu_cxx::new_allocator<_Tp>::deallocate(_Tp*, __gnu_cxx::new_allocator<_Tp>::size_type) [with _Tp = std::tuple<int, int, int, int>; __gnu_cxx::new_allocator<_Tp>::size_type = long unsigned int]': /usr/include/c++/10/bits/alloc_traits.h:492:23: required from 'static void std::allocator_traits<std::allocator<_Tp1> >::deallocate(std::allocator_traits<std::allocator<_Tp1> >::allocator_type&, std::allocator_traits<std::allocator<_Tp1> >::pointer, std::allocator_traits<std::allocator<_Tp1> >::size_type) [with _Tp = std::tuple<int, int, int, int>; std::allocator_traits<std::allocator<_Tp1> >::allocator_type = std::allocator<std::tuple<int, int, int, int> >; std::allocator_traits<std::allocator<_Tp1> >::pointer = std::tuple<int, int, int, int>*; std::allocator_traits<std::allocator<_Tp1> >::size_type = long unsigned int]' /usr/include/c++/10/bits/stl_deque.h:566:21: required from 'void std::_Deque_base<_Tp, _Alloc>::_M_deallocate_node(std::_Deque_base<_Tp, _Alloc>::_Ptr) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::_Deque_base<_Tp, _Alloc>::_Ptr = std::tuple<int, int, int, int>*]' /usr/include/c++/10/bits/stl_deque.h:676:2: required from 'void std::_Deque_base<_Tp, _Alloc>::_M_destroy_nodes(std::_Deque_base<_Tp, _Alloc>::_Map_pointer, std::_Deque_base<_Tp, _Alloc>::_Map_pointer) [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >; std::_Deque_base<_Tp, _Alloc>::_Map_pointer = std::tuple<int, int, int, int>**]' /usr/include/c++/10/bits/stl_deque.h:598:4: required from 'std::_Deque_base<_Tp, _Alloc>::~_Deque_base() [with _Tp = std::tuple<int, int, int, int>; _Alloc = std::allocator<std::tuple<int, int, int, int> >]' /usr/include/c++/10/bits/stl_deque.h:831:7: required from 'std::queue<_Tp, _Sequence>::queue() [with _Seq = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >; _Requires = void; _Tp = std::tuple<int, int, int, int>; _Sequence = std::deque<std::tuple<int, int, int, int>, std::allocator<std::tuple<int, int, int, int> > >]' coprobber.cpp:13:48: required from here /usr/include/c++/10/ext/new_allocator.h:123:6: error: invalid application of '__alignof__' to incomplete type 'std::tuple<int, int, int, int>' 123 | if (alignof(_Tp) > __STDCPP_DEFAULT_NEW_ALIGNMENT__) | ^~~~~~~~~~~~ /usr/include/c++/10/ext/new_allocator.h:127:16: error: invalid application of 'sizeof' to incomplete type 'std::tuple<int, int, int, int>' 127 | __t * sizeof(_Tp), | ^~~~~~~~~~~ /usr/include/c++/10/ext/new_allocator.h:129:27: error: invalid application of '__alignof__' to incomplete type 'std::tuple<int, int, int, int>' 129 | std::align_val_t(alignof(_Tp))); | ^~~~~~~~~~~~ /usr/include/c++/10/ext/new_allocator.h:135:14: error: invalid application of 'sizeof' to incomplete type 'std::tuple<int, int, int, int>' 135 | , __t * sizeof(_Tp) | ^~~~~~~~~~~