제출 #107947

#제출 시각아이디문제언어결과실행 시간메모리
107947patrikpavic2Jakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
800 ms225268 KiB
#include <cstdio> #include <cstring> #include <ctime> #include <cstdlib> #include <algorithm> #include <vector> #include <set> #include <map> #include <queue> #include <cstring> #include <deque> #include <unordered_map> #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define X first #define Y second #define PB push_back using namespace std; typedef long long ll; typedef pair < int, int > pii; typedef vector < int > vi; typedef set < int > si; const int N = 3e4 + 500; const int M = 2005; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; const int LOG = 18; const int OFF = (1 << LOG); const double EPS = 1e-9; const double PI = 3.1415926535; int dis1[N][M]; gp_hash_table <int, int> dis2[N]; int en, bio[N], x[N], y[N]; int n, m; vector < int > pot[N]; inline int dis(const int &a,const int &b){ if(b < M) return dis1[a][b]; return dis2[a][b]; } inline void postavi(const int &a,const int &b,const int &c){ if(b < M) dis1[a][b] = c; else dis2[a][b] = c; } deque < pii > q; int main(){ scanf("%d%d", &n, &m); for(int i = 0;i < m;i++){ scanf("%d%d", x + i, y + i); pot[x[i]].PB(y[i]); } postavi(x[0], y[0], 1); q.push_back({x[0], y[0]}); while(!q.empty()){ int cur = q.front().X; int sk = q.front().Y; int moj = dis(cur, sk); //printf("%d %d = %d\n", cur, sk, dis[cur][sk]); q.pop_front(); if(!bio[cur]){ for(int x : pot[cur]){ int nw = dis(cur, x); if((nw == 0 || moj < nw)) q.push_front({cur, x}), postavi(cur, x, moj); } } bio[cur] = 1; if(cur - sk >= 0){ int nw = dis(cur - sk, sk); if(nw == 0 || nw > 1 + moj) q.push_back({cur - sk, sk}), postavi(cur - sk, sk , 1 + moj); } if(cur + sk < n){ int nw = dis(cur + sk, sk); if(nw == 0 || nw > 1 + moj) q.push_back({cur + sk, sk}), postavi(cur + sk, sk , 1 + moj); } } int ans = INF; for(int i = 0;i <= n;i++) if(dis(x[1], i)) ans = min(ans, dis(x[1], i)); if(ans == INF) printf("-1\n"); else printf("%d\n", ans - 1); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:55:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~
skyscraper.cpp:57:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", x + i, y + i);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...