제출 #91551

#제출 시각아이디문제언어결과실행 시간메모리
91551Bodo171Jakarta Skyscrapers (APIO15_skyscraper)C++14
10 / 100
5 ms1668 KiB
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int nmax=2005;
vector<int> v[nmax];
pair<int,int> q[2][nmax*nmax];
int d[nmax][nmax];
int p[2],u[2];
int n,m,i,j,wh,x,cost,use,fin,k;
void prp(int a,int b,int dist,int wh)
{
    if(dist<d[a][b])
    {
        d[a][b]=dist;
        q[wh][++u[wh]]={a,b};
    }
}
int dij()
{
    p[0]=u[0]=1;
    for(cost=0;cost<=n*n;cost++)
    {
        p[1-use]=1;u[1-use]=0;
        while(p[use]<=u[use])
        {
            i=q[use][p[use]].first;j=q[use][p[use]].second;
            ++p[use];
            if(i==fin)
                return cost;
            if(i-j>=0) prp(i-j,j,cost+1,1-use);
            if(i+j<n)  prp(i+j,j,cost+1,1-use);
            for(k=0;k<v[i].size();k++)
                prp(i,v[i][k],cost,use);
        }
        use=1-use;
    }
    return -1;
}
int main()
{
    //freopen("data.in","r",stdin);
    ios_base::sync_with_stdio(false);
    cin>>n>>m;
    for(i=0;i<n;i++)
        for(j=1;j<=n;j++)
          d[i][j]=2*n*n;
    for(i=0;i<n;i++)
    {
        cin>>wh>>x;
        v[wh].push_back(x);
        if(i==0)
           q[0][1]={wh,x},d[wh][x]=0;
        if(i==1)
            fin=wh;
    }
    cout<<dij();
    return 0;
}

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

skyscraper.cpp: In function 'int dij()':
skyscraper.cpp:33:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(k=0;k<v[i].size();k++)
                     ~^~~~~~~~~~~~
#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...