Submission #1215435

#TimeUsernameProblemLanguageResultExecution timeMemory
1215435thelegendary08Fountain Parks (IOI21_parks)C++17
15 / 100
58 ms13880 KiB
#include "parks.h"
#include<bits/stdc++.h>
#define vi vector<int>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define mp make_pair
#define pb push_back
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define pii pair<int,int>
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n';
#define vvi vector<vi>

using namespace std;
const int mxn = 1e5 +5;
int construct_roads(std::vector<int> x, std::vector<int> y) {
	vector<vector<int>>grid(2, vi(mxn, -1));
	int n = x.size();
	f0r(i,n){
		int a = x[i] / 2 - 1;
		int b = y[i] / 2 - 1;
		grid[a][b] = i;
	}
	int fi = -1;
	f0r(i, mxn){
		if(grid[0][i] != -1 || grid[1][i] != -1){
			fi = i; break;
		}
	}
	
	int done = 0;
	vi u,v,a,b;
	if(grid[0][fi] != -1 && grid[1][fi] != -1){
		u.pb(grid[0][fi]); v.pb(grid[1][fi]); a.pb(3); b.pb(fi * 2 + 1);
	}
	done += (grid[0][fi] != -1) + (grid[1][fi] != -1);
	bool ok = 1;
	FOR(i, fi + 1, mxn){
		if(done == n)break;
		if(grid[0][i] == -1 && grid[1][i] == -1){
			ok = 0;
			break;
		}
		if(grid[0][i] == -1 && grid[1][i] != -1 && grid[0][i-1] != -1 && grid[1][i-1] == -1){
			ok = 0; break;
		}
		if(grid[0][i] != -1 && grid[1][i] == -1 && grid[0][i-1] == -1 && grid[1][i-1] != -1){
			ok = 0; break;
		}
		if(grid[0][i] != -1 && grid[0][i-1] != -1){
			u.pb(grid[0][i]);v.pb(grid[0][i-1]);a.pb(1);b.pb(i * 2 + 1);
		}
		if(grid[1][i] != -1 && grid[1][i-1] != -1){
			u.pb(grid[1][i]); v.pb(grid[1][i-1]); a.pb(5); b.pb(i * 2 + 1);
		}
		int lef = (grid[0][i-1] != -1) + (grid[1][i-1] != -1);
		int rig = (grid[0][i] != -1) + (grid[1][i] != -1);
		if(lef == 1 && rig == 2){
			u.pb(grid[0][i]); v.pb(grid[1][i]); a.pb(3); b.pb(i * 2 + 1);
		}
		done += (grid[0][i] != -1) + (grid[1][i] != -1);
	}
	if(!ok)return 0;
	build(u,v,a,b);
	return 1;
	
	/*
    if (x.size() == 1) {
	build({}, {}, {}, {});
        return 1;
    }
    std::vector<int> u, v, a, b;
    u.push_back(0);
    v.push_back(1);
    a.push_back(x[0]+1);
    b.push_back(y[0]-1);
    build(u, v, a, b);
    return 1;
    */
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...