結果
| 問題 | No.3504 Insert Maze |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-20 12:41:10 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,331 bytes |
| 記録 | |
| コンパイル時間 | 2,383 ms |
| コンパイル使用メモリ | 337,940 KB |
| 実行使用メモリ | 26,752 KB |
| 最終ジャッジ日時 | 2026-04-20 12:41:23 |
| 合計ジャッジ時間 | 10,822 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 84 WA * 1 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(void){
int h,w;
cin>>h>>w;
string s[h];
for(int i=0;i<h;i++)cin>>s[i];
s[0][0]='.',s[h-1][w-1]='.';
int mxr=0,mxd=0,mxl=w-1,mxu=h-1;
vector<int>vis(h*w,-1);
queue<int>q;
q.push(0);
vis[0]=1;
const int dir[5]={0,1,0,-1,0};
while(!q.empty()){
int nowy=q.front()/w,nowx=q.front()%w;
mxr=max(mxr,nowx);
mxd=max(mxd,nowy);
q.pop();
for(int i=0;i<2;i++){
int ny=nowy+dir[i],nx=nowx+dir[i+1];
if(0<=ny&&ny<h&&0<=nx&&nx<w&&s[ny][nx]=='.'&&vis[ny*w+nx]==-1){
q.push(ny*w+nx);
vis[ny*w+nx]=1;
}
}
}
if(vis[h*w-1]==1){
cout<<h+w-2<<endl;
return 0;
}
q.push(h*w-1);
vis[h*w-1]=1;
while(!q.empty()){
int nowy=q.front()/w,nowx=q.front()%w;
mxl=min(mxl,nowx);
mxu=max(mxu,nowy);
q.pop();
for(int i=2;i<4;i++){
int ny=nowy+dir[i],nx=nowx+dir[i+1];
if(0<=ny&&ny<h&&0<=nx&&nx<w&&s[ny][nx]=='.'&&vis[ny*w+nx]==-1){
q.push(ny*w+nx);
vis[ny*w+nx]=1;
}
}
}
if(mxr+1>=mxl||mxd+1>=mxu){
cout<<h+w-1<<endl;
}else{
cout<<h+w<<endl;
}
return 0;
}