THPTTD_24 - Vượt tốc độ_PY

Xem dạng PDF

Gửi bài giải

Điểm: 7,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: speed.inp
Output: speed.out

Tác giả:
Nguồn bài:
HSG
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, JavaScript, Kotlin, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    lephuochauhungvuong  đã bình luận lúc 11, Tháng 4, 2025, 8:55 chỉnh sửa
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main() {
        // Mở tệp đầu vào và đầu ra
        ifstream input("speed.inp");
        ofstream output("speed.out");
    
        int L, N, M;
        input >> L >> N >> M;
    
        // Mảng chứa chiều dài và giới hạn tốc độ của các đoạn đường
        vector<pair<int, int>> road_segments(N);
        for (int i = 0; i < N; i++) {
            input >> road_segments[i].first >> road_segments[i].second;
        }
    
        // Mảng chứa chiều dài và tốc độ của các đoạn hành trình của Bờm
        vector<pair<int, int>> journey_segments(M);
        for (int i = 0; i < M; i++) {
            input >> journey_segments[i].first >> journey_segments[i].second;
        }
    
        int max_over_speed = 0; // Tốc độ vượt quá giới hạn lớn nhất
    
        int road_index = 0;  // Biến để duyệt qua các đoạn đường
        int road_start = 0;  // Điểm bắt đầu của đoạn đường
        for (int i = 0; i < M; i++) {
            int journey_length = journey_segments[i].first;  // Chiều dài đoạn hành trình
            int journey_speed = journey_segments[i].second;  // Tốc độ Bờm đã lái
    
            while (journey_length > 0 && road_index < N) {
                int road_length = road_segments[road_index].first;  // Chiều dài đoạn đường
                int road_speed_limit = road_segments[road_index].second;  // Giới hạn tốc độ của đoạn đường
    
                // Tính chiều dài đoạn hành trình giao cắt với đoạn đường hiện tại
                int overlap_length = min(journey_length, road_length - road_start);
    
                // Kiểm tra tốc độ vượt quá giới hạn
                if (journey_speed > road_speed_limit) {
                    max_over_speed = max(max_over_speed, journey_speed - road_speed_limit);
                }
    
                // Cập nhật chiều dài còn lại của hành trình và đoạn đường
                journey_length -= overlap_length;
                road_start += overlap_length;
    
                // Nếu đoạn đường đã đi hết, chuyển sang đoạn đường tiếp theo
                if (road_start == road_length) {
                    road_index++;
                    road_start = 0;
                }
            }
        }
    
        // Ghi kết quả vào tệp
        output << max_over_speed << endl;
    
        // Đóng tệp
        input.close();
        output.close();
    
        return 0;
    
        // Bon toa lephuochauhungvuong
    }