Submission #874489

#TimeUsernameProblemLanguageResultExecution timeMemory
874489manizareJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
202 ms262144 KiB
#include <bits/stdc++.h>

#pragma GCC optimize("O3,unroll-loops")
#define pb push_back
#define F first
#define S second 
#define all(a) a.begin(),a.end()
#define pii pair <int,int>
#define PII pair<pii , pii>
#define sz(v) (int)v.size()
using namespace std ;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int maxn = 3e4 + 10 , maxq = 7e6 , sq = 176  ,mod = 1e9 + 7 , inf = 1e9 + 7, lg = 21 ;
int r[maxn][sq + 2] , dis[maxq] , mark[maxq]; ;
vector <pii> G[maxq] ;
signed main(){ 
  	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0) ;
	int n , m ;cin >> n >> m ;
	int cnt = n+1 ;
	for(int i = 0 ; i < n ; i++){
		for(int j=1;j<=sq ; j++){
			G[cnt].pb({i ,0});
			r[i][j] = cnt ;
			if(i >= j){
				G[cnt].pb({r[i-j][j] , 1});
				G[r[i-j][j]].pb({cnt,1});
			}
			cnt++;
		}
	}
	int x0 , x1 ;
	for(int i = 0 ; i < m ; i++){
		int x , p ;
		cin >> x>> p ;
		if(i==0)x0 = x ;
		if(i == 1)x1 =x ;
		if(p == 0)continue ;
		if(p > sq){
			int fake = cnt ;
			cnt++;
			G[x].pb({fake , 0}) ;
			int ls =fake; 
			for(int j = x+p ; j < n ; j+=p){
				G[ls].pb({cnt , 1});
				G[cnt].pb({j,0});
				ls = cnt ;
				cnt++;
			}
			ls = fake ;
			for(int j = x-p ; j >=0 ; j-=p){
				G[ls].pb({cnt , 1});
				G[cnt].pb({j,0});
				ls = cnt ;
				cnt++;
			}
		}else{
			G[x].pb({r[x][p] , 0}); 
		}
	}
	deque <int> d ;
	for(int i = 0; i < cnt ; i++){mark[i] = 0 ;dis[i] = inf ;}
	dis[x0]= 0; 
	d.push_back(x0);
	while(d.size()){
		int v = d.front() ;d.pop_front() ;
		if(mark[v]==1)continue;
		mark[v] = 1;
		for(pii u : G[v]){
			if(dis[u.F] > dis[v]+u.S){
				dis[u.F] = dis[v] + u.S ;
				if(u.S == 1)
				d.push_back(u.F) ;
				else
				d.push_front(u.F) ;
			}
		}
	}
	if(dis[x1] == inf){
		cout << "-1\n";
	}else{
		cout << dis[x1] << "\n"; 
	}
}
/* 
 
 
*/

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:79:11: warning: 'x1' may be used uninitialized in this function [-Wmaybe-uninitialized]
   79 |  if(dis[x1] == inf){
      |     ~~~~~~^
#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...