結果
問題 | No.424 立体迷路 |
ユーザー |
![]() |
提出日時 | 2016-09-22 22:28:22 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,937 bytes |
コンパイル時間 | 597 ms |
コンパイル使用メモリ | 85,444 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-05 06:58:55 |
合計ジャッジ時間 | 1,281 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 21 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:70:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 70 | scanf("%d%d",&h,&w); | ~~~~~^~~~~~~~~~~~~~
ソースコード
#include <cstdio>#include <algorithm>#include <stack>#include <queue>#include <deque>#include <vector>#include <string>#include <string.h>#include <cstdlib>#include <ctime>#include <cmath>#include <map>#include <set>#include <iostream>#include <sstream>#include <numeric>#include <cctype>#include <bitset>#include <cassert>#define fi first#define se second#define rep(i,n) for(int i = 0; i < (n); ++i)#define rrep(i,n) for(int i = 1; i <= (n); ++i)#define drep(i,n) for(int i = (n)-1; i >= 0; --i)#define gep(i,g,j) for(int i = g.head[j]; i != -1; i = g.e[i].next)#define each(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++)#define rng(a) a.begin(),a.end()#define maxs(x,y) x = max(x,y)#define mins(x,y) x = min(x,y)#define pb push_back#define sz(x) (int)(x).size()#define pcnt __builtin_popcount#define uni(x) x.erase(unique(rng(x)),x.end())#define snuke srand((unsigned)clock()+(unsigned)time(NULL));#define df(x) int x = in()#define dame { puts("0"); return 0;}#define show(x) cout<<#x<<" = "<<x<<endl;#define PQ(T) priority_queue<T,vector<T>,greater<T> >using namespace std;typedef long long int ll;typedef pair<int,int> P;typedef vector<int> vi;typedef vector<vi> vvi;typedef vector<ll> vl;typedef vector<P> vp;inline int in() { int x; scanf("%d",&x); return x;}inline void priv(vi a) { rep(i,sz(a)) printf("%d%c",a[i],i==sz(a)-1?'\n':' ');}template<typename T>istream& operator>>(istream&i,vector<T>&v){rep(j,sz(v))i>>v[j];return i;}template<typename T>string join(vector<T>&v){stringstream s;rep(i,sz(v))s<<' '<<v[i];return s.str().substr(1);}template<typename T>ostream& operator<<(ostream&o,vector<T>&v){if(sz(v))o<<join(v);return o;}template<typename T1,typename T2>istream& operator>>(istream&i,pair<T1,T2>&v){return i>>v.fi>>v.se;}template<typename T1,typename T2>ostream& operator<<(ostream&o,pair<T1,T2>&v){return o<<v.fi<<","<<v.se;}const int MX = 100005, INF = 1001001001;const ll LINF = 1e18;const double eps = 1e-10;const int di[] = {-1,0,1,0}, dj[] = {0,-1,0,1}; //^<v>//const int di[] = {-1,0,1,-1,1,-1,0,1}, dj[] = {-1,-1,-1,0,0,1,1,1};string s[55];int used[55][55];int main() {int h, w;scanf("%d%d",&h,&w);int si, sj, ti, tj;cin >> si >> sj >> ti >> tj;rep(i,h) cin >> s[i];queue<P> q;--si; --sj; --ti; --tj;q.push(P(si,sj));while (sz(q)) {int i = q.front().fi;int j = q.front().se; q.pop();if (used[i][j]) continue;used[i][j] = 1;rep(v,4) {int ni = i+di[v], nj = j+dj[v];if (ni<0||nj<0||ni>=h||nj>=w) continue;if (abs(s[i][j]-s[ni][nj]) <= 1) {q.push(P(ni,nj));}if (s[i][j] > s[ni][nj]) {ni += di[v]; nj += dj[v];if (ni<0||nj<0||ni>=h||nj>=w) continue;if (s[i][j] == s[ni][nj]) {q.push(P(ni,nj));}}}}if (used[ti][tj]) puts("YES"); else puts("NO");return 0;}