Submission #252478

#TimeUsernameProblemLanguageResultExecution timeMemory
252478eohomegrownappsRail (IOI14_rail)C++14
0 / 100
75 ms636 KiB
#include "rail.h"
#include <bits/stdc++.h>
using namespace std;
int n;

//int getDistance(int i, int j);

void findLocation(int N, int first, int location[], int stype[]){
    //1: lhs (up-down)
    //2: rhs (down-up)
    n=N;
    location[0]=first;
    stype[0]=1;
    if (n==1){
        return;
    }
    vector<pair<int,int>> distfrom0(n-1);
    for (int i = 1; i<n; i++){
        distfrom0[i-1]={getDistance(0,i),i};
    }
    sort(distfrom0.begin(),distfrom0.end());
    int elrightof0 = distfrom0[0].second;
    int furthest = distfrom0[n-2].second;
    vector<pair<int,int>> distfromend;
    distfromend.push_back({0,furthest});
    //cout<<"furthest: "<<furthest<<'\n';
    for (int i = 0; i<n; i++){
        if (i==furthest){continue;}
        int gd = getDistance(furthest,i);
        //cout<<i<<": "<<gd<<'\n';
        distfromend.push_back({gd,i});
    }
    sort(distfromend.begin(),distfromend.end());

    vector<int> distarr(n);
    vector<int> indarr(n);
    for (int i = 0; i<n; i++){
        distarr[i]=distfromend[i].first;
        indarr[i]=distfromend[i].second;
    }
    int pos0 = find(indarr.begin(),indarr.end(),0)-indarr.begin();
    int posright = find(distarr.begin(),distarr.end(),elrightof0)-distarr.begin();
    if (posright<pos0){
        reverse(distarr.begin(), distarr.end());
        reverse(indarr.begin(), indarr.end());
        pos0=n-1-pos0;
    }
    //cout<<"dist\n";
    //for (int i = 0; i<n; i++){
        //cout<<distarr[i]<<" "<<indarr[i]<<'\n';
    //}
    //cout<<pos0<<'\n';
    for (int i = pos0; i<n-1; i++){
        //from i+1 to i
        location[indarr[i+1]]=location[indarr[i]]+abs(distarr[i+1]-distarr[i]);
        int dist = getDistance(indarr[i+1],indarr[0]);
        /*if (dist==abs(distarr[i+1]-distarr[0])){
            stype[indarr[i+1]]=2;
        } else {
            stype[indarr[i+1]]=1;
        }*/
        stype[indarr[i+1]]=2;
    }
    //cout<<"ans\n";
    for (int i = pos0-1; i>=0; i--){
        //from i to i+1
        //cout<<"proc "<<indarr[i]<<'\n';
        location[indarr[i]]=location[indarr[i+1]]-abs(distarr[i]-distarr[i+1]);
        int dist = getDistance(indarr[i],indarr[n-1]);
        /*if (dist==abs(distarr[i+1]-distarr[n-1])){
            stype[indarr[i]]=1;
        } else {
            stype[indarr[i]]=2;
        }*/
        stype[indarr[i]]=1;
    }
    //for (int i = 0; i<n; i++){
        //cout<<location[i]<<" "<<stype[i]<<'\n';
    //}
    return;
}

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:56:13: warning: unused variable 'dist' [-Wunused-variable]
         int dist = getDistance(indarr[i+1],indarr[0]);
             ^~~~
rail.cpp:69:13: warning: unused variable 'dist' [-Wunused-variable]
         int dist = getDistance(indarr[i],indarr[n-1]);
             ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...