Hướng dẫn giải của VQ22 Tìm kiếm

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Tổ chức dữ liệu:

  • Mảng pair<int,int> d[100000] để lưu thời điểm và số tàu trong nhóm khi tới khảo sát băng k:
  • d[i].first – thời điểm tới khảo sát băng k,
  • d[i].second – số tàu trong nhóm,
  • Mảng int64_t e[100000] *– lưu tổng số tàu cùng khảo sát băng *k ở từng thời điểm khi có tàu khảo sát băng này,
  • Biến lưu kết quả: int64_t ans1=0,ans2=0;

Mỗi nhóm được đặc trưng bởi 3 tham số a, bc.

Điều kiện để nhóm khảo sát băng k:

  • * a ≤ k,*
  • * (k-a)%b==0.*

Duyệt tất cả các nhóm, với mỗi nhóm thỏa mãn các điều kiện trên:

  • Tích lũy số tàu trong nhóm vào ans1 (ans1+=c;)
  • Nạp cặp giá trị ((k-a)/b,c) vào d.

Sắp xếp lại mảng* d* theo thứ tự tăng dần của d[i].first,

Nhóm số lượng tàu khảo sát băng k ở cùng một thời điểm vào mảng e,

Tính ans2 = max{~e_i~}, i=0, 1, 2, . . .

Đưa ra các kết quả ans1ans2.

Độ phức tạp của giải thuật: O(nlogn)


Bình luận

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


Không có bình luận tại thời điểm này.