제출 #335258

#제출 시각아이디문제언어결과실행 시간메모리
335258hivakaramiJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
899 ms3808 KiB
#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long int ll;
typedef long double doublel;
#define f first
#define s second
 
const int N = 3e4 + 100;
const ll mod = 1e9 + 9;	
const int inf = 1e8;	

int dis[N];
vector<int> adj[N];
priority_queue<pair<int, int>> q;

int main()
{
    ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);	

	int n, m, z, y;
	scanf("%d %d", &n, &m);
	
	for(int i = 0; i < m; i++)
	{
		int p, b;
		scanf("%d %d", &b, &p);
		adj[b].push_back(p);
		
		if(i == 0)
			z = b;
		else if(i == 1)
			y = b;
	}
	
	for(int i = 0; i < n; i++)	
		dis[i] = inf;
	dis[z] = 0;
	
	q.push({0, z});	
	
	while(!q.empty())
	{	
		int x = q.top().s;
		q.pop();
		
		for(auto p : adj[x])
		{
			int c = 1;
			for(int i = x+p; i < n; i += p)
			{
				if(dis[i] > dis[x] + c)
				{
					dis[i] = dis[x] + c;
					if(y != i) q.push({-dis[i], i});
				}
				
				c++;
			}
			c = 1;	
			for(int i = x-p; i >= 0; i -= p)
			{
				if(dis[i] > dis[x] + c)
				{
					dis[i] = dis[x] + c;
					if(y != i) q.push({-dis[i], i});
				}
				
				c++;
			}
		}
		
	}
	
	
	if(dis[y] >= inf)
		dis[y] = -1;
	printf("%d \n", dis[y]);	
	
	
	

    return 0;
}

 
 	





 

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

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:23:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   23 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:28:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   28 |   scanf("%d %d", &b, &p);
      |   ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:22:12: warning: 'z' may be used uninitialized in this function [-Wmaybe-uninitialized]
   22 |  int n, m, z, y;
      |            ^
skyscraper.cpp:79:8: warning: 'y' may be used uninitialized in this function [-Wmaybe-uninitialized]
   79 |  printf("%d \n", dis[y]);
      |  ~~~~~~^~~~~~~~~~~~~~~~~
#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...