結果

問題 No.323 yuki国
ユーザー akakimidoriakakimidori
提出日時 2019-02-10 18:21:20
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 72 ms / 5,000 ms
コード長 2,370 bytes
コンパイル時間 804 ms
コンパイル使用メモリ 31,744 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-07-06 15:17:38
合計ジャッジ時間 2,546 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,816 KB
testcase_01 AC 1 ms
6,944 KB
testcase_02 AC 1 ms
6,940 KB
testcase_03 AC 3 ms
6,944 KB
testcase_04 AC 1 ms
6,944 KB
testcase_05 AC 1 ms
6,944 KB
testcase_06 AC 1 ms
6,944 KB
testcase_07 AC 1 ms
6,940 KB
testcase_08 AC 50 ms
6,944 KB
testcase_09 AC 50 ms
6,944 KB
testcase_10 AC 0 ms
6,940 KB
testcase_11 AC 1 ms
6,944 KB
testcase_12 AC 1 ms
6,940 KB
testcase_13 AC 51 ms
6,940 KB
testcase_14 AC 49 ms
6,940 KB
testcase_15 AC 47 ms
6,940 KB
testcase_16 AC 51 ms
6,940 KB
testcase_17 AC 55 ms
6,940 KB
testcase_18 AC 17 ms
6,944 KB
testcase_19 AC 32 ms
6,940 KB
testcase_20 AC 68 ms
6,940 KB
testcase_21 AC 68 ms
6,940 KB
testcase_22 AC 72 ms
6,944 KB
testcase_23 AC 69 ms
6,944 KB
testcase_24 AC 49 ms
6,944 KB
testcase_25 AC 55 ms
6,944 KB
testcase_26 AC 59 ms
6,944 KB
testcase_27 AC 58 ms
6,944 KB
testcase_28 AC 61 ms
6,940 KB
testcase_29 AC 61 ms
6,944 KB
testcase_30 AC 1 ms
6,940 KB
testcase_31 AC 1 ms
6,944 KB
testcase_32 AC 1 ms
6,944 KB
testcase_33 AC 1 ms
6,940 KB
testcase_34 AC 1 ms
6,940 KB
testcase_35 AC 1 ms
6,944 KB
testcase_36 AC 1 ms
6,940 KB
testcase_37 AC 1 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<stdio.h>
#include<stdlib.h>

typedef int DequeVal;

typedef struct Deque {
  DequeVal *array;
  size_t front;
  size_t last;
  size_t mask;
} Deque;

Deque* newDeque(void){
  const size_t len=2;
  Deque *d=(Deque *)calloc(len,sizeof(Deque));
  d->array=(DequeVal *)calloc(len,sizeof(DequeVal));
  d->front=d->last=0;
  d->mask=len-1;
  return d;
}

void initDeque(Deque *d){
  d->front=d->last=0;
}

void freeDeque(Deque *d){
  free(d->array);
  free(d);
}

int isEmpty(Deque *d){
  return d->front==d->last;
}

void deque_realloc(Deque *d){
  DequeVal *array=(DequeVal *)calloc(2*(d->mask+1),sizeof(DequeVal));
  size_t k=0;
  for(size_t i=d->front;i!=d->last;i=(i+1)&d->mask) array[k++]=d->array[i];
  free(d->array);
  d->array=array;
  d->front=0;
  d->last=k;
  d->mask=2*d->mask+1;
}

DequeVal pop_front(Deque *d){
  DequeVal res=d->array[d->front];
  d->front=(d->front+1)&d->mask;
  return res;
}

DequeVal pop_back(Deque *d){
  d->last=(d->last+d->mask)&d->mask;
  return d->array[d->last];
}

DequeVal get_front(Deque *d){
  return d->array[d->front];
}

DequeVal get_back(Deque *d){
  return d->array[(d->last+d->mask)&d->mask];
}

void push_front(Deque *d,DequeVal v){
  if(((d->last+1)&d->mask)==d->front){
    deque_realloc(d);
  }
  d->front=(d->front+d->mask)&d->mask;
  d->array[d->front]=v;
}

void push_back(Deque *d,DequeVal v){
  if(((d->last+1)&d->mask)==d->front){
    deque_realloc(d);
  }
  d->array[d->last]=v;
  d->last=(d->last+1)&d->mask;
}

#define POS(i,j,k) (((i)*h+(j))*w+(k))

void run(void){
  int h,w;
  scanf("%d%d",&h,&w);
  int a,sx,sy;
  scanf("%d%d%d",&a,&sx,&sy);
  int b,gx,gy;
  scanf("%d%d%d",&b,&gx,&gy);
  char *board=(char *)calloc(h*w+1,sizeof(char));
  for(int i=0;i<h;i++) scanf("%s",board+i*w);
  const int m=1111;
  char *used=(char *)calloc((m+1)*h*w,sizeof(char));
  Deque *q=newDeque();
  push_back(q,POS(a,sx,sy));
  while(!isEmpty(q)){
    int v=pop_front(q);
    int s=v/(h*w);
    int x=v/w%h;
    int y=v%w;
    if(s==0 || s==m) continue;
    int d[]={-1,0,1,0};
    for(int i=0;i<4;i++){
      int nx=x+d[i];
      int ny=y+d[i^1];
      if(0<=nx && nx<h && 0<=ny && ny<w){
	int ns=s+(board[nx*w+ny]=='*'?1:-1);
	if(used[POS(ns,nx,ny)]) continue;
	used[POS(ns,nx,ny)]=1;
	push_back(q,POS(ns,nx,ny));
      }
    }
  }
  puts(used[POS(b,gx,gy)]?"Yes":"No");
}

int main(void){
  run();
  return 0;
}
0