제출 #101709

#제출 시각아이디문제언어결과실행 시간메모리
101709coldEr66Detecting Molecules (IOI16_molecules)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#include "molecules.h"
#define SZ(a) (int)a.size()
#define ALL(a) a.begin(),a.end()
#define X first
#define Y second

std::vector<int> find_subset(int l, int u, std::vector<int> w) {
  vector<int> ret;
  vector<pair<int,int> > tmp;
  for (int i=0;i<SZ(w);i++) tmp.emplace_back(w[i],i);
  sort(ALL(tmp));

  long long sum = 0;
  int L = 0, R = 0;
  for (;L<SZ(w);L++) {
    while (sum < l && R < SZ(w)) sum += tmp[R++].X;
    if (l <= sum && sum <= u) {
      for (int i=L;i<=R;i++) ret.emplace(tmp[i].Y);
      break;
    }
    if (L < R) sum -= tmp[L].X;
  }
  return ret;
}

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

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:20:50: error: no matching function for call to 'std::vector<int>::emplace(int&)'
       for (int i=L;i<=R;i++) ret.emplace(tmp[i].Y);
                                                  ^
In file included from /usr/include/c++/7/vector:64:0,
                 from /usr/include/c++/7/queue:61,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:86,
                 from molecules.cpp:1:
/usr/include/c++/7/bits/stl_vector.h:997:2: note: candidate: template<class ... _Args> std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::emplace(std::vector<_Tp, _Alloc>::const_iterator, _Args&& ...) [with _Args = {_Args ...}; _Tp = int; _Alloc = std::allocator<int>]
  emplace(const_iterator __position, _Args&&... __args)
  ^~~~~~~
/usr/include/c++/7/bits/stl_vector.h:997:2: note:   template argument deduction/substitution failed:
molecules.cpp:7:11: note:   cannot convert 'tmp.std::vector<std::pair<int, int> >::operator[](((std::vector<std::pair<int, int> >::size_type)i)).std::pair<int, int>::second' (type 'int') to type 'std::vector<int>::const_iterator {aka __gnu_cxx::__normal_iterator<const int*, std::vector<int> >}'
 #define Y second
molecules.cpp:20:49: note: in expansion of macro 'Y'
       for (int i=L;i<=R;i++) ret.emplace(tmp[i].Y);
                                                 ^