이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |