結果
問題 | No.367 ナイトの転身 |
ユーザー | raven_38_ |
提出日時 | 2016-04-30 00:36:05 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 470 ms / 2,000 ms |
コード長 | 2,177 bytes |
コンパイル時間 | 687 ms |
コンパイル使用メモリ | 89,992 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-04 23:37:50 |
合計ジャッジ時間 | 2,616 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 3 ms
6,816 KB |
testcase_01 | AC | 2 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 4 ms
6,816 KB |
testcase_04 | AC | 3 ms
6,820 KB |
testcase_05 | AC | 2 ms
6,816 KB |
testcase_06 | AC | 3 ms
6,816 KB |
testcase_07 | AC | 3 ms
6,816 KB |
testcase_08 | AC | 5 ms
6,820 KB |
testcase_09 | AC | 3 ms
6,816 KB |
testcase_10 | AC | 311 ms
6,816 KB |
testcase_11 | AC | 470 ms
6,816 KB |
testcase_12 | AC | 30 ms
6,816 KB |
testcase_13 | AC | 39 ms
6,820 KB |
testcase_14 | AC | 118 ms
6,816 KB |
testcase_15 | AC | 4 ms
6,816 KB |
testcase_16 | AC | 117 ms
6,816 KB |
testcase_17 | AC | 19 ms
6,816 KB |
testcase_18 | AC | 26 ms
6,820 KB |
testcase_19 | AC | 23 ms
6,816 KB |
testcase_20 | AC | 6 ms
6,816 KB |
testcase_21 | AC | 25 ms
6,820 KB |
testcase_22 | AC | 3 ms
6,816 KB |
testcase_23 | AC | 3 ms
6,820 KB |
testcase_24 | AC | 5 ms
6,816 KB |
testcase_25 | AC | 4 ms
6,816 KB |
testcase_26 | AC | 3 ms
6,820 KB |
ソースコード
#include <iostream> #include <sstream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <ctime> #include <vector> #include <string> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <functional> #include <algorithm> using namespace std; #define rep(i,j) REP((i), 0, (j)) #define REP(i,j,k) for(int i=(j);(i)<(k);++i) #define BW(a,x,b) ((a)<=(x)&&(x)<=(b)) #define ALL(v) (v).begin(), (v).end() #define LENGTHOF(x) (sizeof(x) / sizeof(*(x))) #define AFILL(a, b) fill((int*)a, (int*)(a + LENGTHOF(a)), b) #define SQ(x) ((x)*(x)) #define Mod(x, mod) (((x)+(mod)%(mod)) #define MP make_pair #define PB push_back #define Fi first #define Se second #define INF (1<<29) #define EPS 1e-10 #define MOD 1000000007 typedef pair<int, int> pi; typedef pair<int, pi> pii; typedef pair<pi, pi>pipi; typedef vector<int> vi; typedef queue<int> qi; typedef long long ll; int dc[2]={8,4}; int dx[2][8]={{-2,-1,1,2,2,1,-1,-2},{-1,1,1,-1}}; int dy[2][8]={{-1,-2,-2,-1,1,2,2,1},{-1,1,-1,1}}; int dp[2][512][512]; int H, W; string m[512]; int dfs(int c, int x, int y){ // cout << c << " " << x << " " << y << endl; if(m[x][y] == 'G') return 0; if(m[x][y] == 'R') c = 1-c; int ret = INF; rep(d,dc[c]){ } return ret; } int main() { rep(i, 2) rep(j, 512) rep(k, 512) dp[i][j][k] = INF; cin >> H >> W; rep(i, H) cin >> m[i]; int x=0,y=0; rep(i, H) rep(j, W) if(m[i][j] == 'S'){ x = i; y = j; } priority_queue<pipi, vector<pipi>, greater<pipi> >PQ; // dp[0][x][y] = 0; PQ.push(pipi(pi(0, 0), pi(x, y))); while(!PQ.empty()){ pipi p = PQ.top(); PQ.pop(); int t = p.first.first, c = p.first.second; x = p.second.first, y = p.second.second; if(dp[c][x][y] <= t) continue; // cout << t << " " << c << " " << x << " " << y << endl; dp[c][x][y] = t; if(m[x][y] == 'G'){ cout << t << endl; return 0; } if(m[x][y] == 'R') c = 1-c; rep(d,dc[c]){ int nx=x+dx[c][d], ny=y+dy[c][d]; if(nx < 0 || nx >= H || ny < 0 || ny >= W) continue; PQ.push(pipi(pi(t+1,c), pi(nx,ny))); } } cout << -1<< endl; return 0; }