結果
| 問題 | No.367 ナイトの転身 |
| コンテスト | |
| ユーザー |
omu
|
| 提出日時 | 2016-04-29 23:08:52 |
| 言語 | C++11 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 15 ms / 2,000 ms |
| コード長 | 3,083 bytes |
| 記録 | |
| コンパイル時間 | 653 ms |
| コンパイル使用メモリ | 120,436 KB |
| 実行使用メモリ | 8,064 KB |
| 最終ジャッジ日時 | 2026-04-20 12:35:48 |
| 合計ジャッジ時間 | 1,800 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
コンパイルメッセージ
In file included from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/x86_64-pc-linux-gnu/bits/c++allocator.h:33,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/allocator.h:46,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/string:45,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/locale_classes.h:42,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/ios_base.h:43,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/ios:46,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/ostream.h:43,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/ostream:42,
from /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/iostream:43,
from main.cpp:2:
In member function 'void std::__new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = State; _Args = {State}; _Tp = State]',
inlined from 'static void std::allocator_traits<std::allocator<_CharT> >::construct(allocator_type&, _Up*, _Args&& ...) [with _Up = State; _Args = {State}; _Tp = State]' at /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/alloc_traits.h:674:17,
inlined from 'void std::deque<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {State}; _Tp = State; _Alloc = std::allocator<State>]' at /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/deque.tcc:170:30,
inlined from 'void std::deque<_Tp, _Alloc>::push_back(value_type&&) [with _Tp = State; _Alloc = std::allocator<State>]' at /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.0_1/include/c++/15/bits/stl_deque.h:1621:21,
inlined from 'void std::queue<_Tp, _Sequence>::push(value_type&&) [with _Tp = State; _Sequence = std::deque<State, std::allocator<State> >]' at /home/linuxbrew/.linuxbrew/Cellar/gcc/15.2.
ソースコード
#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <string>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <functional>
#include <queue>
#include <stack>
#include <cmath>
#include <iomanip>
#include <list>
#include <tuple>
#include <bitset>
#include <ciso646>
#include <cassert>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<ll, ll> P;
typedef tuple<ll, ll, ll> T;
typedef vector<ll> vec;
inline bool check(ll x, ll y, ll xMax, ll yMax) { return x >= 0 && y >= 0 && xMax > x && yMax > y; }
inline int toint(string s) { int v; istringstream sin(s); sin >> v; return v; }
template<class T> inline string tostring(T x) { ostringstream sout; sout << x; return sout.str(); }
template<class T> inline T sqr(T x) { return x*x; }
template<class T> inline T mypow(T x, ll n) { T res = 1; while (n > 0) { if (n & 1)res = res * x; x = x * x; n >>= 1; }return res; }
inline ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }
inline ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
#define For(i,a,b) for(ll (i) = (a);i < (b);(i)++)
#define rep(i,n) For(i,0,n)
#define rFor(i,a,b) for(ll (i) = (a-1);i >= (b);(i)--)
#define rrep(i,n) rFor(i,n,0)
#define each(i,n) for(auto &i : n)
#define clr(a) memset((a), 0 ,sizeof(a))
#define mclr(a) memset((a), -1 ,sizeof(a))
#define all(a) (a).begin(),(a).end()
#define sz(a) (sizeof(a))
#define tostr(a) tostring(a)
#define dump(val) cerr << #val " = " << val << endl;
#define Fill(a,v) fill((int*)a,(int*)(a+(sz(a)/sz(*(a)))),v)
const ll dx[8] = { 1, 0, -1, 0, 1, 1, -1, -1 }, dy[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
const ll mod = 1e9 + 7;
const ll INF = 1e17 + 9;
#define int ll
#define double ld
int dp[501][501][2];
struct State {
int y, x, mode;
State(int y,int x,int mode)
: y(y)
, x(x)
, mode(mode){}
};
signed main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
int h, w;
cin >> h >> w;
int sx, sy, gx, gy;
vector<string> s(h);
rep(y, h) {
cin >> s[y];
rep(x, w) {
if (s[y][x] == 'S') {
sy = y, sx = x;
}
if (s[y][x] == 'G') {
gy = y, gx = x;
}
if (s[y][x] != 'R') {
s[y][x] = '.';
}
}
}
int dy[2][8] = {
{1,1,2,2,-1,-1,-2,-2},
{1,1,-1,-1}
};
int dx[2][8] = {
{2,-2,1,-1,2,-2,1,-1},
{1,-1,1,-1}
};
Fill(dp, INF);
queue<State> q;
q.push(State(sy, sx, 0));
dp[sy][sx][0] = 0;
while (q.size()) {
auto y = q.front().y;
auto x = q.front().x;
auto mode = q.front().mode;
q.pop();
rep(i, (mode == 0 ? 8 : 4)) {
int ty = y + dy[mode][i], tx = x + dx[mode][i];
if (check(tx, ty, w, h)) {
int nextMode;
if (s[ty][tx] == 'R') {
nextMode = 1 - mode;
}
else {
nextMode = mode;
}
if (dp[ty][tx][nextMode] > dp[y][x][mode] + 1) {
dp[ty][tx][nextMode] = dp[y][x][mode] + 1;
q.push(State(ty, tx, nextMode));
}
}
}
}
int ans = min(dp[gy][gx][0], dp[gy][gx][1]);
if (ans == INF)ans = -1;
cout << ans << endl;
return 0;
}
omu