제출 #625081

#제출 시각아이디문제언어결과실행 시간메모리
625081HanksburgerJakarta Skyscrapers (APIO15_skyscraper)C++17
10 / 100
1 ms340 KiB
#include <bits/stdc++.h>
using namespace std;
queue<pair<pair<int, int>, int> > q;
int A[30005], B[30005], C[30005];
map<pair<int, int>, bool> mp;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m;
    cin >> n >> m;
    for (int i=0; i<m; i++)
    {
        cin >> A[i] >> B[i];
        C[A[i]]=B[i];
    }
    q.push({{A[0], B[0]}, 0});
    mp[{A[0], B[0]}]=1;
    while (!q.empty())
    {
        int a=q.front().first.first, b=q.front().first.second, c=q.front().second;
        q.pop();
        if (a==A[1])
        {
            cout << c;
            return 0;
        }
        if (a+b<n)
        {
            if (!mp[{a+b, C[a+b]}])
            {
                q.push({{a+b, C[a+b]}, c+1});
                mp[{a+b, C[a+b]}]=1;
            }
            if (!mp[{a+b, b}])
            {
                q.push({{a+b, b}, c+1});
                mp[{a+b, b}]=1;
            }
        }
        if (a-b>=0)
        {
            if (!mp[{a-b, C[a-b]}])
            {
                q.push({{a-b, C[a-b]}, c+1});
                mp[{a-b, C[a-b]}]=1;
            }
            if (!mp[{a-b, b}])
            {
                q.push({{a-b, b}, c+1});
                mp[{a-b, b}]=1;
            }
        }
    }
    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...