Submission #1775801


Source Code Expand

#include<iostream>
#include"math.h"

float dp[200000][2];

int n,start,goal;

int l[200000],r[200000];

float rec(int x,int y,float num){
    
    float res=10000000;
    
    int ju=-1;
    
    if(l[y]==x)ju=0;
    
    if(r[y]==x)ju=1;
    
    if(ju!=-1){
    if(dp[y][ju]==-1){
    
    //ゴールへ(単数)
    res=num+sqrt((goal-x)*(goal-x)+(n-y)*(n-y));
    
    //ゴールへ(複数)
    for(int i=1;i<=n-y-1;i++)
        if(l[y+i]<=(float)(goal-x)*i/(n-y)&&(float)(goal-x)*i/(n-y)<=r[y+i])
            res=res<num+sqrt((goal-x)*(goal-x)+(n-y)*(n-y))?res:num+sqrt((goal-x)*(goal-x)+(n-y)*(n-y));
    
    //一つ次
    if(y<n){
        res=
        res<rec(l[y+1],y+1,num+sqrt((l[y+1]-x)*(l[y+1]-x)+1))?
    res:rec(l[y+1],y+1,num+sqrt((l[y+1]-x)*(l[y+1]-x)+1));
        
        res=
        res<rec(r[y+1],y+1,num+sqrt((r[y+1]-x)*(r[y+1]-x)+1))?
    res:rec(r[y+1],y+1,num+sqrt((r[y+1]-x)*(r[y+1]-x)+1));
    }
    
    //複数次
    for(int i=2;i<=n-y;i++){
        for(int j=1;j<=i-1;j++){
            if(l[y+i]<=(float)(l[y+i]-x)*j/i&&(float)(l[y+i]-x)*j/i<=r[y+i])
                res=res<rec(l[y+i],y+i,num+sqrt((l[y+i]-x)*(l[y+i]-x)+i*i))?
                res:rec(l[y+i],y+i,num+sqrt((l[y+i]-x)*(l[y+i]-x)+i*i));
            
            if(l[y+i]<=(float)(r[y+i]-x)*j/i&&(float)(r[y+i]-x)*j/i<=r[y+i])
                res=res<rec(r[y+i],y+i,num+sqrt((r[y+i]-x)*(r[y+i]-x)+i*i))?
                res:rec(r[y+i],y+i,num+sqrt((r[y+i]-x)*(r[y+i]-x)+i*i));
        }
    }
        dp[y][ju]=res;
    }
    else
        res=dp[y][ju];
    }
    
    if(ju==-1){
        //ゴールへ(単数)
        res=num+sqrt((goal-x)*(goal-x)+(n-y)*(n-y));
        
        //ゴールへ(複数)
        for(int i=1;i<=n-y-1;i++)
            if(l[y+i]<=(float)(goal-x)*i/(n-y)&&(float)(goal-x)*i/(n-y)<=r[y+i])
                res=res<num+sqrt((goal-x)*(goal-x)+(n-y)*(n-y))?res:num+sqrt((goal-x)*(goal-x)+(n-y)*(n-y));
        
        //一つ次
        if(y<n){
            res=
            res<rec(l[y+1],y+1,num+sqrt((l[y+1]-x)*(l[y+1]-x)+1))?
        res:rec(l[y+1],y+1,num+sqrt((l[y+1]-x)*(l[y+1]-x)+1));
            
            res=
            res<rec(r[y+1],y+1,num+sqrt((r[y+1]-x)*(r[y+1]-x)+1))?
        res:rec(r[y+1],y+1,num+sqrt((r[y+1]-x)*(r[y+1]-x)+1));
        }
        
        //複数次
        for(int i=2;i<=n-y;i++){
            for(int j=1;j<=i-1;j++){
                if(l[y+i]<=(float)(l[y+i]-x)*j/i&&(float)(l[y+i]-x)*j/i<=r[y+i])
                    res=res<rec(l[y+i],y+i,num+sqrt((l[y+i]-x)*(l[y+i]-x)+i*i))?
                    res:rec(l[y+i],y+i,num+sqrt((l[y+i]-x)*(l[y+i]-x)+i*i));
                
                if(l[y+i]<=(float)(r[y+i]-x)*j/i&&(float)(r[y+i]-x)*j/i<=r[y+i])
                    res=res<rec(r[y+i],y+i,num+sqrt((r[y+i]-x)*(r[y+i]-x)+i*i))?
                    res:rec(r[y+i],y+i,num+sqrt((r[y+i]-x)*(r[y+i]-x)+i*i));
            }
        }
    }
    
    return res;
}

int main(){
    
    for(int i=0;i<200000;i++)
        for(int j=0;j<2;j++)
            dp[i][j]=-1;
    
    std::cin>>n>>start>>goal;
    
    for(int i=0;i<n+1;i++)
        std::cin>>l[n]>>r[n];
    
    std::cout<<rec(start,0,0)<<std::endl;
    
    return 0;
}

Submission Info

Submission Time
Task D - レースゲーム
User HPaddy
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3315 Byte
Status WA
Exec Time 2107 ms
Memory 2176 KB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 1
WA × 1
TLE × 24
Set Name Test Cases
All 00_sample1.txt, 00_sample2.txt, 01_rnd_large_00.txt, 01_rnd_large_01.txt, 01_rnd_large_02.txt, 01_rnd_small_00.txt, 01_rnd_small_01.txt, 01_rnd_small_02.txt, 02_narrowrnd_large_00.txt, 02_narrowrnd_large_01.txt, 02_narrowrnd_small_00.txt, 02_narrowrnd_small_01.txt, 03_zigzag_large_00.txt, 03_zigzag_small_00.txt, 04_middle_large_00.txt, 04_middle_large_01.txt, 04_middle_large_02.txt, 04_middle_small_00.txt, 04_middle_small_01.txt, 04_middle_small_02.txt, 05_turnleft_large_00.txt, 05_turnleft_small_00.txt, 06_turnright_large_00.txt, 06_turnright_small_00.txt, 07_free_large_00.txt, 07_free_small_00.txt
Case Name Status Exec Time Memory
00_sample1.txt WA 2 ms 1792 KB
00_sample2.txt AC 2 ms 1792 KB
01_rnd_large_00.txt TLE 2103 ms 2176 KB
01_rnd_large_01.txt TLE 2103 ms 2176 KB
01_rnd_large_02.txt TLE 2103 ms 2176 KB
01_rnd_small_00.txt TLE 2103 ms 1920 KB
01_rnd_small_01.txt TLE 2103 ms 1920 KB
01_rnd_small_02.txt TLE 2103 ms 1920 KB
02_narrowrnd_large_00.txt TLE 2103 ms 2176 KB
02_narrowrnd_large_01.txt TLE 2107 ms 2176 KB
02_narrowrnd_small_00.txt TLE 2103 ms 1920 KB
02_narrowrnd_small_01.txt TLE 2103 ms 1920 KB
03_zigzag_large_00.txt TLE 2103 ms 1920 KB
03_zigzag_small_00.txt TLE 2103 ms 1920 KB
04_middle_large_00.txt TLE 2103 ms 2176 KB
04_middle_large_01.txt TLE 2103 ms 2176 KB
04_middle_large_02.txt TLE 2103 ms 2176 KB
04_middle_small_00.txt TLE 2103 ms 1920 KB
04_middle_small_01.txt TLE 2103 ms 1920 KB
04_middle_small_02.txt TLE 2103 ms 1920 KB
05_turnleft_large_00.txt TLE 2103 ms 2176 KB
05_turnleft_small_00.txt TLE 2103 ms 1920 KB
06_turnright_large_00.txt TLE 2103 ms 2176 KB
06_turnright_small_00.txt TLE 2103 ms 1920 KB
07_free_large_00.txt TLE 2103 ms 1920 KB
07_free_small_00.txt TLE 2103 ms 1920 KB