제출 #790255

#제출 시각아이디문제언어결과실행 시간메모리
790255Sohsoh84도시들 (IOI15_towns)C++17
컴파일 에러
0 ms0 KiB
#include "towns.h" #include <bits/stdc++.h> using namespace std; typedef pair<int, int> pll; #define all(x) (x).begin(), (x).end() #define X first #define Y second #define sep ' ' #define debug(x) cerr << #x << ": " << x << endl; const int MAXN = 300 + 10; int n, D0[MAXN], D1[MAXN], diam, diam_v, diam_u; inline int get(int u, int v) { return getDistance(u, v); } inline int mirror_on_0u(int v) { return (D1[v] - D0[v] + D0[diam_u]) / 2; } inline bool is_eq(int a, int b) { return min(get(a, b) + D0[diam_u] < min(D0[a] + D1[b], D0[b] + D1[a])); } inline bool find_maj(vector<int> vec) { if (vec.size() <= n / 2) return false; vector<pll> R; int maj_cnt = 0; int maj = -1; if (vec.size() % 2 == 1) { maj_cnt = 1; maj = vec.back(); vec.pop_back(); R.push_back({maj, 1}); } while (!vec.empty()) { int a = vec.back(); vec.pop_back(); int b = vec.back(); vec.pop_back(); if (is_eq(a, b)) { if (maj_cnt == 0) { maj = a; maj_cnt = 2; } else if (maj_cnt == 1) { maj = a; maj_cnt = 1; } else if (maj_cnt == 2) { maj = -1; maj_cnt = 0; } else { maj_cnt -= 2; } R.push_back({a, 2}); } else { R.push_back({a, 1}); R.push_back({b, 1}); } } if (maj >= 0) { int cnt = 0; for (auto [x, w] : R) if (x == maj || is_eq(maj, x)) cnt += w; return cnt > n / 2; } return false; } // TODO: n / 2 tof int hubDistance(int N_, int sub) { memset(D0, 0, sizeof D0); memset(D1, 0, sizeof D1); n = N_; for (int i = 1; i < n; i++) D0[i] = get(0, i); map<int, vector<int>> mp; diam_u = max_element(D0, D0 + n) - D0; D1[0] = D0[diam_u]; for (int i = 1; i < n; i++) { if (i == diam_u) continue; D1[i] = get(diam_u, i); } diam_v = max_element(D1, D1 + n) - D1; diam = D1[diam_v]; int v_mir = mirror_on_0u(diam_v), r = numeric_limits<int>::max(); vector<int> cent; for (int i = 0; i < n; i++) { if (mirror_on_0u(i) > v_mir) continue; int a = mirror_on_0u(i); int b = D1[diam_v] - mirror_on_0u(i); int tr = max(a, b); if (tr < r) { cent.clear(); cent.push_back(a); r = tr; } else if (tr == r) cent.push_back(a); mp[a].push_back(i); } r = -r; int ps = 0, ss = n; for (auto [x, vec] : mp) { ps -= vec.size(); if (find(all(cent), x) != vec.end()) if (!find_maj(vec)) r = abs(r); ss += vec.size(); } return r; }

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

towns.cpp: In function 'bool is_eq(int, int)':
towns.cpp:27:71: error: no matching function for call to 'min(bool)'
   27 |  return min(get(a, b) + D0[diam_u] < min(D0[a] + D1[b], D0[b] + D1[a]));
      |                                                                       ^
In file included 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 towns.cpp:2:
/usr/include/c++/10/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
towns.cpp:27:71: note:   candidate expects 2 arguments, 1 provided
   27 |  return min(get(a, b) + D0[diam_u] < min(D0[a] + D1[b], D0[b] + D1[a]));
      |                                                                       ^
In file included 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 towns.cpp:2:
/usr/include/c++/10/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
towns.cpp:27:71: note:   candidate expects 3 arguments, 1 provided
   27 |  return min(get(a, b) + D0[diam_u] < min(D0[a] + D1[b], D0[b] + D1[a]));
      |                                                                       ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from towns.cpp:2:
/usr/include/c++/10/bits/stl_algo.h:3468:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3468 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3468:5: note:   template argument deduction/substitution failed:
towns.cpp:27:71: note:   mismatched types 'std::initializer_list<_Tp>' and 'bool'
   27 |  return min(get(a, b) + D0[diam_u] < min(D0[a] + D1[b], D0[b] + D1[a]));
      |                                                                       ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from towns.cpp:2:
/usr/include/c++/10/bits/stl_algo.h:3474:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3474 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3474:5: note:   template argument deduction/substitution failed:
towns.cpp:27:71: note:   mismatched types 'std::initializer_list<_Tp>' and 'bool'
   27 |  return min(get(a, b) + D0[diam_u] < min(D0[a] + D1[b], D0[b] + D1[a]));
      |                                                                       ^
towns.cpp: In function 'bool find_maj(std::vector<int>)':
towns.cpp:31:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   31 |  if (vec.size() <= n / 2) return false;
      |      ~~~~~~~~~~~^~~~~~~~
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:99:35: warning: conversion from 'long int' to 'int' may change value [-Wconversion]
   99 |  diam_u = max_element(D0, D0 + n) - D0;
      |           ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
towns.cpp:106:35: warning: conversion from 'long int' to 'int' may change value [-Wconversion]
  106 |  diam_v = max_element(D1, D1 + n) - D1;
      |           ~~~~~~~~~~~~~~~~~~~~~~~~^~~~
towns.cpp:130:18: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  130 |   ps -= vec.size();
      |                  ^
towns.cpp:135:18: warning: conversion from 'std::vector<int>::size_type' {aka 'long unsigned int'} to 'int' may change value [-Wconversion]
  135 |   ss += vec.size();
      |                  ^
towns.cpp:89:29: warning: unused parameter 'sub' [-Wunused-parameter]
   89 | int hubDistance(int N_, int sub) {
      |                         ~~~~^~~