제출 #1286530

#제출 시각아이디문제언어결과실행 시간메모리
1286530eri16Obstacles for a Llama (IOI25_obstacles)C++20
37 / 100
104 ms44528 KiB
#include <bits/stdc++.h> using namespace std; int arr1[200005]; int arr2[2][200005]; int arr3[3][200005]; int vis3[3][200005]={0}; int vis2[2][200005]={0}; int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; int kk=0; void dfs2(int i, int j, int col, int n) { if (i < 0 || i >= 2 || j < 0 || j >= n) return; if (arr2[i][j]==0) return; if (vis2[i][j]) return; vis2[i][j] = 1; arr2[i][j] = col; for (int z = 0; z < 4; z++) { dfs2(i + dx[z], j + dy[z], col, n); } } void dfs3(int i, int j, int col, int n) { if (i < 0 || i >= 3 || j < 0 || j >= n) return; if (arr3[i][j]==0) return; if (vis3[i][j]) return; vis3[i][j] = 1; arr3[i][j] = col; for (int z = 0; z < 4; z++) { dfs3(i + dx[z], j + dy[z], col, n); } } void initialize(std::vector<int> T, std::vector<int> H){ if (T.size()==1){ kk=1; for (int i=0; i<H.size(); i++){ arr1[i]=(T[0]>H[i]) ? 1 : 0; } int k=0; for (int i=0; i<H.size(); i++){ if (arr1[i]==1){arr1[i]=k;} else{ arr1[i]=-1; if (i>0){ if (arr1[i-1]!=-1){ k++; } } } } } else if (T.size()==3){ kk=3; for (int j=0; j<3; j++){ for (int i=0; i<H.size(); i++){ arr3[j][i]=(T[j]>H[i]) ? 1 : 0; }} int k=1; vis3[0][H.size()]=1; vis3[1][H.size()]=1; vis3[2][H.size()]=1; for (int i=0; i<3; i++){ for (int j=0; j<H.size(); j++){if (vis3[i][j]==0){dfs3(i,j,k,H.size());k++;} }} } else{ kk=2; for (int i=0; i<H.size(); i++){ arr2[0][i]=(T[0]>H[i]) ? 1 : 0; } for (int i=0; i<H.size(); i++){ arr2[1][i]=(T[T.size()-1]>H[i]) ? 1 : 0; } int k=1; vis2[0][H.size()]=1; vis2[1][H.size()]=1; for (int i=0; i<2; i++){ for (int j=0; j<H.size(); j++){if (vis2[i][j]==0){dfs2(i,j,k,H.size());k++;} }} } } bool can_reach(int L, int R, int S, int D){ if (kk==0){ return true; } if (kk==1){ if (arr1[S]==arr1[D] && arr1[S]!=-1){return true;} } if (kk==2){ if (arr2[0][S]==arr2[0][D] && arr2[0][S]!=0){return true;} } if (kk==3){ if (arr3[0][S]==arr3[0][D] && arr3[0][S]!=0){return true;} } return false; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...