제출 #413607

#제출 시각아이디문제언어결과실행 시간메모리
413607KoD웜뱃 (IOI13_wombats)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #include "wombats.h" template <class T> using Vec = std::vector<T>; int Type, Vsum; Vec<Vec<int>> vert, side; Vec<std::array<std::array<int, 2>, 2>> pos; struct SemiGroup { std::array<std::array<int, 2>, 2> dist; int right; SemiGroup operator + (const SemiGroup& other) const { std::array<std::array<int, 2>, 2> ret; for (auto& v: ret) { v.fill(1000000000); } for (int i = 0; i < 2; ++i) { for (int k = 0; k < 2; ++k) { for (int j = 0; j < 2; ++j) { ret[i][j] = std::min(ret[i][j], dist[i][k] + vert[right][k] + other.dist[k][j]); } } } return SemiGroup { std::move(ret), other.right }; } }; struct Monoid = std::optional<SemiGroup>; constexpr Monoid zero() { return std::nullopt; } Monoid operator + (const Monoid& l, const Monoid& r) { if (!l) return r; if (!r) return l; return *l + *r; } int ceil_log2(const int x) { int e = 0; while ((1 << e) < x) e += 1; return e; } struct Segtree { Vec<Monoid> data; Segtree() = default; Segtree(const int n): data(1 << (ceil_log2(n) + 1), zero()) {} void assign(int i, const Monoid& m) { i += data.size() / 2; data[i] = m; while (i > 1) { i >>= 1; data[i] = data[2 * i] + data[2 * i + 1]; } } Monoid fold() { return data[1]; } } seg; void init(int R, int C, int H[5000][200], int V[5000][200]) { vert = Vec<Vec<int>>(R - 1, Vec<int>(C)); for (int i = 0; i < R - 1; ++i) { for (int j = 0; j < C; ++j) { vert[i][j] = V[i][j]; } } side = Vec<Vec<int>>(R, Vec<int>(C - 1)); for (int i = 0; i < R; ++i) { for (int j = 0; j < C - 1; ++j) { side[i][j] = H[i][j]; } } if (C == 1) { Type = 1; for (int i = 0; i < R - 1; ++i) { Vsum += vert[i][0]; } } else if (C == 2) { Type = 2; seg = Segtree(R); pos.resize(R); for (int i = 0; i < R; ++i) { pos[i][0][0] = pos[i][1][1] = 0; pos[i][0][1] = pos[i][1][0] = side[i][0]; seg.assign(i, SemiGroup{pos[i], i}); } } else { Type = 3; } } void changeH(int P, int Q, int W) { if (Type == 2) { const int i = P; side[i][0] = W; pos[i][0][0] = pos[i][1][1] = 0; pos[i][0][1] = pos[i][1][0] = side[i][0]; seg.assign(i, SemiGroup{pos[i], i}); } else { } } void changeV(int P, int Q, int W) { if (Type == 1) { Vsum -= vert[P][Q]; Vsum += W; vert[P][Q] = W; } else if (Type == 2) { seg.assign(i, SemiGroup{pos[i], i}); } else { } } int escape(int V1, int V2) { if (Type == 1) { return Vsum; } else if (Type == 2) { } else { } }

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

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   15 |  int res;
      |      ^~~
wombats.cpp:30:15: error: expected unqualified-id before '=' token
   30 | struct Monoid = std::optional<SemiGroup>;
      |               ^
wombats.cpp:31:23: error: return type 'struct Monoid' is incomplete
   31 | constexpr Monoid zero() { return std::nullopt; }
      |                       ^
wombats.cpp:32:52: error: return type 'struct Monoid' is incomplete
   32 | Monoid operator + (const Monoid& l, const Monoid& r) {
      |                                                    ^
wombats.cpp: In function 'void operator+(const Monoid&, const Monoid&)':
wombats.cpp:33:9: error: no match for 'operator!' (operand type is 'const Monoid')
   33 |     if (!l) return r;
      |         ^~
wombats.cpp:33:9: note: candidate: 'operator!(bool)' (built-in)
wombats.cpp:33:9: note:   no known conversion for argument 1 from 'const Monoid' to 'bool'
wombats.cpp:34:9: error: no match for 'operator!' (operand type is 'const Monoid')
   34 |     if (!r) return l;
      |         ^~
wombats.cpp:34:9: note: candidate: 'operator!(bool)' (built-in)
wombats.cpp:34:9: note:   no known conversion for argument 1 from 'const Monoid' to 'bool'
wombats.cpp:35:12: error: no match for 'operator*' (operand type is 'const Monoid')
   35 |     return *l + *r;
      |            ^~
wombats.cpp:35:17: error: no match for 'operator*' (operand type is 'const Monoid')
   35 |     return *l + *r;
      |                 ^~
wombats.cpp: In constructor 'Segtree::Segtree(int)':
wombats.cpp:47:61: error: invalid use of void expression
   47 |     Segtree(const int n): data(1 << (ceil_log2(n) + 1), zero()) {}
      |                                                         ~~~~^~
wombats.cpp: In member function 'void Segtree::assign(int, const Monoid&)':
wombats.cpp:50:19: error: invalid use of incomplete type '__gnu_cxx::__alloc_traits<std::allocator<Monoid>, Monoid>::value_type' {aka 'struct Monoid'}
   50 |         data[i] = m;
      |                   ^
wombats.cpp:30:8: note: forward declaration of '__gnu_cxx::__alloc_traits<std::allocator<Monoid>, Monoid>::value_type' {aka 'struct Monoid'}
   30 | struct Monoid = std::optional<SemiGroup>;
      |        ^~~~~~
wombats.cpp:53:51: error: invalid use of incomplete type '__gnu_cxx::__alloc_traits<std::allocator<Monoid>, Monoid>::value_type' {aka 'struct Monoid'}
   53 |             data[i] = data[2 * i] + data[2 * i + 1];
      |                                                   ^
wombats.cpp:30:8: note: forward declaration of '__gnu_cxx::__alloc_traits<std::allocator<Monoid>, Monoid>::value_type' {aka 'struct Monoid'}
   30 | struct Monoid = std::optional<SemiGroup>;
      |        ^~~~~~
wombats.cpp: At global scope:
wombats.cpp:56:19: error: return type 'struct Monoid' is incomplete
   56 |     Monoid fold() { return data[1]; }
      |                   ^
wombats.cpp: In function 'void init(int, int, int (*)[200], int (*)[200])':
wombats.cpp:85:27: error: cannot convert 'SemiGroup' to 'const Monoid&'
   85 |             seg.assign(i, SemiGroup{pos[i], i});
      |                           ^~~~~~~~~~~~~~~~~~~~
      |                           |
      |                           SemiGroup
wombats.cpp:48:38: note:   initializing argument 2 of 'void Segtree::assign(int, const Monoid&)'
   48 |     void assign(int i, const Monoid& m) {
      |                        ~~~~~~~~~~~~~~^
wombats.cpp: In function 'void changeH(int, int, int)':
wombats.cpp:99:23: error: cannot convert 'SemiGroup' to 'const Monoid&'
   99 |         seg.assign(i, SemiGroup{pos[i], i});
      |                       ^~~~~~~~~~~~~~~~~~~~
      |                       |
      |                       SemiGroup
wombats.cpp:48:38: note:   initializing argument 2 of 'void Segtree::assign(int, const Monoid&)'
   48 |     void assign(int i, const Monoid& m) {
      |                        ~~~~~~~~~~~~~~^
wombats.cpp: In function 'void changeV(int, int, int)':
wombats.cpp:113:20: error: 'i' was not declared in this scope
  113 |         seg.assign(i, SemiGroup{pos[i], i});
      |                    ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from wombats.cpp:1:
/usr/include/c++/10/bits/stl_vector.h: In instantiation of 'std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = Monoid; _Alloc = std::allocator<Monoid>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]':
wombats.cpp:49:24:   required from here
/usr/include/c++/10/bits/stl_vector.h:919:50: error: invalid use of incomplete type 'struct Monoid'
  919 |       { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
      |                          ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
wombats.cpp:30:8: note: forward declaration of 'struct Monoid'
   30 | struct Monoid = std::optional<SemiGroup>;
      |        ^~~~~~
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from wombats.cpp:1:
/usr/include/c++/10/bits/stl_vector.h: In instantiation of 'std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](std::vector<_Tp, _Alloc>::size_type) [with _Tp = Monoid; _Alloc = std::allocator<Monoid>; std::vector<_Tp, _Alloc>::reference = Monoid&; std::vector<_Tp, _Alloc>::size_type = long unsigned int]':
wombats.cpp:50:15:   required from here
/usr/include/c++/10/bits/stl_vector.h:1046:34: error: invalid use of incomplete type 'struct Monoid'
 1046 |  return *(this->_M_impl._M_start + __n);
      |          ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
wombats.cpp:30:8: note: forward declaration of 'struct Monoid'
   30 | struct Monoid = std::optional<SemiGroup>;
      |        ^~~~~~
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/c++/10/functional:62,
                 from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
                 from /usr/include/c++/10/algorithm:74,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from wombats.cpp:1:
/usr/include/c++/10/bits/stl_vector.h: In instantiation of 'std::_Vector_base<_Tp, _Alloc>::~_Vector_base() [with _Tp = Monoid; _Alloc = std::allocator<Monoid>]':
/usr/include/c++/10/bits/stl_vector.h:487:7:   required from here
/usr/include/c++/10/bits/stl_vector.h:336:35: error: invalid use of incomplete type 'struct Monoid'
  336 |         _M_impl._M_end_of_storage - _M_impl._M_start);
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
wombats.cpp:30:8: note: forward declaration of 'struct Monoid'
   30 | struct Monoid = std::optional<SemiGroup>;
      |        ^~~~~~
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/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from wombats.cpp:1:
/usr/include/c++/10/type_traits: In instantiation of 'struct std::is_destructible<Monoid>':
/usr/include/c++/10/bits/stl_construct.h:177:51:   required from 'void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = Monoid*]'
/usr/include/c++/10/bits/alloc_traits.h:738:15:   required from 'void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator<_T2>&) [with _ForwardIterator = Monoid*; _Tp = Monoid]'
/usr/include/c++/10/bits/stl_vector.h:680:15:   required from 'std::vector<_Tp, _Alloc>::~vector() [with _Tp = Monoid; _Alloc = std::allocator<Monoid>]'
wombats.cpp:47:63:   required from here
/usr/include/c++/10/type_traits:844:52: error: static assertion failed: template argument must be a complete class or an unbounded array
  844 |       static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/10/bits/alloc_traits.h:33,
                 from /usr/include/c++/10/ext/alloc_traits.h:34,
                 from /usr/include/c++/10/bits/basic_string.h:40,
                 from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from wombats.cpp:1:
/usr/include/c++/10/bits/stl_construct.h: In instantiation of 'void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = Monoid*]':
/usr/include/c++/10/bits/alloc_traits.h:738:15:   required from 'void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator<_T2>&) [with _ForwardIterator = Monoid*; _Tp = Monoid]'
/usr/include/c++/10/bits/stl_vector.h:680:15:   required from 'std::vector<_Tp, _Alloc>::~vector() [with _Tp = Monoid; _Alloc = std::allocator<Monoid>]'
wombats.cpp:47:63:   required from here
/usr/include/c++/10/bits/stl_construct.h:177:51: error: static assertion failed: value type is destructible
  177 |       static_assert(is_destructible<_Value_type>::value,
      |                                                   ^~~~~
/usr/include/c++/10/bits/stl_construct.h:184:25: error: invalid use of incomplete type 'std::iterator_traits<Monoid*>::value_type' {aka 'struct Monoid'}
  184 |       std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wombats.cpp:30:8: note: forward declaration of 'std::iterator_traits<Monoid*>::value_type' {aka 'struct Monoid'}
   30 | struct Monoid = std::optional<SemiGroup>;
      |        ^~~~~~
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/string:41,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from wombats.cpp:1:
/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 = Monoid; __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<_CharT> >::deallocate(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, std::allocator_traits<std::allocator<_CharT> >::pointer, std::allocator_traits<std::allocator<_CharT> >::size_type) [with _Tp = Monoid; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<Monoid>; std::allocator_traits<std::allocator<_CharT> >::pointer = Monoid*; std::allocator_traits<std::allocator<_CharT> >::size_type = long unsigned int]'
/usr/include/c++/10/bits/stl_vector.h:354:19:   required from 'void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(std::_Vector_base<_Tp, _Alloc>::pointer, std::size_t) [with _Tp = Monoid; _Alloc = std::allocator<Monoid>; std::_Vector_base<_Tp, _Alloc>::pointer = Monoid*; std::size_t = long unsigned int]'
/usr/include/c++/10/bits/stl_vector.h:335:2:   required from 'std::_Vector_base<_Tp, _Alloc>::~_Vector_base() [with _Tp = Monoid; _Alloc = std::allocator<Monoid>]'
/usr/include/c++/10/bits/stl_vector.h:487:7:   required from here
/usr/include/c++/10/ext/new_allocator.h:123:6: error: invalid application of '__alignof__' to incomplete type 'Monoid'
  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 'Monoid'
  127 |          __t * sizeof(_Tp),
      |                ^~~~~~~~~~~
/usr/include/c++/10/ext/new_allocator.h:129:27: error: invalid application of '__alignof__' to incomplete type 'Monoid'
  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 'Monoid'
  135 |      , __t * sizeof(_Tp)
      |              ^~~~~~~~~~~
wombats.cpp: In function 'int escape(int, int)':
wombats.cpp:124:19: warning: control reaches end of non-void function [-Wreturn-type]
  124 |     else if (Type == 2) {
      |              ~~~~~^~~~