답안 #952044

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
952044 2024-03-23T04:24:16 Z Angus_Yeung Hiring (IOI09_hiring) C++17
60 / 100
298 ms 22704 KB
#include <bits/stdc++.h>
#define val first
#define id second
#define pii pair<ll, ll>
typedef long long ll;
const ll MOD = 1000000007LL;
const ll INF = 1e15;
using namespace std;

struct worker {
	ll s, q, id;
};

ll n, w, sum, ans;
worker a[500010];
priority_queue<pii> q;

long double f(worker x) {
	return x.s*1.0/x.q;
}

int main() {
	cin.tie(0); cout.tie(0);
	ios::sync_with_stdio(0);
	
	cin >> n >> w;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].s >> a[i].q;
		a[i].id = i;
	}
	sort(a+1, a+n+1, [&](worker x, worker y) -> bool {
		return f(x) < f(y);
	});
	
	sum = 0; ans = 0;
	while (!q.empty()) q.pop();
	for (int i = 1; i <= n; i++) {
		q.push({a[i].q, a[i].id});
		sum += a[i].q;
		while (!q.empty() && f(a[i])*sum > w) {
			sum -= q.top().val;
			q.pop();
		}
		ans = max(ans, (ll)q.size());
	}
	
	if (ans == 0) {
		cout << "0\n";
		return 0;
	}
	
	sum = 0;
	while (!q.empty()) q.pop();
	for (int i = 1; i <= n; i++) {
		q.push({a[i].q, a[i].id});
		sum += a[i].q;
		while (!q.empty() && f(a[i])*sum > w) {
			sum -= q.top().val;
			q.pop();
		}
		if (q.size() == ans) {
			cout << ans << "\n";
			while (!q.empty()) {
				cout << q.top().id << "\n";
				q.pop();
			}
			return 0;
		}
	}
	
	return 0;
}

Compilation message

hiring.cpp: In function 'int main()':
hiring.cpp:61:16: warning: comparison of integer expressions of different signedness: 'std::priority_queue<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   61 |   if (q.size() == ans) {
      |       ~~~~~~~~~^~~~~~
# 결과 실행 시간 메모리 Grader output
1 Partially correct 0 ms 344 KB Partially correct
2 Partially correct 1 ms 344 KB Partially correct
3 Correct 1 ms 356 KB Output is correct
4 Partially correct 0 ms 348 KB Partially correct
5 Partially correct 1 ms 348 KB Partially correct
6 Partially correct 1 ms 344 KB Partially correct
7 Partially correct 2 ms 348 KB Partially correct
8 Partially correct 1 ms 348 KB Partially correct
9 Correct 2 ms 604 KB Output is correct
10 Partially correct 3 ms 600 KB Partially correct
11 Correct 3 ms 604 KB Output is correct
12 Partially correct 4 ms 2908 KB Partially correct
13 Partially correct 4 ms 2648 KB Partially correct
14 Correct 7 ms 2908 KB Output is correct
15 Partially correct 7 ms 2908 KB Partially correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Partially correct 0 ms 348 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
4 Partially correct 10 ms 3164 KB Partially correct
5 Partially correct 23 ms 3676 KB Partially correct
6 Correct 173 ms 14184 KB Output is correct
7 Partially correct 234 ms 20120 KB Partially correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 1 ms 348 KB Partially correct
2 Partially correct 1 ms 344 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Partially correct 1 ms 344 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Partially correct 1 ms 348 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 64 ms 7076 KB Partially correct
2 Partially correct 63 ms 6868 KB Partially correct
3 Correct 63 ms 7096 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 103 ms 11028 KB Partially correct
2 Partially correct 100 ms 11888 KB Partially correct
3 Correct 100 ms 10960 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 263 ms 21156 KB Output is correct
2 Partially correct 258 ms 21444 KB Partially correct
3 Correct 262 ms 21876 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 298 ms 22704 KB Output is correct
2 Partially correct 294 ms 22192 KB Partially correct
3 Correct 296 ms 21964 KB Output is correct