답안 #171370

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
171370 2019-12-28T11:53:58 Z ho94949 Long Distance Coach (JOI17_coach) C++17
71 / 100
2000 ms 23236 KB
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 202020;
long long X, N, M, W, T;
long long S[MAXN];
long long D[MAXN], C[MAXN];

// used water before kickout
long long nw[MAXN];

//1~(i-1) customer minimum value when ith person do not kicked
// -(C_1+...+C_i)+ WV[i] customer's required value.
long long DP[MAXN];

// drank water of ith customer if none was kicked
long long WV[MAXN];

int pv[MAXN];

long long do_dp()
{
    DP[0] = 0;
    for(int i=1; i<=M+1; ++i)
    {
        DP[i] = DP[i-1]; // not kicking (i-1)th customer

        if(nw[i] != -1) // if can start kicking strategy,
        {
            for(int j=i-2; j>=0; --j) //not kicking jth customer, kicking all
                DP[i] = min(DP[i], DP[j]+(i-j-1)*nw[i]);
        }
        if(pv[i] != 0) //kick through pv player and let what they want.
        {
            //cout << "!" << i << " " << pv[i] << endl;
            DP[i] = min(DP[i], DP[pv[i]] - WV[pv[i]] +C[pv[i]] + (i-pv[i])*nw[i]);
        }
        DP[i] += -C[i] + WV[i];
        //printf("%d %lld %lld\n", i, nw[i], DP[i]);
    }

    long long ans = DP[M+1]; //basic DP value;
    //we remove C_1...C_M
    for(int i=1; i<=M; ++i) ans += C[i];
    // WV[M+1] is defined as 0
    // we should add bus drivers' cost
    ans += W*(1+X/T);
    return ans;
}
int main()
{
    cin >> X >> N >> M >> W >> T;
    for(int i=0; i<N; ++i) cin >> S[i];
    vector<pair<long long, long long> > VDC;
    for(int i=0; i<M; ++i)
    {
        long long d, c;
        cin >> d >> c;
        VDC.emplace_back(d, c);
    }
    sort(VDC.begin(), VDC.end());
    for(int i=1; i<=M; ++i)
    {
        tie(D[i], C[i]) = VDC[i-1];
        WV[i] = W*(1+(X-D[i])/T);
        //printf("%d: %lld %lld\n", i, WV[i], C[i]);
    }
    S[N] = X;
    sort(S, S+N+1);

    memset(nw, -1, sizeof nw);
    set<int> SS;
    for(int i=0; i<=N; ++i)
    {
        long long kickout_water = W*(S[i]/T);
        int kick_index = lower_bound(D+1, D+1+M, S[i]%T) - D;
        //printf("%lld %d\n", kickout_water, kick_index);
        // we will decide whether kick 1~kick_index
        if(kick_index == 1) continue;
        if(nw[kick_index] != -1) continue;
        nw[kick_index] = kickout_water;

        SS.insert(kick_index);
        auto it = SS.find(kick_index);
        if(it != SS.begin())
            pv[kick_index] = *(--it);
    }

    printf("%lld\n", do_dp());
}




# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1912 KB Output is correct
2 Correct 4 ms 1912 KB Output is correct
3 Correct 3 ms 1784 KB Output is correct
4 Correct 14 ms 1912 KB Output is correct
5 Correct 3 ms 1912 KB Output is correct
6 Correct 4 ms 1912 KB Output is correct
7 Correct 4 ms 1784 KB Output is correct
8 Correct 4 ms 1912 KB Output is correct
9 Correct 0 ms 2040 KB Output is correct
10 Correct 3 ms 1912 KB Output is correct
11 Correct 4 ms 1912 KB Output is correct
12 Correct 4 ms 1912 KB Output is correct
13 Correct 0 ms 1912 KB Output is correct
14 Correct 4 ms 2040 KB Output is correct
15 Correct 3 ms 1916 KB Output is correct
16 Correct 4 ms 1912 KB Output is correct
17 Correct 2 ms 1912 KB Output is correct
18 Correct 4 ms 1912 KB Output is correct
19 Correct 4 ms 1912 KB Output is correct
20 Correct 3 ms 1912 KB Output is correct
21 Correct 4 ms 1912 KB Output is correct
22 Correct 4 ms 1912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1912 KB Output is correct
2 Correct 4 ms 1912 KB Output is correct
3 Correct 3 ms 1784 KB Output is correct
4 Correct 14 ms 1912 KB Output is correct
5 Correct 3 ms 1912 KB Output is correct
6 Correct 4 ms 1912 KB Output is correct
7 Correct 4 ms 1784 KB Output is correct
8 Correct 4 ms 1912 KB Output is correct
9 Correct 0 ms 2040 KB Output is correct
10 Correct 3 ms 1912 KB Output is correct
11 Correct 4 ms 1912 KB Output is correct
12 Correct 4 ms 1912 KB Output is correct
13 Correct 0 ms 1912 KB Output is correct
14 Correct 4 ms 2040 KB Output is correct
15 Correct 3 ms 1916 KB Output is correct
16 Correct 4 ms 1912 KB Output is correct
17 Correct 2 ms 1912 KB Output is correct
18 Correct 4 ms 1912 KB Output is correct
19 Correct 4 ms 1912 KB Output is correct
20 Correct 3 ms 1912 KB Output is correct
21 Correct 4 ms 1912 KB Output is correct
22 Correct 4 ms 1912 KB Output is correct
23 Correct 4 ms 1912 KB Output is correct
24 Correct 4 ms 2040 KB Output is correct
25 Correct 4 ms 1912 KB Output is correct
26 Correct 4 ms 1912 KB Output is correct
27 Correct 4 ms 1912 KB Output is correct
28 Correct 4 ms 1912 KB Output is correct
29 Correct 4 ms 1912 KB Output is correct
30 Correct 4 ms 1916 KB Output is correct
31 Correct 4 ms 1912 KB Output is correct
32 Correct 4 ms 1912 KB Output is correct
33 Correct 4 ms 1912 KB Output is correct
34 Correct 4 ms 1776 KB Output is correct
35 Correct 6 ms 1912 KB Output is correct
36 Correct 4 ms 2044 KB Output is correct
37 Correct 4 ms 1912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1912 KB Output is correct
2 Correct 4 ms 1912 KB Output is correct
3 Correct 3 ms 1784 KB Output is correct
4 Correct 14 ms 1912 KB Output is correct
5 Correct 3 ms 1912 KB Output is correct
6 Correct 4 ms 1912 KB Output is correct
7 Correct 4 ms 1784 KB Output is correct
8 Correct 4 ms 1912 KB Output is correct
9 Correct 0 ms 2040 KB Output is correct
10 Correct 3 ms 1912 KB Output is correct
11 Correct 4 ms 1912 KB Output is correct
12 Correct 4 ms 1912 KB Output is correct
13 Correct 0 ms 1912 KB Output is correct
14 Correct 4 ms 2040 KB Output is correct
15 Correct 3 ms 1916 KB Output is correct
16 Correct 4 ms 1912 KB Output is correct
17 Correct 2 ms 1912 KB Output is correct
18 Correct 4 ms 1912 KB Output is correct
19 Correct 4 ms 1912 KB Output is correct
20 Correct 3 ms 1912 KB Output is correct
21 Correct 4 ms 1912 KB Output is correct
22 Correct 4 ms 1912 KB Output is correct
23 Correct 4 ms 1912 KB Output is correct
24 Correct 4 ms 2040 KB Output is correct
25 Correct 4 ms 1912 KB Output is correct
26 Correct 4 ms 1912 KB Output is correct
27 Correct 4 ms 1912 KB Output is correct
28 Correct 4 ms 1912 KB Output is correct
29 Correct 4 ms 1912 KB Output is correct
30 Correct 4 ms 1916 KB Output is correct
31 Correct 4 ms 1912 KB Output is correct
32 Correct 4 ms 1912 KB Output is correct
33 Correct 4 ms 1912 KB Output is correct
34 Correct 4 ms 1776 KB Output is correct
35 Correct 6 ms 1912 KB Output is correct
36 Correct 4 ms 2044 KB Output is correct
37 Correct 4 ms 1912 KB Output is correct
38 Correct 7 ms 2140 KB Output is correct
39 Correct 11 ms 2168 KB Output is correct
40 Correct 13 ms 2168 KB Output is correct
41 Correct 9 ms 2168 KB Output is correct
42 Correct 7 ms 2168 KB Output is correct
43 Correct 9 ms 2168 KB Output is correct
44 Correct 10 ms 2168 KB Output is correct
45 Correct 9 ms 2296 KB Output is correct
46 Correct 9 ms 2168 KB Output is correct
47 Correct 9 ms 2168 KB Output is correct
48 Correct 10 ms 2168 KB Output is correct
49 Correct 11 ms 2168 KB Output is correct
50 Correct 9 ms 2168 KB Output is correct
51 Correct 10 ms 2168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1912 KB Output is correct
2 Correct 4 ms 1912 KB Output is correct
3 Correct 3 ms 1784 KB Output is correct
4 Correct 14 ms 1912 KB Output is correct
5 Correct 3 ms 1912 KB Output is correct
6 Correct 4 ms 1912 KB Output is correct
7 Correct 4 ms 1784 KB Output is correct
8 Correct 4 ms 1912 KB Output is correct
9 Correct 0 ms 2040 KB Output is correct
10 Correct 3 ms 1912 KB Output is correct
11 Correct 4 ms 1912 KB Output is correct
12 Correct 4 ms 1912 KB Output is correct
13 Correct 0 ms 1912 KB Output is correct
14 Correct 4 ms 2040 KB Output is correct
15 Correct 3 ms 1916 KB Output is correct
16 Correct 4 ms 1912 KB Output is correct
17 Correct 2 ms 1912 KB Output is correct
18 Correct 4 ms 1912 KB Output is correct
19 Correct 4 ms 1912 KB Output is correct
20 Correct 3 ms 1912 KB Output is correct
21 Correct 4 ms 1912 KB Output is correct
22 Correct 4 ms 1912 KB Output is correct
23 Correct 4 ms 1912 KB Output is correct
24 Correct 4 ms 2040 KB Output is correct
25 Correct 4 ms 1912 KB Output is correct
26 Correct 4 ms 1912 KB Output is correct
27 Correct 4 ms 1912 KB Output is correct
28 Correct 4 ms 1912 KB Output is correct
29 Correct 4 ms 1912 KB Output is correct
30 Correct 4 ms 1916 KB Output is correct
31 Correct 4 ms 1912 KB Output is correct
32 Correct 4 ms 1912 KB Output is correct
33 Correct 4 ms 1912 KB Output is correct
34 Correct 4 ms 1776 KB Output is correct
35 Correct 6 ms 1912 KB Output is correct
36 Correct 4 ms 2044 KB Output is correct
37 Correct 4 ms 1912 KB Output is correct
38 Correct 7 ms 2140 KB Output is correct
39 Correct 11 ms 2168 KB Output is correct
40 Correct 13 ms 2168 KB Output is correct
41 Correct 9 ms 2168 KB Output is correct
42 Correct 7 ms 2168 KB Output is correct
43 Correct 9 ms 2168 KB Output is correct
44 Correct 10 ms 2168 KB Output is correct
45 Correct 9 ms 2296 KB Output is correct
46 Correct 9 ms 2168 KB Output is correct
47 Correct 9 ms 2168 KB Output is correct
48 Correct 10 ms 2168 KB Output is correct
49 Correct 11 ms 2168 KB Output is correct
50 Correct 9 ms 2168 KB Output is correct
51 Correct 10 ms 2168 KB Output is correct
52 Execution timed out 2051 ms 23236 KB Time limit exceeded
53 Halted 0 ms 0 KB -