#include "sungjin.h"
#include <bits/stdc++.h>
using namespace std;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int val[1002][1002][4];
int n,m,w;
int p[1010000];
int find(int a) {
return p[a]<0?a:p[a]=find(p[a]);
}
void merge(int a,int b) {
a=find(a);
b=find(b);
if (a==b) {
return;
}
p[b]=a;
}
void Init(int N, int M, int W, int R[], int C[], int dir[]) {
n=N;
m=M;
w=W;
memset(p,-1,sizeof(p));
for(int i=0;i<w;i++){
int x=R[w];
int y=C[w];
int d=dir[w]-1;
val[x][y][d]=1;
val[x+dx[d]][y+dy[d]][d^1]=1;
}
for(int i=0;i<=m;i++) {
merge(i,i+1);
merge((m+2)*(n+1)+i,(m+2)*(n+1)+i+1);
}
for(int i=0;i<=n;i++) {
merge(i*(m+2),(i+1)*(m+2));
merge(i*(m+2)+m+1,(i+1)*(m+2)+m+1);
}
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++) {
for(int k=0;k<4;k++) {
if (val[i][j][k]==0) {
int x=i+dx[k];
int y=j+dy[k];
merge(i*(m+2)+j,x*(m+2)+y);
}
}
}
}
}
int WereSameTerritory(int R1, int C1, int R2, int C2) {
return find(R1*(m+2)+C1)!=find(0)&&find(R2*(m+2)+C2)!=find(0);
}
#include "dowoon.h"
#include <bits/stdc++.h>
using namespace std;
int p[1010000];
int find(int a) {
return p[a]<0?a:p[a]=find(p[a]);
}
void merge(int a,int b) {
a=find(a);
b=find(b);
if (a==b) {
return;
}
p[a]+=p[b];
p[b]=a;
}
int Guess(int N, int M) {
memset(p,-1,sizeof(p));
for(int i=1;i<=N;i++) {
for(int j=1;j<M;j++) {
if (Ask(i,j,i,j+1)) {
merge(i*(M+1)+j,i*(M+1)+j+1);
}
}
}
for(int i=1;i<N;i++) {
for(int j=1;j<=M;j++) {
if (Ask(i,j,i+1,j)) {
merge(i*(M+1)+j,(i+1)*(M+1)+j);
}
}
}
for(int i=1;i<=N;i++) {
for(int j=1;j<=M;j++) {
int now=i*(M+1)+j;
if (-p[find(now)]*2>N*M) {
return 1;
}
}
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
4180 KB |
Execution failed because the return code was nonzero |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
3 ms |
4180 KB |
Execution failed because the return code was nonzero |
2 |
Halted |
0 ms |
0 KB |
- |