248642026-02-16 09:56:07ubormaciFagyasztócpp17Wrong answer 30/75112ms820 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;

map<ll, set<pair<ll,ll>>> mp;
map<ll,ll> qit;

ll getfood(ll currday, ll minq, ll maxd) {

    for(ll i = currday; i <= maxd; i++) {

        if(mp[i].empty()) {
            continue;
        }

        // let's check if there's a minq element

        auto o = mp[i].lower_bound({minq, 0});
        if(o == mp[i].end()) {
            continue;
        }

        auto h = *o;
        mp[i].erase(o);

        return h.second;
    }
    
    return -1;
}

void solve() {

	ll n;
	cin >> n;

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

    ll maxtill = 0;

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

		v[i] = {till, quality};
        
        maxtill = max(till, maxtill);
    }

    vector<pair<ll,ll>> res;

    for(ll i = 1; i <= maxtill; i++) {

        ll a = getfood(i, 4, maxtill);

        if(a == -1) {
            break;
        }

        ll nextmin = 4;

        if(v[a].second == 4) {
            nextmin = 5;
        }

        ll b = getfood(i, nextmin, maxtill);

        if(b == -1) {
            break;
        }

        res.push_back({a, b});
    }

    cout << res.size() << "\n";
    for(const auto & [x, y] : res) {
        cout << x << " " << y << "\n";
    }
}

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

	solve();

	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
subtask210/10
2Accepted1ms316 KiB
3Accepted1ms316 KiB
4Accepted1ms316 KiB
5Accepted1ms500 KiB
6Accepted1ms500 KiB
7Accepted1ms316 KiB
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
subtask320/20
12Accepted1ms316 KiB
13Accepted1ms352 KiB
14Accepted1ms316 KiB
15Accepted1ms316 KiB
16Accepted1ms332 KiB
17Accepted3ms316 KiB
18Accepted4ms316 KiB
19Accepted2ms316 KiB
20Accepted2ms316 KiB
21Accepted6ms564 KiB
22Accepted4ms576 KiB
23Accepted30ms668 KiB
24Accepted27ms712 KiB
25Accepted14ms564 KiB
26Accepted2ms564 KiB
27Accepted18ms728 KiB
28Accepted28ms564 KiB
29Accepted8ms612 KiB
30Accepted8ms528 KiB
31Accepted20ms564 KiB
subtask40/15
32Accepted1ms500 KiB
33Accepted1ms316 KiB
34Accepted1ms316 KiB
35Wrong answer2ms488 KiB
36Accepted17ms552 KiB
37Accepted14ms536 KiB
38Wrong answer4ms316 KiB
39Accepted3ms564 KiB
40Accepted14ms544 KiB
41Accepted59ms660 KiB
42Accepted34ms564 KiB
43Wrong answer86ms704 KiB
44Accepted4ms568 KiB
45Accepted37ms584 KiB
46Accepted112ms704 KiB
subtask50/15
47Accepted2ms512 KiB
48Accepted4ms316 KiB
49Wrong answer4ms316 KiB
50Accepted2ms316 KiB
51Accepted4ms516 KiB
52Accepted1ms316 KiB
53Wrong answer1ms508 KiB
54Accepted4ms668 KiB
55Accepted1ms316 KiB
56Accepted6ms508 KiB
57Accepted3ms316 KiB
58Wrong answer2ms316 KiB
59Wrong answer4ms552 KiB
60Accepted1ms316 KiB
61Accepted2ms316 KiB
subtask60/15
62Accepted4ms568 KiB
63Accepted12ms564 KiB
64Accepted26ms692 KiB
65Wrong answer35ms748 KiB
66Accepted37ms564 KiB
67Accepted3ms564 KiB
68Accepted13ms600 KiB
69Wrong answer9ms604 KiB
70Wrong answer9ms564 KiB
71Wrong answer23ms660 KiB
72Accepted12ms620 KiB
73Wrong answer17ms820 KiB
74Accepted18ms564 KiB
75Accepted9ms712 KiB
76Accepted6ms572 KiB