結果
問題 | No.124 門松列(3) |
ユーザー |
![]() |
提出日時 | 2015-08-17 23:47:15 |
言語 | C++11 (gcc 13.3.0) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,088 bytes |
コンパイル時間 | 1,370 ms |
コンパイル使用メモリ | 168,120 KB |
実行使用メモリ | 814,568 KB |
最終ジャッジ日時 | 2024-07-18 10:05:53 |
合計ジャッジ時間 | 8,575 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 4 |
other | MLE * 1 -- * 25 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;i++) int bfs[4][100][100]; bool ok(int a,int b,int c){ if(a==b||b==c||c==a) return false; if(a<b&&c<b) return true; if(a>b&&c>b) return true; return false; } int main(){ int w,h; cin>>w>>h; int m[h][w]; rep(i,h) rep(j,w) cin>>m[i][j]; rep(i,4) rep(j,h) rep(k,w) bfs[i][j][k]=1<<30; bfs[2][0][1]=1; bfs[0][1][0]=1; int mx[]={1,0,0,-1}; int my[]={0,-1,1,0}; queue<tuple<int,int,int,int>> q; q.push(make_tuple(0,1,m[0][0],2)); q.push(make_tuple(1,0,m[0][0],0)); while(!q.empty()){ auto crt=q.front(); q.pop(); int y=get<0>(crt); int x=get<1>(crt); int before=get<2>(crt); int from=get<3>(crt); rep(i,4){ if((from^3)==i) continue; if(0>y+my[i]||y+my[i]>=h||0>x+mx[i]||x+mx[i]>=w) continue; if(ok(before,m[y][x],m[y+my[i]][x+mx[i]])){ bfs[i][y+my[i]][x+mx[i]]=bfs[from][y][x]+1; q.push(make_tuple(y+my[i],x+mx[i],m[y][x],i)); } } rep(i,4){ if(bfs[i][h-1][w-1]!=1<<30){ cout<<bfs[i][h-1][w-1]<<endl; return 0; } } } cout<<-1<<endl; return 0; }