Submission #1152921

#TimeUsernameProblemLanguageResultExecution timeMemory
1152921AlgorithmWarriorJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
195 ms112312 KiB
#include <bits/stdc++.h>

using namespace std;

int const MAX=30005;
int n,m;
int pos[MAX],pas[MAX];
bitset<MAX>vis[MAX];
bool Vis[MAX];
vector<int>puteri[MAX];

void read(){
    cin>>n>>m;
    int i;
    for(i=0;i<m;++i){
        cin>>pos[i]>>pas[i];
        puteri[pos[i]].push_back(pas[i]);
    }
}

struct traseu{
    int poz,power,len;
};

int bfs(){
    int pos0=pos[0];
    int pos1=pos[1];
    queue<traseu>q;
    for(auto put : puteri[pos0]){
        q.push({pos0,put,0});
        vis[pos0][put]=1;
    }
    Vis[pos0]=1;
    while(!q.empty()){
        auto [poz,put,len]=q.front();
        q.pop();
        if(poz==pos1)
            return len;
        if(poz-put>=0){
            if(!vis[poz-put][put]){
                vis[poz-put][put]=1;
                q.push({poz-put,put,len+1});
                if(!Vis[poz-put])
                    for(auto puter : puteri[poz-put])
                        if(!vis[poz-put][puter]){
                            vis[poz-put][puter]=1;
                            q.push({poz-put,puter,len+1});
                        }
            }
        }
        if(poz+put<n){
            if(!vis[poz+put][put]){
                vis[poz+put][put]=1;
                q.push({poz+put,put,len+1});
                if(!Vis[poz+put])
                    for(auto puter : puteri[poz+put])
                        if(!vis[poz+put][puter]){
                            vis[poz+put][puter]=1;
                            q.push({poz+put,puter,len+1});
                        }
            }
        }
    }
    return -1;
}

int main()
{
    read();
    cout<<bfs();
    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...