Submission #873580

# 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)
      |              ^~~~~~~~~~~