Submission #1202686

#TimeUsernameProblemLanguageResultExecution timeMemory
1202686hackstarJakarta Skyscrapers (APIO15_skyscraper)C++20
22 / 100
6 ms2632 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() const long long inf=1e18; typedef unsigned long long ull; struct pair_hash{ static ull splitmix64(ull x){ x+=0x9e3779b97f4a7c15; x=(x^(x>>30))*0xbf58476d1ce4e5b9; x=(x^(x>>27))*0x94d049bb133111eb; return x^(x>>31); } size_t operator()(const pair<int,int>&p)const{ static const ull r=chrono::steady_clock::now().time_since_epoch().count(); ull k=(ull(p.first)<<32)|unsigned(p.second); return splitmix64(k+r); } }; void solve(){ int n,m; cin>>n>>m; vector<pair<int,int>>a(m); for(int i=0;i<m;i++){ cin>>a[i].first>>a[i].second; } vector<vector<int>>in(n); for(int i=0;i<m;i++){ in[a[i].first].push_back(i); } vector<int>pos(2); pos[0]=a[0].first;pos[1]=a[1].first; unordered_map<pair<int,int>,int,pair_hash>dp; unordered_set<pair<int,int>,pair_hash>vis; dp.reserve(n*2);vis.reserve(n*2); auto dfs=[&](auto self,int id,int power)->int{ if(id==pos[1])return 0; auto key=make_pair(id,power); if(dp.count(key))return dp[key]; if(vis.count(key))return inf; vis.insert(key); int best=inf; if(id+power>=0&&id+power<n){ int r=self(self,id+power,power); if(r<inf)best=min(best,r+1); } if(id-power>=0&&id-power<n){ int r=self(self,id-power,power); if(r<inf)best=min(best,r+1); } for(int idx:in[id]){ int np=a[idx].second; if(np==power)continue; int r=self(self,id,np); if(r<inf)best=min(best,r); } vis.erase(key); return dp[key]=best; }; int ans=dfs(dfs,pos[0],a[0].second); cout<<(ans>=inf?-1:ans)<<"\n"; } signed main(){ ios::sync_with_stdio(false); cin.tie(NULL); int t=1; while(t--)solve(); 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...