結果
問題 | No.1323 うしらずSwap |
ユーザー |
![]() |
提出日時 | 2020-12-22 18:39:22 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 203 ms / 3,000 ms |
コード長 | 1,497 bytes |
コンパイル時間 | 511 ms |
コンパイル使用メモリ | 33,920 KB |
実行使用メモリ | 18,204 KB |
最終ジャッジ日時 | 2024-11-15 09:44:20 |
合計ジャッジ時間 | 5,706 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 59 |
コンパイルメッセージ
main.c:63:1: warning: return type defaults to 'int' [-Wimplicit-int] 63 | main(){ | ^~~~ main.c: In function 'main': main.c:97:9: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] 97 | printf("%d\n",z>=INF?-1:z); | ^~~~~~ main.c:1:1: note: include '<stdio.h>' or provide a declaration of 'printf' +++ |+#include <stdio.h> 1 | #pragma GCC optimize("Ofast") main.c:97:9: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch] 97 | printf("%d\n",z>=INF?-1:z); | ^~~~~~ main.c:97:9: note: include '<stdio.h>' or provide a declaration of 'printf'
ソースコード
#pragma GCC optimize("Ofast")#pragma GCC target("avx2")char*mmap();char*rp;#define RD(v) v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;}int wy,wx,ay,ax,by,bx,z,len;static inlineint s(int y,int x){return rp[y*(wx+1)+x]=='.';}#define INF (1<<24)typedef int dp_t[1333][1333];dp_t dp1,dp2;struct{int y,x,d;} q[1<<16];int qr,qw;static inlinevoid enq(int y,int x,int d){q[qw].y=y;q[qw].x=x;q[qw].d=d;qw=(qw+1)&(1<<16)-1;}void bfs(int y,int x,int ty,int tx,dp_t dp){for(int y=0;y<wy;++y){for(int x=0;x<wx;++x){dp[y][x]=INF;}}qr=qw=0;int d=0;enq(y,x,d);while(qr!=qw){y=q[qr].y;x=q[qr].x;d=q[qr].d;qr=(qr+1)&(1<<16)-1;if(s(y,x)&&dp[y][x]==INF){dp[y][x]=d;if(!(y==ty&&x==tx)){++d;enq(y-1,x,d);enq(y+1,x,d);enq(y,x-1,d);enq(y,x+1,d);}}}}void f(int y,int x){int d=dp1[y][x]+len+1;z=d!=len*2&&z>d?d:z;}main(){rp=mmap(0l,1l<<28,1,2,0,0ll);RD(wy);RD(wx);RD(ay);--ay;RD(ax);--ax;RD(by);--by;RD(bx);--bx;bfs(ay,ax,0,0,dp1);bfs(by,bx,0,0,dp2);len=dp1[by][bx];z=INF;int n=0;for(int y=0;y<wy;++y){for(int x=0;x<wx;++x){if(s(y,x)){int d=dp1[y][x]+dp2[y][x];if(d==len&&!(y==ay&&x==ax)&&!(y==by&&x==bx)){if(++n==len) z=len;d-=1;}if(s(y-1,x)+s(y+1,x)+s(y,x-1)+s(y,x+1)>2){d+=2;z=z<=d?z:d;}}}}z*=2;bfs(ay,ax,by,bx,dp1);f(by-1,bx);f(by+1,bx);f(by,bx-1);f(by,bx+1);printf("%d\n",z>=INF?-1:z);}