Submission #1368786

#TimeUsernameProblemLanguageResultExecution timeMemory
1368786backer8002Tycho (BOI23_tycho)C++20
0 / 100
0 ms348 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    long B,P,D,N;
    cin >> B >> P >> D >> N;

    vector<long> places(N+2);
    places[0] = 0, places.back() = B;
    for (int i = 0; i < N; i++)
        cin >> places[i+1];
    vector values(N+1,vector<long>(P,LONG_MAX));
    for (int i = 0; i < P; i++)
        values[0][i] = i + places[1] + (places[1] + i-1)/P * D;

    for (int i = 0; i < N; i++) {
        const long dist = places[i+2] - places[i+1];
        for (int j = 0; j < P; j++) {
            const long arrivalTime =  (places[i+1] - places[i] + j) % P;
            if (arrivalTime)
                values[i+1][arrivalTime] =(dist + arrivalTime - 1)/P * D + dist + values[i][j];
            values[i+1][0] = min(values[i+1][0],(dist - 1)/P * D + dist + values[i][j]+(P-arrivalTime));
        }
    }
    long minimum = LONG_MAX;
    for (int i = 0; i < P; i++)
        minimum = min(minimum,values.back()[i]);
    cout << minimum;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...