#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include "parks.h"
using namespace std;
int xi[4] = {0, 0, +2, -2};
int yi[4] = {+2, -2, 0, 0};
int n;
vector<int> roadU;
vector<int> roadD;
vector<int> benchX;
vector<int> benchY;
#define X first.second
#define Y first.first
int construct_roads(vector<int> x, vector<int> y){
n = x.size();
vector<pair<pair<int, int>, int>> fount(n);
for(int i = 0; i<n; i++){
fount[i] = {{y[i], x[i]}, i};
}
sort(fount.begin(), fount.end());
// reverse(fount.begin(), fount.end());
vector<int> seen(n);
stack<int> s;
s.push(0);
while(!s.empty()){
int i = s.top();
seen[i] = 1;
s.pop();
if(fount[i].X == fount[i+1].X && fount[i].Y + 2 == fount[i+1].Y&& !seen[i+1]){
roadU.push_back(fount[i].second);
roadD.push_back(fount[i+1].second);
benchX.push_back((fount[i].X == 2)?1:5);
benchY.push_back(fount[i].Y+1);
if(!seen[i+1]) s.push(i+1);
}
if(fount[i].Y == fount[i-1].Y && fount[i].X - 2 == fount[i-1].X && !seen[i-1]){
roadU.push_back(fount[i].second);
roadD.push_back(fount[i-1].second);
benchX.push_back(3);
benchY.push_back(fount[i].Y+1);
if(!seen[i-1]) s.push(i-1);
}
if(fount[i].X + 2 == fount[i+1].X && fount[i].Y == fount[i+1].Y&& !seen[i+1]){
roadU.push_back(fount[i].second);
roadD.push_back(fount[i+1].second);
benchX.push_back(3);
benchY.push_back(fount[i].Y+1);
if(!seen[i+1]) s.push(i+1);
}
if(i<n-2 && fount[i].X == fount[i+2].X && fount[i].Y + 2 == fount[i+2].Y&& !seen[i+2]){
roadU.push_back(fount[i].second);
roadD.push_back(fount[i+2].second);
benchX.push_back((fount[i].X == 2)?1:5);
benchY.push_back(fount[i].Y+1);
if(!seen[i+2]) s.push(i+2);
}
}
for(int i = 0; i<n; i++) if(seen[i] == 0) return 0;
build(roadU, roadD, benchX, benchY);
return 1;
}
// int main(void){
// freopen("input.txt", "r", stdin);
// int ni;
// cin>>ni;
// vector<int> c1(ni), l1(ni);
// for(int i = 0; i<ni; i++) cin>>c1[i];
// for(int i = 0; i<ni; i++) cin>>l1[i];
// int ans = construct_roads(c1, l1);
// }
// vector<vector<int>> grid;
// vector<vector<int>> vis;
// int found = 0;
// void dfs(int x, int y){
// vis[x][y] = 1;
// for(int i = 0; i<4; i++){
// if(grid[xi[i]+x][yi[i]+y] && !vis[xi[i]+x][yi[i]+y]){
// roadU.push_back(grid[x][y]-1);
// roadD.push_back(grid[xi[i]+x][yi[i]+y] - 1);
// if(x == 2 || y+xi[i] == 2)
// }
// }
// }
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |