제출 #610757

#제출 시각아이디문제언어결과실행 시간메모리
610757nohaxjustsofloJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1086 ms18948 KiB
#include <bits/stdc++.h> #include <iostream> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; typedef tree<ll,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> order_set; mt19937 mt_rand(chrono::high_resolution_clock::now().time_since_epoch().count()); //uniform_int_distribution<int> gen; ///(min, max) //int random() {return gen(mt_rand);} #pragma GCC target("popcnt") const int mxN=30001; const int mod=998244353; const int mxlogN=40; const int mxK=26; const int inf=1e9; const int K=600; vector<int> who[mxN]; int n, m, a[mxN], b[mxN]; vector<int> who2[mxN]; vector<int> have; int pos(int x, int p) { x+=(p-1)*n; return lower_bound(have.begin(),have.end(),x)-have.begin(); } bool vis[6000000]; vector<pair<int,int>> q, q2; void ins(int x, int p) { int id=pos(x,p); if(vis[id]) return; q.push_back({x,p}); vis[pos(x,p)]=1; } void ins2(int x, int p) { int id=pos(x,p); if(vis[id]) return; q2.push_back({x,p}); vis[pos(x,p)]=1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for(int i=0; i<m; i++) cin >> a[i] >> b[i]; for(int i=0; i<m; i++) { who[a[i]].push_back(b[i]); who2[b[i]].push_back(a[i]%b[i]); } for(int i=1; i<mxN; i++) { sort(who2[i].begin(),who2[i].end()); who2[i].erase(unique(who2[i].begin(),who2[i].end()),who2[i].end()); for(int k=0; k*i<n; k++) { for(int j:who2[i]) { if(j+k*i<n) have.push_back((i-1)*n+j+k*i); } } } int sz=have.size(); if(sz>=6000000) return 1; ins(a[0],b[0]); int d=0; while(q.size()) { int szz=q.size(); for(int o=0; o<szz; o++) { int x=q[o].first; if(x==a[1]) { cout << d << "\n"; return 0; } for(int p:who[x]) ins(x,p); who[x].clear(); } szz=q.size(); for(int o=0; o<szz; o++) { auto par=q[o]; int x=par.first, p=par.second; if(x-p>=0) ins2(x-p,p); if(x+p<n) ins2(x+p,p); } q=q2; q2.clear(); d++; } cout << "-1" << "\n"; 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...