Problem:
I: Starting Line

ICPC で良い成績を収めるには修行が欠かせない．うさぎは ICPC で勝ちたいので，今日も修行をすることにした．

今日の修行は，一直線上の道を走って，体力と判断力を養おうというものである．うさぎは今，スタートラインに立って長い長い道を見渡している．

道の途中にはいくつかニンジンが置かれており，うさぎはニンジンを食べると加速することができる．加速していないときのうさぎの走る速さは毎秒 U メートルであるが，ニンジンを食べることで，最後のニンジンを食べてから T 秒後までは速さが毎秒 V メートルとなる．また，うさぎはニンジンを K 個まで食べずに持っておくことができる．ニンジンを持っていても走る速さは変わらない．

ニンジンを持ったり食べたりするのに時間はかからないとして，ゴールまでの最短所要時間を求めたい．

Input

N K T U V L
D1
...
DN

N はニンジンの個数，L はスタートからゴールまでの距離 (メートル)，Di (1 ≤ i ≤ N) は i 番目のニンジンが置かれている場所のスタートからの距離 (メートル) である．

1 ≤ N ≤ 200，1 ≤ K ≤ N，1 ≤ T ≤ 10,000，1 ≤ U < V ≤ 10,000，2 ≤ L ≤ 10,000，0 < D1 < D2 < ... < DN < L を満たす．入力の値はすべて整数である．

Output

最短所要時間 (秒) を 1 行に出力せよ．10-6 以下の絶対誤差が許容される．

Sample Input 1

1 1 1 2 3 100
50

Sample Output 1

49.500000000

Sample Input 2

3 1 1 2 3 100
49
50
51

Sample Output 2

48.666666667

Solution in JAVA (judge verdict: Accepted)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n,k,t,u,v,l;
        n = sc.nextInt();
        k = sc.nextInt();
        t = sc.nextInt();
        u = sc.nextInt();
        v = sc.nextInt();
        l = sc.nextInt();

        int[] d = new int[n+1];
        for (int i = 0; i < n; ++i) d[i] = sc.nextInt();
        d[n] = l;

        int pos = 0, c = 0, nk = 0;
        double tm = 0;

        while (pos < l) {
            // ??????????????????????????´???????????????
            if (pos < d[c]) {
                // ?????????????????£?????????
                if (nk > 0) {
                    nk--;
                    int x = Math.min(l, pos+t*v);
                    tm += (x-pos)/(double)v;
                    pos = x;
                }
                // ?????£??????????????£??????
                else {
                    tm += (d[c]-pos)/(double)u;
                    pos = d[c];
                }
            }
            //  ?????????????????´???????????£??????
            else {
                // ?????????????????£??????????????£??????
                if (d[c] == pos) {
                    int x = Math.min(l, pos+t*v);
                    tm += (x-pos)/(double)v;
                    pos = x;
                    ++c;
                }
                else {
                    if (nk < k) {
                        c++;
                        nk++;
                    }
                    else {
                        int x = Math.min(l, d[c++]+t*v);
                        tm += (x-pos)/(double)v;
                        pos = x;
                    }
                }
            }
        }
        System.out.println(tm);
    }
}