185662025-10-27 11:42:51ubormaciFagyasztócpp17Wrong answer 0/758ms1400 KiB
#include <iostream>
#include <algorithm> // for sort, mainly
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <array>
#include <string>
#include <cstdio>
#include <iterator>
#include <unordered_set>
#include <cstdint> // for int64_t, int32_t, etc
#include <queue>
#include <stack>
#include <deque>
#include <numeric> // gcd, lcm
#include <fstream>
#include <bitset> // for bitset
#include <iomanip>
#include <cassert> // for set with custom ordering
#include <type_traits> // for set with custom ordering
#include <utility> // for swap, forward, etc
using namespace std;

#pragma GCC optimize("O2")
// #pragma GCC optimize("O1","O2","O3","Ofast","unroll-loops")
// #pragma GCC target("sse","sse2","sse3","sse4.1","sse4.2","avx","avx2","fma")

template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#ifdef LOCAL
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

/*

notes:

int64_t
stoi(string s) -> string to int
to_string() -> int (or else) to string

vector declaration:
vector<ll> v(n, 0)
vector<vector<ll>> v(n, vector<ll>(n, 0));

{if statement} ? {truth value} : {false value}

#ifdef LOCAL
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif

std::lcm(ll a, ll b), std::gcd(int a, int b)

cout << fixed << setprecision(n);

set with custom ordering
set<ll, decltype(&cmp)> qu(cmp);

*/

typedef int64_t ll;

set<pair<ll,ll>> s;

map<pair<ll,ll>, queue<ll>> mp;

ll getfood(ll currday, ll minq) {

	auto it = s.lower_bound({currday, minq});
	if(it == s.end()) {
		return -1;
	}
	
	ll ret = mp[*it].front();
	mp[*it].pop();
	s.erase(it);

	return ret;
}

void solve() {

	ll n;
	cin >> n;

	vector<pair<ll,ll>> v(n+1, {0,0});

	for(ll i = 1; i <= n; i++) {
		ll till, quality;
		cin >> till >> quality;
		if(quality < 4) {
			continue;
		}
		s.insert({till, quality});
		mp[{till, quality}].push(i);
		v[i] = {till, quality};
	}

	cerr << "\nn=" << n;
	cerr << "\nv=" << v;
	cerr << "\ns=" << s;
	//cerr << "\nmp=" << mp;

	ll d = 1;
	vector<ll> res;
	while(1) {
		
		auto fst = getfood(d, 4);

		if(fst == -1) {
			// can't find any more
			d--;
			break;
		}

		ll secfq = 4;
		if(v[fst].second == 4) {
			secfq = 5;
		}

		auto sct = getfood(d, secfq);
		if(sct == -1) {
			d--;
			break;
		}

		res.push_back(fst);
		res.push_back(sct);

		d++;
	}

	cout << d << "\n";
	for(ll i = 0; i < res.size(); i+=2) {
		cout << res[i] << " " << res[i+1] << "\n";
	}

}

int main()
{
	std::ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	solve();

	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
subtask20/10
2Wrong answer1ms316 KiB
3Wrong answer1ms316 KiB
4Wrong answer1ms316 KiB
5Accepted1ms508 KiB
6Accepted1ms316 KiB
7Accepted1ms512 KiB
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Wrong answer1ms316 KiB
11Accepted1ms500 KiB
subtask30/20
12Accepted1ms316 KiB
13Accepted1ms316 KiB
14Accepted1ms316 KiB
15Accepted1ms316 KiB
16Accepted1ms316 KiB
17Wrong answer2ms552 KiB
18Wrong answer2ms560 KiB
19Accepted1ms508 KiB
20Accepted2ms488 KiB
21Wrong answer3ms768 KiB
22Wrong answer2ms316 KiB
23Wrong answer7ms1164 KiB
24Wrong answer6ms1076 KiB
25Accepted4ms928 KiB
26Accepted2ms500 KiB
27Wrong answer8ms1256 KiB
28Wrong answer8ms1400 KiB
29Wrong answer2ms564 KiB
30Accepted4ms832 KiB
31Wrong answer7ms1076 KiB
subtask40/15
32Accepted1ms316 KiB
33Accepted1ms316 KiB
34Accepted1ms500 KiB
35Partially correct2ms316 KiB
36Wrong answer3ms564 KiB
37Wrong answer3ms564 KiB
38Wrong answer2ms316 KiB
39Wrong answer1ms316 KiB
40Wrong answer2ms316 KiB
41Wrong answer4ms820 KiB
42Wrong answer4ms564 KiB
43Wrong answer6ms960 KiB
44Wrong answer2ms316 KiB
45Wrong answer4ms564 KiB
46Wrong answer7ms820 KiB
subtask50/15
47Wrong answer2ms500 KiB
48Wrong answer2ms564 KiB
49Wrong answer2ms564 KiB
50Wrong answer2ms508 KiB
51Wrong answer2ms564 KiB
52Wrong answer1ms316 KiB
53Wrong answer2ms444 KiB
54Wrong answer2ms568 KiB
55Accepted1ms316 KiB
56Wrong answer3ms564 KiB
57Wrong answer1ms316 KiB
58Wrong answer1ms316 KiB
59Wrong answer3ms564 KiB
60Accepted1ms424 KiB
61Wrong answer1ms548 KiB
subtask60/15
62Wrong answer3ms316 KiB
63Wrong answer4ms564 KiB
64Wrong answer7ms904 KiB
65Wrong answer7ms1216 KiB
66Wrong answer8ms1088 KiB
67Wrong answer2ms316 KiB
68Wrong answer3ms564 KiB
69Wrong answer2ms432 KiB
70Wrong answer3ms564 KiB
71Wrong answer6ms868 KiB
72Wrong answer3ms564 KiB
73Wrong answer4ms820 KiB
74Wrong answer4ms820 KiB
75Wrong answer4ms640 KiB
76Wrong answer2ms316 KiB