Hướng dẫn cho Chỉ Số Hiệu Quả


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: anh03032007

SUBTASK 1

  • Ta có thể dùng tham lam để giải quyết bài toán, ta xét từ bit lớn nhất đến bit nhỏ nhất, vì \(l,r \le 10^2\) nên ta duyệt từ bit thứ \(20\) về \(0\). Với bit thứ \(i\) đang xét, ta cần kiểm tra xem số lượng công nhân có chỉ số là \(x\) mà bit thứ \(i\) của \(x\)\(0\) và công nhân đó chưa bị loại, và nếu số lượng công nhân không vượt quá \(k\), ta thực hiện giảm \(k\) một khoảng bằng số lượng công nhân đó .Lưu chỉ số các công nhân đã loại bỏ trong \(1\) mảng, sau đó xét đến các bit nhỏ hơn.
  • để kiểm tra số lượng các chỉ số \(x\), ta chỉ cần chạy for-do bình thường vì giới hạn của subtask này là khá nhỏ.

SUBTASK 2

  • subtask 2, ta cần tạo thêm 1 hàm \(F(x,i)\) đưa ra giá trị \(y\) lớn nhất sao cho \(y \le x\) và bit thứ \(i\) của \(y\) bằng \(0\).
  • Để duyệt các số có bit thứ \(i\) bằng \(0\) trong đoạn \(l,r\) ta thực hiện đoạn code sau:
int val=F(r,i);
while(val>=l){
    val=F(val-1,i);
}

code solution: https://ideone.com/JlIAOk

code của tester: https://ideone.com/r11L5u



Bình luận

Không có bình luận nào.