제출 #676069

#제출 시각아이디문제언어결과실행 시간메모리
676069KeshiJakarta Skyscrapers (APIO15_skyscraper)C++17
10 / 100
930 ms262144 KiB
//In the name of God #include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const ll maxn = 3e4 + 100; const int maxm = 1e7; const ll mod = 1e9 + 7; const ll inf = 1e18; const int lg = 11; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout); #define pb push_back #define Mp make_pair #define F first #define S second #define Sz(x) int((x).size()) #define all(x) (x).begin(), (x).end() ll pw(ll a, ll b){ ll c = 1; while(b){ if(b & 1) c = c * a % mod; a = a * a % mod; b >>= 1; } return c; } bool vis[maxm]; int n, m, start, goal, dis; bool vs[maxn]; vector<int> vec[maxn]; vector<int> q, qu; void add(int v){ if(0 > v || v >= m || vs[v]) return; if(v == goal){ cout << dis; exit(0); } for(int x : vec[v]){ vis[(x << lg) | v] = 1; q.pb((x << lg) | v); } return; } int main(){ fast_io; cin >> m >> n; for(int i = 0; i < n; i++){ int v, x; cin >> v >> x; if(i == 0) start = v; if(i == 1) goal = v; vec[v].pb(x); } add(start); while(!q.empty()){ dis++; qu = q; q.clear(); for(int i : qu){ int x = (i >> lg); int v = (i ^ (x << lg)); add(v - x); add(v + x); if(v + x < m && !vis[(x << lg) | (v + x)]){ vis[(x << lg) | (v + x)] = 1; q.pb((x << lg) | (v + x)); } if(0 < v - x && !vis[(x << lg) | (v - x)]){ vis[(x << lg) | (v - x)] = 1; q.pb((x << lg) | (v - x)); } } } cout << -1; return 0; }
#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...