Submission #7726

# Submission time Handle Problem Language Result Execution time Memory
7726 2014-08-16T18:59:17 Z dohyun0324 Rail (IOI14_rail) C++
30 / 100
89 ms 748 KB
#include "rail.h"
#include<algorithm>
using namespace std;
int w,arr1[5010],arr2[5010];
struct data
{
    int num,dis;
    bool operator<(const data&r)const
    {
        if(dis==r.dis) return num>r.num;
        return dis<r.dis;
    }
}left[5010];
struct data2
{
    int num,dis;
    bool operator<(const data2&r)const
    {
        if(dis==r.dis) return num<r.num;
        return dis<r.dis;
    }
}right[5010];
void findLocation(int N, int first, int location[], int stype[])
{
    int i,k,dis=2147483647,p,s,dis2;
    for(i=1;i<=N-1;i++)
    {
        k=getDistance(0,i);
        arr1[i]=k;
        if(dis>k) dis=k, p=i;
    }
    stype[0]=1, location[0]=first;
    stype[p]=2, location[p]=dis+location[0];
    for(i=1;i<=N-1;i++)
    {
        if(i==p) continue;
        arr2[i]=getDistance(p,i);
    }
    dis2=dis;
    for(i=1;i<=N-1;i++)
    {
        if(i==p) continue;
        if(arr1[i]-arr2[i]==dis && arr2[i]-dis<0)
        {
            location[i]=location[p]-arr2[i]; stype[i]=1;
            if(dis2>arr2[i]) dis2=arr2[i];
        }
    }
    for(i=1;i<=N-1;i++)
    {
        if(i==p) continue;
        if(arr1[i]-arr2[i]==dis && arr2[i]-dis>0)
        {
            w++; left[w].dis=arr2[i]-dis; left[w].num=i;
        }
    }
    sort(left+1,left+w+1);
    if(w>0){stype[left[1].num]=1; location[left[1].num]=first-left[1].dis;}
    s=1;
    for(i=2;i<=w;i++)
    {
        k=getDistance(left[i].num,left[s].num);
        if(k==left[i].dis-left[s].dis)
        {
            stype[left[i].num]=2; location[left[i].num]=location[left[s].num]+k;
        }
        else
        {
            stype[left[i].num]=1; location[left[i].num]=first-left[i].dis;
            s=i;
        }
    }
    w=0;
    for(i=1;i<=N-1;i++)
    {
        if(i==p) continue;
        if(arr1[i]-arr2[i]==dis-2*dis2)
        {
            w++; right[w].dis=arr1[i]-dis; right[w].num=i;
        }
    }
    sort(right+1,right+w+1);
    if(w>0){stype[right[1].num]=2; location[right[1].num]=first+dis+right[1].dis;}
    s=1;
    for(i=2;i<=w;i++)
    {
        k=getDistance(right[i].num,right[s].num);
        if(k==right[i].dis-right[s].dis)
        {
            stype[right[i].num]=1; location[right[i].num]=location[right[s].num]-k;
        }
        else
        {
            stype[right[i].num]=2; location[right[i].num]=first+dis+right[i].dis;
            s=i;
        }
    }
}

Compilation message

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:33:12: warning: 'p' may be used uninitialized in this function [-Wmaybe-uninitialized]
     stype[p]=2, location[p]=dis+location[0];
            ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 436 KB Output is correct
4 Correct 2 ms 436 KB Output is correct
5 Correct 2 ms 456 KB Output is correct
6 Correct 2 ms 520 KB Output is correct
7 Correct 2 ms 564 KB Output is correct
8 Correct 2 ms 564 KB Output is correct
9 Correct 2 ms 564 KB Output is correct
10 Correct 2 ms 564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 564 KB Output is correct
2 Correct 2 ms 564 KB Output is correct
3 Correct 2 ms 564 KB Output is correct
4 Correct 2 ms 572 KB Output is correct
5 Correct 2 ms 588 KB Output is correct
6 Correct 2 ms 588 KB Output is correct
7 Correct 2 ms 588 KB Output is correct
8 Correct 2 ms 620 KB Output is correct
9 Correct 2 ms 620 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 89 ms 748 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 86 ms 748 KB Output isn't correct
2 Halted 0 ms 0 KB -