제출 #472053

#제출 시각아이디문제언어결과실행 시간메모리
472053hhhhauraJakarta Skyscrapers (APIO15_skyscraper)C++14
22 / 100
103 ms166068 KiB
#define wiwihorz #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #pragma loop-opt(on) #define rep(i, a, b) for(int i = a; i <= b; i ++) #define rrep(i, a, b) for(int i = b; i >= a; i --) #define all(x) x.begin(), x.end() #define ceil(a, b) ((a + b - 1) / (b)) #define INF 1000000000 using namespace std; #define pii pair<int, int> namespace solver { const int P = 6000000; const int K = 174; int n, m, st, ed, ii; vector<int> dis, s; vector<pair<int, bool>> mp[P]; vector<int> a[K][K]; void init_(int _n, int _m) { n = _n, m = _m, ii = n - 1; s.clear(); dis.assign(P, INF); } void get_new() { ii++; if(ii >= P) while(1); } void add_node(int pos, int b) { for(int i = pos % b; i < n; i += b) { get_new(); if(i == pos) mp[i].push_back({ii, 0}); if(i < pos % b) mp[ii].push_back({ii - 1, 1}); else if(i > pos % b) mp[ii - 1].push_back({ii, 1}); mp[ii].push_back({i, 0}); } } int solve() { rep(i, 1, K - 1) rep(j, 0, i - 1) { if(!a[i][j].size()) continue; sort(all(a[i][j])); vector<int> &v = a[i][j]; int id = -1; for(int k = j; k < n; k += i) { get_new(); while(id + 1 < v.size() && v[id + 1] <= k) id ++; if(id >= 0 && v[id] == k) mp[k].push_back({ii, 0}); if(k != j) { mp[ii].push_back({ii - 1, 1}); mp[ii - 1].push_back({ii, 1}); } mp[ii].push_back({k, 0}); } } dis[st] = 0; deque<int> q; q.push_back(st); while(q.size()) { int cur = q.front(); q.pop_front(); for(auto i : mp[cur]) if(dis[i.first] == INF) { dis[i.first] = i.second + dis[cur]; if(i.second) q.push_back(i.first); else q.push_front(i.first); if(i.first == ed) return dis[ed]; } } return (dis[ed] == INF ? -1 : dis[ed]); } }; using namespace solver; signed main() { ios::sync_with_stdio(false), cin.tie(0); int n, m, b, p; cin >> n >> m; init_(n, m); rep(i, 0, m - 1) { cin >> b >> p; if(i == 0) st = b; if(i == 1) ed = b; if(p >= K) add_node(b, p); else a[p][b % p].push_back(b); } cout << solve() << "\n"; return 0; }

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

skyscraper.cpp:4: warning: ignoring '#pragma loop ' [-Wunknown-pragmas]
    4 | #pragma loop-opt(on)
      | 
skyscraper.cpp: In function 'int solver::solve()':
skyscraper.cpp:47:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     while(id + 1 < v.size() && v[id + 1] <= k) id ++;
      |           ~~~~~~~^~~~~~~~~~
#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...