Submission #964985

# Submission time Handle Problem Language Result Execution time Memory
964985 2024-04-18T01:31:20 Z fzyzzz_z Hiring (IOI09_hiring) C++17
60 / 100
596 ms 19816 KB
#include <bits/stdc++.h>
using namespace std; 

using ll = long long; 
#define fs first
#define sc second 

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n; 
	ll k; 
	cin >> n >> k; 
	vector<pair<int, int>> a(n); 
	vector<int> ord(n); 

	for (int i = 0; i < n; ++i) {
		cin >> a[i].sc >> a[i].fs; 
		ord[i] = i; 
	}

	sort(ord.begin(), ord.end(), [&](int & x, int & y){
		if (a[x].fs * a[y].sc == a[x].sc * a[y].fs) return a[x].sc < a[y].sc; 
		return (a[y].fs * a[x].sc <= a[y].sc * a[x].fs); 
	});

	set<pair<int, int>> st; 
	int ans = 0; 
	ll cs = 0; 

	for (int i = 0; i < n; ++i) {
		int x = a[ord[i]].fs, y = a[ord[i]].sc; 
		cs += x; 
		st.insert({x, i}); 

		// cout << "at " << i << ' ' << ord[i] << ' ' << x << ' ' << y << '\n';

		while (cs * y > k * x) {
			pair<int, int> v = *st.rbegin(); 
			cs -= v.fs; 
			st.erase(v); 
		}
		// cout << cs << ' ' << '\n';
		// cout << "S " << st.size() << '\n';
		// for (auto x: st) {
		// 	cout << x.sc << '\n'; 
		// }


		if (st.size() > ans) {
			ans = st.size(); 
		}
	}

	st.clear(); 
	cs = 0; 
	for (int i = 0; i < n; ++i) {
		int x = a[ord[i]].fs, y = a[ord[i]].sc; 
		cs += x; 
		st.insert({x, ord[i]}); 

		while (cs * y > k * x) {
			pair<int, int> v = *st.rbegin(); 
			cs -= v.fs; 
			st.erase(v); 
		}

		if (st.size() == ans) {
			cout << ans << "\n";
			ll tot = 0, m0 = 1, m1 = 0; 
			for (auto v: st) {
				cout << v.sc + 1 << "\n"; 

				tot += a[v.sc].fs; 
				if (m1 * a[v.sc].fs < m0 * a[v.sc].sc) {
					m1 = a[v.sc].sc; 
					m0 = a[v.sc].fs; 
				}
				assert(tot * m1 <= k * m0); 
			}
			return 0; 
		}
	}

	assert(false); 

	return 0; 
}


Compilation message

hiring.cpp: In function 'int main()':
hiring.cpp:51:17: warning: comparison of integer expressions of different signedness: 'std::set<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   51 |   if (st.size() > ans) {
      |       ~~~~~~~~~~^~~~~
hiring.cpp:69:17: warning: comparison of integer expressions of different signedness: 'std::set<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   69 |   if (st.size() == ans) {
      |       ~~~~~~~~~~^~~~~~
# Verdict Execution time Memory Grader output
1 Partially correct 0 ms 344 KB Partially correct
2 Partially correct 1 ms 600 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
4 Partially correct 1 ms 348 KB Partially correct
5 Partially correct 0 ms 348 KB Partially correct
6 Partially correct 1 ms 348 KB Partially correct
7 Partially correct 1 ms 504 KB Partially correct
8 Partially correct 1 ms 348 KB Partially correct
9 Correct 3 ms 604 KB Output is correct
10 Partially correct 4 ms 604 KB Partially correct
11 Correct 3 ms 604 KB Output is correct
12 Partially correct 4 ms 860 KB Partially correct
13 Partially correct 6 ms 604 KB Partially correct
14 Correct 7 ms 984 KB Output is correct
15 Partially correct 8 ms 856 KB Partially correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Partially correct 1 ms 348 KB Partially correct
3 Correct 0 ms 348 KB Output is correct
4 Partially correct 11 ms 1120 KB Partially correct
5 Partially correct 26 ms 2136 KB Partially correct
6 Correct 226 ms 10884 KB Output is correct
7 Partially correct 326 ms 15260 KB Partially correct
# Verdict Execution time Memory Grader output
1 Partially correct 1 ms 348 KB Partially correct
2 Partially correct 1 ms 456 KB Partially correct
3 Correct 1 ms 344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Partially correct 1 ms 344 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Partially correct 1 ms 348 KB Partially correct
3 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Partially correct 93 ms 4424 KB Partially correct
2 Partially correct 88 ms 4428 KB Partially correct
3 Correct 83 ms 4432 KB Output is correct
# Verdict Execution time Memory Grader output
1 Partially correct 116 ms 7632 KB Partially correct
2 Partially correct 103 ms 7660 KB Partially correct
3 Correct 116 ms 7656 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 419 ms 16684 KB Output is correct
2 Partially correct 374 ms 16852 KB Partially correct
3 Correct 375 ms 16824 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 596 ms 19804 KB Output is correct
2 Partially correct 519 ms 19804 KB Partially correct
3 Correct 557 ms 19816 KB Output is correct