結果
問題 | No.340 雪の足跡 |
ユーザー |
![]() |
提出日時 | 2016-01-29 23:37:22 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 396 ms / 1,000 ms |
コード長 | 4,176 bytes |
コンパイル時間 | 1,310 ms |
コンパイル使用メモリ | 168,604 KB |
実行使用メモリ | 70,016 KB |
最終ジャッジ日時 | 2024-09-21 18:47:10 |
合計ジャッジ時間 | 7,552 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 32 |
コンパイルメッセージ
main.cpp: In function ‘std::ostream& operator<<(std::ostream&, const std::tuple<_Tps ...>&)’: main.cpp:163:1: warning: no return statement in function returning non-void [-Wreturn-type] 163 | } | ^ main.cpp: In function ‘ll in()’: main.cpp:121:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 121 | scanf("%lld", &x); | ~~~~~^~~~~~~~~~~~
ソースコード
// template {{{#include <bits/stdc++.h>using namespace std;// #define int long long#define GET_MACRO(a, b, c, d, NAME, ...) NAME#define REP2(i, n) REP3(i, 0, n)#define REP3(i, a, b) REP4(i, a, b, 1)#define REP4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += s)#define RREP2(i, n) RREP3(i, 0, n)#define RREP3(i, a, b) for (ll i = (b) - 1; i >= (ll)(a); i--)#define rep(...) GET_MACRO(__VA_ARGS__, REP4, REP3, REP2)(__VA_ARGS__)#define rrep(...) GET_MACRO(__VA_ARGS__,, RREP3, RREP2)(__VA_ARGS__)#define eb emplace_back#define ef emplace_front#define pb pop_back#define pf pop_front#define all(c) begin(c), end(c)#define mp make_pair#define mt make_tuple#define fi first#define se second#define popcnt __builtin_popcountll#ifdef DEBUG#define dump(x) cerr << "line " << __LINE__ << " : " << #x " = " << x << endl;#else#define dump(x)#endifusing uint = unsigned;using ll = long long;using ull = unsigned long long;using ld = long double;using vi = vector<int>;using vvi = vector<vi>;template<typename T>using maxheap = priority_queue<T, vector<T>, less<T>>;template<typename T>using minheap = priority_queue<T, vector<T>, greater<T>>;const int INF = 1e9 + 10;const ll LLINF = 1e18 + 10;const int dx[] = {-1, 0, 1, 0, -1, 1, 1, -1};const int dy[] = {0, -1, 0, 1, -1, -1, 1, 1};template<typename T>inline T sq(T x){return x * x;}template<typename T, typename U>inline bool chmax(T &x, U y){if (x >= y) return false;x = y;return true;}template<typename T, typename U>inline bool chmin(T &x, U y){if (x <= y) return false;x = y;return true;}template<typename T>inline T& sort(T &c){sort(all(c));return c;}template<typename T>inline T& reverse(T &c){reverse(all(c));return c;}template<typename T>inline T& unique(T &c){sort(all(c));c.erase(unique(all(c)), end(c));return c;}template<typename T>inline T sorted(const T &c){T d = c;return move(sort(d));}template<typename T>inline T reversed(const T &c){T d = c;return move(reverse(d));}template<typename T>inline T uniqued(const T &c){T d = c;return move(unique(d));}ll modpow(ll x, ll e, ll mod = 1000000007){ll res = 1;e %= mod - 1;while (e){if (e & 1) res = res * x;x = x * x;e >>= 1;}return res;}inline ll in(){ll x;scanf("%lld", &x);return x;}inline double inD(){double x;scanf("%lf", &x);return x;}inline string inS(){static char s[1024];scanf("%s", s);return s;}pair<ll, ll> rot45(ll x, ll y){return mp(x + y, x - y);}pair<ll, ll> rot45inv(ll u, ll v){return mp((u + v) / 2, (u - v) / 2);}template<typename T, size_t N>struct print_tuple {static void print(const T &t, ostream &os){print_tuple<T, N - 1>::print(t, os);os << " " << get<N - 1>(t);}};template<typename T>struct print_tuple<T, 1> {static void print(const T &t, ostream &os){os << get<0>(t);}};template<typename ...Args>ostream& operator<<(ostream &os, const tuple<Args...> &t){print_tuple<tuple<Args...>, tuple_size<tuple<Args...>>::value>::print(t, os);}// }}}vector<int> g[1000000];int a[1010][1010], b[1010][1010];int dist[1000000];int main(){int w = in(), h = in(), n = in();rep(i, n){int m = in();vector<int> bb(m + 1);rep(j, m + 1) bb[j] = in();rep(j, m){int x = bb[j] / w, y = bb[j] % w;int xx = bb[j + 1] / w, yy = bb[j + 1] % w;if (mt(x, y) > mt(xx, yy)){swap(x, xx);swap(y, yy);}if (x == xx){a[x][y]++;a[xx][yy]--;}else {b[x][y]++;b[xx][yy]--;}}}rep(i, 1000) rep(j, 1000){if (a[i][j]){int s = i * w + j;int t = i * w + j + 1;g[s].eb(t);g[t].eb(s);}if (b[i][j]){int s = i * w + j;int t = (i + 1) * w + j;g[s].eb(t);g[t].eb(s);}a[i][j + 1] += a[i][j];b[i + 1][j] += b[i][j];}memset(dist, -1, sizeof(dist));queue<int> q;dist[0] = 0;q.push(0);while (q.size()){int v = q.front(); q.pop();for (int to : g[v]){if (~dist[to]) continue;dist[to] = dist[v] + 1;q.push(to);}}if (~dist[w * h - 1]) cout << dist[w * h - 1] << endl;else cout << "Odekakedekinai..\n";}