답안 #35037

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
35037 2017-11-17T14:19:40 Z UncleGrandpa925 구경하기 (JOI13_watching) C++14
100 / 100
303 ms 33584 KB
/*input
3 1 1
2
11
17
*/
#include <bits/stdc++.h>
using namespace std;
#define sp ' '
#define endl '\n'
#define fi first
#define se second
#define mp make_pair
#define int long long
#define N 2005
#define bit(x,y) ((x>>y)&1LL)
#define na(x) (#x) << ":" << x
ostream& operator << (ostream &os, vector<int>&x) {
	for (int i = 0; i < x.size(); i++) os << x[i] << sp;
	return os;
}
ostream& operator << (ostream &os, pair<int, int> x) {
	cout << x.fi << sp << x.se << sp;
	return os;
}
ostream& operator << (ostream &os, vector<pair<int, int> >&x) {
	for (int i = 0; i < x.size(); i++) os << x[i] << endl;
	return os;
}

int n, P, Q;
vector<int> a;
vector<pair<int, int> > nxt;
int dp[N][N];

bool check(int lim) {
	nxt.clear(); memset(dp, -1, sizeof(dp));
	for (int i = 0; i < a.size(); i++) {
		auto it = upper_bound(a.begin(), a.end(), a[i] + lim - 1);
		it--;
		pair<int, int> ret = mp(0, 0); ret.fi = it - a.begin();
		it = upper_bound(a.begin(), a.end(), a[i] + 2 * lim - 1);
		it--;
		ret.se = it - a.begin();
		nxt.push_back(ret);
	}
	for (int i = 0; i <= P; i++) {
		for (int j = 0; j <= Q; j++) {
			if (dp[i][j] == a.size() - 1) return true;
			if (i != P) {
				dp[i + 1][j] = max(dp[i + 1][j], nxt[dp[i][j] + 1].fi);
			}
			if (j != Q) {
				dp[i][j + 1] = max(dp[i][j + 1], nxt[dp[i][j] + 1].se);
			}
		}
	}
	return false;
}

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin >> n >> P >> Q;
	a.resize(n);
	for (auto &t : a) cin >> t;
	sort(a.begin(), a.end());
	a.resize(distance(a.begin(), unique(a.begin(), a.end())));
	P = min(P, n); Q = min(Q, n);
	int l = 1, r = 1e9;
	while (l != r) {
		int mid = (l + r) / 2;
		if (check(mid)) r = mid;
		else l = mid + 1;
	}
	cout << l << endl;
}

Compilation message

watching.cpp: In function 'std::ostream& operator<<(std::ostream&, std::vector<long long int>&)':
watching.cpp:19:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < x.size(); i++) os << x[i] << sp;
                    ^
watching.cpp: In function 'std::ostream& operator<<(std::ostream&, std::vector<std::pair<long long int, long long int> >&)':
watching.cpp:27:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < x.size(); i++) os << x[i] << endl;
                    ^
watching.cpp: In function 'bool check(long long int)':
watching.cpp:38:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < a.size(); i++) {
                    ^
watching.cpp:49:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if (dp[i][j] == a.size() - 1) return true;
                 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 236 ms 33584 KB Output is correct
2 Correct 239 ms 33584 KB Output is correct
3 Correct 219 ms 33584 KB Output is correct
4 Correct 229 ms 33584 KB Output is correct
5 Correct 219 ms 33584 KB Output is correct
6 Correct 216 ms 33584 KB Output is correct
7 Correct 233 ms 33584 KB Output is correct
8 Correct 213 ms 33584 KB Output is correct
9 Correct 206 ms 33584 KB Output is correct
10 Correct 213 ms 33584 KB Output is correct
11 Correct 243 ms 33584 KB Output is correct
12 Correct 223 ms 33584 KB Output is correct
13 Correct 226 ms 33584 KB Output is correct
14 Correct 209 ms 33584 KB Output is correct
15 Correct 209 ms 33584 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 223 ms 33584 KB Output is correct
2 Correct 199 ms 33584 KB Output is correct
3 Correct 256 ms 33584 KB Output is correct
4 Correct 233 ms 33584 KB Output is correct
5 Correct 223 ms 33584 KB Output is correct
6 Correct 229 ms 33584 KB Output is correct
7 Correct 239 ms 33584 KB Output is correct
8 Correct 239 ms 33584 KB Output is correct
9 Correct 239 ms 33584 KB Output is correct
10 Correct 256 ms 33584 KB Output is correct
11 Correct 236 ms 33584 KB Output is correct
12 Correct 303 ms 33584 KB Output is correct
13 Correct 236 ms 33584 KB Output is correct
14 Correct 226 ms 33584 KB Output is correct
15 Correct 243 ms 33584 KB Output is correct