Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //контест не оч :c
- #ifdef DEBUG
- #include "./bits.cpp"
- using namespace std;
- #define dbg(x) ;
- #else
- #include<bits/stdc++.h>
- using namespace std;
- #define dbg(x) cout << #x << ':' << x
- #endif
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("no-stack-protector")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
- #pragma GCC optimize("fast-math")
- // #define endl '\n'
- #define int long long
- #define pt pair<int, int>
- #define x first
- #define y second
- struct ev{
- int x, y, z;
- int i;
- bool operator<(const ev &oth) const{
- if(x == oth.x){
- if(y == oth.y){
- return z < (oth.z);
- }
- return (y) < (oth.y);
- }
- return (x) < (oth.x);
- }
- };
- signed main() {
- #ifdef DEBUG
- // freopen("input.txt", "r", stdin);
- // freopen("05.txt", "w", stdout);
- #else
- // freopen(".in", "r", stdin);
- // freopen(".out", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- int n;
- cin >> n;
- vector<ev> a(n);
- for(int i = 0; i < n; i++){
- cin >> a[i].x >> a[i].y >> a[i].z;
- a[i].i = i;
- }
- sort(a.begin(), a.end());
- int sv = -1, sy = -1;
- vector<int> v(n, 0);
- for(int i = 0; i < n; i+=2){
- if(i + 1 < n && a[i].x == a[i + 1].x){
- if(a[i].y == a[i + 1].y){
- v[a[i].i] += 1;
- v[a[i + 1].i] += 1;
- cout << a[i].i + 1 << ' ' << a[i + 1].i + 1 << endl;
- if(sv != -1 && sy != -1){
- v[a[sv].i] += 1;
- v[a[sy].i] += 1;
- cout << a[sv].i + 1 << ' ' << a[sy].i + 1 << endl;
- sv = -1;
- sy = -1;
- }
- }
- else {
- if(sy == -1){
- sy = i;
- }
- else{
- v[a[i].i]++;
- v[a[sy].i]++;
- cout << a[i].i + 1 << ' ' << a[sy].i + 1 << endl;
- sy = -1;
- }
- i--;
- }
- }
- else{
- if(sv == -1 && sy != -1){
- sv = sy;
- sy = -1;
- }
- if(sv == -1)
- sv = i;
- else{
- v[a[i].i] += 1;
- v[a[sv].i] += 1;
- cout << a[i].i + 1 << ' ' << a[sv].i + 1 << endl;
- sv = -1;
- }
- i--;
- }
- }
- int l = -1;
- for(int i = 0; i < n; i++){
- if(!v[i]){
- if(l == -1) l = i;
- else {
- v[l] += 1;
- v[i] += 1;
- cout << l + 1 << ' ' << i + 1 << endl;
- l = -1;
- }
- }
- }
- for(int i = 0; i < n; i++) assert(v[i] == 1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement