제출 #863739

#제출 시각아이디문제언어결과실행 시간메모리
863739TAhmed33A Difficult(y) Choice (BOI21_books)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include <books.h>
using namespace std;
typedef long long ll;
bool check (ll sum, ll a) {
	return sum >= a && sum <= 2 * a;
}
void solve (int n, int k, ll a, int s) {
	map <int, ll> dd;
	int l = k, r = n;
	for (int i = 1; i < k; i++) dd[i] = skim(i);
	int ans = -1;
	while (l <= r) {
		int mid = (l + r) >> 1;
		if (!dd.count(mid)) dd[mid] = skim(mid);
		if (dd[mid] > a) {
			r = mid - 1; ans = mid;
		} else {
			l = mid + 1;
		}
	}
	ll sum = 0;
	for (int i = 1; i < k; i++) sum += dd[i];
	if (ans != -1) {
		sum += dd[ans];
		if (check(sum, a)) {
			vector <int> t;
			for (int i = 1; i < k; i++) t.push_back(i);
			t.push_back(ans);
			answer(t);
		}
	}
	set <int> u;	
	if (!dd.count(k)) dd[k] = skim(k);
	vector <pair <int, ll>> u;
	for (int i = 1; i <= k; i++) {
		if (!dd.count(i)) dd[i] = skim(i);
		u.push_back({i, dd[i]});
	}
	for (int i = ans - k; i < ans; i++) {
		if (!dd.count(i)) dd[i] = skim(i);
		u.push_back({i, dd[i]});
	}
	sum = 0;
	for (int i = 0; i < k; i++) sum += u[i].second;
	if (check(sum, a)) {
		vector <int> t;
		for (int i = 0; i < k; i++) t.push_back(u[i].first);
		sort(t.begin(), t.end());
		answer(t);
	}
	for (int i = k; i < (int)u.size(); i++) {
		sum -= u[i - k].second;
		sum += u[i].second;
		if (check(sum, a)) {
			vector <int> t;
			for (int j = i - k + 1; j <= i; j++) {
				t.push_back(u[j].first);
			}
			sort(t.begin(), t.end());
			answer(t);
		}
	}
	impossible();
}

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

books.cpp: In function 'void solve(int, int, ll, int)':
books.cpp:35:26: error: conflicting declaration 'std::vector<std::pair<int, long long int> > u'
   35 |  vector <pair <int, ll>> u;
      |                          ^
books.cpp:33:12: note: previous declaration as 'std::set<int> u'
   33 |  set <int> u;
      |            ^
books.cpp:38:5: error: 'class std::set<int>' has no member named 'push_back'
   38 |   u.push_back({i, dd[i]});
      |     ^~~~~~~~~
books.cpp:42:5: error: 'class std::set<int>' has no member named 'push_back'
   42 |   u.push_back({i, dd[i]});
      |     ^~~~~~~~~
books.cpp:45:38: error: no match for 'operator[]' (operand types are 'std::set<int>' and 'int')
   45 |  for (int i = 0; i < k; i++) sum += u[i].second;
      |                                      ^
books.cpp:48:44: error: no match for 'operator[]' (operand types are 'std::set<int>' and 'int')
   48 |   for (int i = 0; i < k; i++) t.push_back(u[i].first);
      |                                            ^
books.cpp:53:11: error: no match for 'operator[]' (operand types are 'std::set<int>' and 'int')
   53 |   sum -= u[i - k].second;
      |           ^
books.cpp:54:11: error: no match for 'operator[]' (operand types are 'std::set<int>' and 'int')
   54 |   sum += u[i].second;
      |           ^
books.cpp:58:18: error: no match for 'operator[]' (operand types are 'std::set<int>' and 'int')
   58 |     t.push_back(u[j].first);
      |                  ^