Submission #112119

#TimeUsernameProblemLanguageResultExecution timeMemory
112119Runtime_error_Jakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
164 ms65528 KiB
#include <bits/stdc++.h>
using namespace std;
const int inf=2e3+9,M=3e4+9;
int n,m;
int building[M],speed[M],dis[inf][inf][2];//dis[building][speed]
bool vis[inf][inf][2];
vector<int> dogs[inf];
struct State{

    int B,S;
    bool Pass;
};
deque<State>q;

int main(){

    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
        scanf("%d%d",building+i,speed+i),building[i]++,dogs[building[i]].push_back(i);

    memset(dis,21,sizeof(dis));

    int goal=building[2];

    dis[building[1]][speed[1]][0]=0;
    q.push_front({building[1],speed[1],0});

    while(!q.empty()){
        State cur=q.front();
        q.pop_front();

        if(vis[cur.B][cur.S][cur.Pass])
            continue;
        vis[cur.B][cur.S][cur.Pass]=1;
        if(cur.B==goal)
            printf("%d\n",dis[cur.B][cur.S][cur.Pass]),exit(0);

        if(!cur.Pass){
            dis[cur.B][cur.S][1]=dis[cur.B][cur.S][0];
            q.push_front({cur.B,cur.S,1});

            for(auto o:dogs[cur.B])
                if(dis[ building[o] ][ speed[o] ] [1] >= dis[ cur.B ] [ cur.S ] [cur.Pass] )
                    dis[ building[o] ][ speed[o] ] [1] = dis[ cur.B ] [ cur.S ] [cur.Pass],
                    q.push_front(  {building[o],speed[o],1} );
            continue;
        }

        if(cur.B+cur.S<=n && dis[ cur.B+cur.S ][ cur.S ][0]> dis[cur.B][cur.S][cur.Pass]+1 )
            dis[ cur.B+cur.S ][ cur.S ][0] = dis[cur.B][cur.S][cur.Pass]+1,
            q.push_back({cur.B+cur.S , cur.S , 0});

        if(cur.B - cur.S >=1 && dis[cur.B-cur.S] [ cur.S ][0] > dis[cur.B] [cur.S] [cur.Pass]+1)
            dis[cur.B-cur.S] [ cur.S ][0] = dis[cur.B] [cur.S] [cur.Pass]+1,
            q.push_back({cur.B-cur.S , cur.S , 0});
    }

    printf("-1\n");
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:17:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&m);
     ~~~~~^~~~~~~~~~~~~~
skyscraper.cpp:19:55: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",building+i,speed+i),building[i]++,dogs[building[i]].push_back(i);
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...