結果

問題 No.367 ナイトの転身
ユーザー raven_38_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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0