248672026-02-16 10:15:49ubormaciFagyasztócpp17Wrong answer 30/753ms800 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;

vector<set<pair<ll,ll>>> mp(2001);

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

    //cerr << "\ncurrday=" << currday << "; minq=" << minq << "; maxd=" << maxd;
 
    for(ll i = currday; i <= maxd; i++) {

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

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

        //cerr << "\ni=" << i << "; mp[i]=" << mp[i];

        pair<ll,ll> srch = {minq, 0};
        //cerr << "\nsrch=" << srch;

        auto o = mp[i].lower_bound({minq, 0});
        if(o == mp[i].end()) {
            //cerr << "\no is the end";
            continue;
        }

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

        //cerr << "\nh=" << h;

        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});

		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
1Accepted1ms500 KiB
subtask210/10
2Accepted1ms316 KiB
3Accepted1ms316 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted2ms316 KiB
7Accepted1ms500 KiB
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
subtask320/20
12Accepted1ms316 KiB
13Accepted1ms316 KiB
14Accepted1ms316 KiB
15Accepted1ms316 KiB
16Accepted1ms316 KiB
17Accepted1ms316 KiB
18Accepted2ms316 KiB
19Accepted1ms316 KiB
20Accepted1ms316 KiB
21Accepted1ms564 KiB
22Accepted1ms316 KiB
23Accepted2ms580 KiB
24Accepted2ms564 KiB
25Accepted1ms564 KiB
26Accepted1ms316 KiB
27Accepted2ms800 KiB
28Accepted2ms580 KiB
29Accepted1ms500 KiB
30Accepted2ms564 KiB
31Accepted2ms564 KiB
subtask40/15
32Accepted1ms316 KiB
33Accepted1ms316 KiB
34Accepted1ms316 KiB
35Wrong answer1ms508 KiB
36Accepted2ms564 KiB
37Accepted1ms316 KiB
38Wrong answer1ms332 KiB
39Accepted1ms316 KiB
40Accepted1ms316 KiB
41Accepted2ms564 KiB
42Accepted2ms316 KiB
43Wrong answer3ms564 KiB
44Accepted1ms316 KiB
45Accepted2ms756 KiB
46Accepted3ms564 KiB
subtask50/15
47Accepted2ms316 KiB
48Accepted1ms544 KiB
49Wrong answer1ms560 KiB
50Accepted1ms508 KiB
51Accepted1ms316 KiB
52Accepted1ms316 KiB
53Wrong answer1ms360 KiB
54Accepted1ms316 KiB
55Accepted1ms316 KiB
56Accepted1ms552 KiB
57Accepted1ms316 KiB
58Wrong answer1ms316 KiB
59Wrong answer1ms316 KiB
60Accepted1ms316 KiB
61Accepted1ms316 KiB
subtask60/15
62Accepted1ms384 KiB
63Accepted1ms316 KiB
64Accepted2ms588 KiB
65Wrong answer2ms600 KiB
66Accepted2ms564 KiB
67Accepted1ms316 KiB
68Accepted1ms564 KiB
69Wrong answer1ms536 KiB
70Wrong answer1ms388 KiB
71Wrong answer2ms608 KiB
72Accepted1ms316 KiB
73Wrong answer2ms748 KiB
74Accepted2ms564 KiB
75Accepted1ms316 KiB
76Accepted1ms528 KiB