제출 #65375

#제출 시각아이디문제언어결과실행 시간메모리
65375theknife2001Rail (IOI14_rail)C++17
30 / 100
887 ms99848 KiB
#include "rail.h"
#include <bits/stdc++.h>
#define ii pair < int , int >
#define se second
#define fi first


using namespace std;
const int N=5e3+55;
int dist[N][N];
ii a[N];
vector < int > vec;


void findLocation(int n, int zero, int location[], int stype[])
{
    location[0]=zero;
    stype[0]=1;
    int temp;
    for(int i=1;i<n;i++)
    {
        temp=getDistance(0,i);
        a[i-1]={temp,i};
        dist[0][i]=temp;
        dist[i][0]=temp;
    }
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            dist[i][j]=dist[j][i]=getDistance(i,j);
        }
    }
    sort(a,a+n-1);
    int first;
    int second=-1;
    int last;
    int x,y;
    for(int i=0;i<n-1;i++)
    {
        if(!i)
        {
            first=a[i].se;
            last=first;
            location[first]=zero+a[i].fi;
            stype[first]=2;
            continue ;
        }
        x=dist[last][a[i].se];
//        if(first!=last)
//            y=getDistance(first,a[i].se);
        bool k=0;
        for(auto se:vec)
        {
            k|=(dist[se][a[i].se]+dist[first][a[i].se]==a[i].fi);
        }
//        cout<<a[i].se<<' '<<a[i].fi<<' '<<dist[0][first]<<' '<<x<<' '<<dist[first][a[i].se]<<' '<<k<<endl;
        if(x+dist[0][last]==a[i].fi&&!k)
        {
            if(last==first)
                if(dist[0][last]<x)
                        vec.push_back(a[i].se);
            stype[a[i].se]=1;
            location[a[i].se]=location[last]-x;
        }
        else if(x==a[i].fi+dist[0][last])
        {
            last=a[i].se;
            stype[a[i].se]=2;
            location[a[i].se]=zero+a[i].fi;

        }
        else
        {
            if(vec.size()!=0)
            {
                k=0;
                for(auto se:vec)
                {
                    if(dist[a[i].se][se]+dist[first][a[i].se]==a[i].fi)
                    {
                        stype[a[i].se]=2;
                        location[a[i].se]=location[second]+dist[se][a[i].se];
                        k=1;
                        break;
                    }
                }
            }
            if(k)
                continue ;
            vec.push_back(a[i].se);
            stype[a[i].se]=1;
            location[a[i].se]=zero-a[i].fi+2*dist[0][first];
        }
    }
//    cout<<endl;
//    for(int i=0;i<n;i++)
//        cout<<stype[i]<<' '<<location[i]<<endl;
}

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

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:36:9: warning: unused variable 'second' [-Wunused-variable]
     int second=-1;
         ^~~~~~
rail.cpp:38:11: warning: unused variable 'y' [-Wunused-variable]
     int x,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...