QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#371236#8505. Almost Aligneducup-team3215Compile Error//C++201.7kb2024-03-30 02:54:222024-03-30 02:54:40

Judging History

你现在查看的是最新测评结果

  • [2024-03-30 02:54:40]
  • 评测
  • [2024-03-30 02:54:22]
  • 提交

answer

#include <algorithm>
#include <array>
#include <cmath>
#include <cstdint>
#include <iostream>
#include <vector>

using namespace std;

using point = array<int, 2>;

int64_t operator^(point a, point b) { return a[0] * (int64_t)b[1] - a[1] * (int64_t)b[0]; }
int64_t operator&(point a, point b) { return a[0] * (int64_t)b[0] + a[1] * (int64_t)b[1]; }
point operator-(point a) { return {-a[0], -a[1]}; }
point operator-(point a, point b) { return {a[0] - b[0], a[1] - b[1]}; }

vector<point> env(const vector<point>& v) {
  vector<point> e;
  for (auto& p: v) {
    while (e.size() > 1 && (e.back() - e.end()[-2] ^ p - e.back()) >= 0) e.pop_back();
    e.push_back(p);
  }
  return e;
}

int main() {
  cin.tie(0)->sync_with_stdio(0);
  int n; cin >> n;
  vector<point> v[2];
  v[0].resize(n), v[1].resize(n);
  for (int i = 0; i < n; ++i) cin >> v[0][i][1] >> v[1][i][1] >> v[0][i][0] >> v[1][i][0];
  vector<point> e[4];
  for (int c: {0, 1}) {
    sort(v[c].begin(), v[c].end());
    e[c * 2] = env(v[c]);
    for (auto& p: v[c]) p = -p;
    reverse(v[c].begin(), v[c].end());
    e[c * 2 + 1] = env(v[c]);
  }
  auto ans = 0. / 0;
  int i[4]{};
  while (1) {
    int w = -1;
    for (int j = 0; j < 4; ++j) if (i[j] + 1 < e[j].size() && (!~w || (e[j][i[j] + 1] - e[j][i[j]] ^ e[w][i[w] + 1] - e[w][i[w]]) < 0)) w = j;
    auto a = e[0][i[0]] - -e[1][i[1]], b = e[2][i[2]] - -e[3][i[3]];
    long double t;
    if (~w) { auto d = e[w][i[w] + 1] - e[w][i[w]]; ++i[w]; t = -d[1] * 1. / d[0]; }
    if ((!~w || t > 0) && isnan(ans)) ans = a[1] * 1. * b[1];
    if (!~w) break;
    if (t > 0) ans = min(ans, (a[0] * t + a[1]) * (b[0] * t + b[1]));
  }
  cout.precision(14);
  cout << fixed << ans;
}

Details

answer.code: In function ‘int main()’:
answer.code:40:17: warning: division by zero [-Wdiv-by-zero]
   40 |   auto ans = 0. / 0;
      |              ~~~^~~
answer.code:50:25: error: no matching function for call to ‘min(double&, long double)’
   50 |     if (t > 0) ans = min(ans, (a[0] * t + a[1]) * (b[0] * t + b[1]));
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:60,
                 from answer.code:1:
/usr/include/c++/13/bits/stl_algobase.h:233:5: note: candidate: ‘template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)’
  233 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/13/bits/stl_algobase.h:233:5: note:   template argument deduction/substitution failed:
answer.code:50:25: note:   deduced conflicting types for parameter ‘const _Tp’ (‘double’ and ‘long double’)
   50 |     if (t > 0) ans = min(ans, (a[0] * t + a[1]) * (b[0] * t + b[1]));
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/13/bits/stl_algobase.h:281:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)’
  281 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/13/bits/stl_algobase.h:281:5: note:   template argument deduction/substitution failed:
answer.code:50:25: note:   deduced conflicting types for parameter ‘const _Tp’ (‘double’ and ‘long double’)
   50 |     if (t > 0) ans = min(ans, (a[0] * t + a[1]) * (b[0] * t + b[1]));
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:61:
/usr/include/c++/13/bits/stl_algo.h:5775:5: note: candidate: ‘template<class _Tp> constexpr _Tp std::min(initializer_list<_Tp>)’
 5775 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/13/bits/stl_algo.h:5775:5: note:   template argument deduction/substitution failed:
answer.code:50:25: note:   mismatched types ‘std::initializer_list<_Tp>’ and ‘double’
   50 |     if (t > 0) ans = min(ans, (a[0] * t + a[1]) * (b[0] * t + b[1]));
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/13/bits/stl_algo.h:5785:5: note: candidate: ‘template<class _Tp, class _Compare> constexpr _Tp std::min(initializer_list<_Tp>, _Compare)’
 5785 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/13/bits/stl_algo.h:5785:5: note:   template argument deduction/substitution failed:
answer.code:50:25: note:   mismatched types ‘std::initializer_list<_Tp>’ and ‘double’
   50 |     if (t > 0) ans = min(ans, (a[0] * t + a[1]) * (b[0] * t + b[1]));
      |                      ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~