結果
問題 | No.124 門松列(3) |
ユーザー |
|
提出日時 | 2017-09-12 16:49:25 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 17 ms / 5,000 ms |
コード長 | 1,350 bytes |
コンパイル時間 | 937 ms |
コンパイル使用メモリ | 89,492 KB |
実行使用メモリ | 10,880 KB |
最終ジャッジ日時 | 2024-11-07 17:22:12 |
合計ジャッジ時間 | 2,130 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 26 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:18:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 18 | int C, R; scanf("%d%d", &C, &R); | ~~~~~^~~~~~~~~~~~~~~~ main.cpp:22:12: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 22 | scanf("%d", &G[r][c]); | ~~~~~^~~~~~~~~~~~~~~~
ソースコード
#include <iostream>#include <algorithm>#include <queue>#include <tuple>using namespace std;// N E S Wconstexpr array<int, 4> dr = {-1, 0, 1, 0},dc = { 0, 1, 0,-1};constexpr int dr_size = dr.size();bool is_kado(int a, int b, int c) {if(a == 0) { return true; }return a!=c && ((a>b&&b<c) || (a<b&&b>c));}int main(void) {int C, R; scanf("%d%d", &C, &R);vector<vector<int>> G(R, vector<int>(C, 0));for(int r=0; r<R; ++r) {for(int c=0; c<C; ++c) {scanf("%d", &G[r][c]);}}vector<vector<vector<vector<bool>>>> seen(R, vector<vector<vector<bool>>>(C, vector<vector<bool>>(10, vector<bool>(10, false)))); //seen[R][C][10][10]queue<tuple<int, int, int, int, int>> que;que.emplace(0, 0, 0, 0, G[0][0]);while(!que.empty()) {int cnt, r, c, b2, b1; tie(cnt, r, c, b2, b1) = que.front(); que.pop();if(seen[r][c][b2][b1]) { continue; }seen[r][c][b2][b1] = true;if(r == R-1 && c == C-1) {printf("%d\n", cnt);return 0;}for(int i=0; i<dr_size; ++i) {int nr = r + dr[i],nc = c + dc[i];if(!(0 <= nr && nr < R && 0 <= nc && nc < C)) { continue; }if(!is_kado(b2, b1, G[nr][nc])) { continue; }que.emplace(cnt+1, nr, nc, b1, G[nr][nc]);}}puts("-1");return 0;}