BOI 2006 - Coin Collector

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2300 Thời gian: 3.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Một quốc gia lưu hành \(N\) mệnh giá tiền xu, trong đó có đồng \(1\) xu, và một loại tiền giấy trị giá \(K\) xu lớn hơn mọi đồng xu. Một nhà sưu tập muốn có một đồng thuộc mỗi mệnh giá. Ông đã có sẵn một số mệnh giá và đang cầm đúng một tờ \(K\) xu.

Cửa hàng bán hàng hóa với mọi mức giá nguyên từ \(1\) đến \(K-1\) xu. Tiền thừa được trả bằng thuật toán tham lam: khi còn phải trả \(A\) xu, cửa hàng chọn đồng có mệnh giá lớn nhất không vượt quá \(A\), đưa đồng đó cho khách, trừ mệnh giá khỏi \(A\), rồi lặp lại đến khi \(A=0\).

Nhà sưu tập mua đúng một món bằng tờ \(K\) xu. Hãy xác định số mệnh giá mới lớn nhất mà ông có thể nhận được, và trong số các món đạt được số lượng ấy, giá món hàng lớn nhất.

Dữ liệu vào

Dòng đầu chứa hai số nguyên \(N\)\(K\).

Mỗi dòng trong \(N\) dòng tiếp theo chứa \(c_i\)\(d_i\). Giá trị \(c_i\) là mệnh giá đồng xu; \(d_i=1\) nếu nhà sưu tập đã có mệnh giá này, và \(d_i=0\) nếu chưa có. Các mệnh giá tăng nghiêm ngặt:

\[ c_1<c_2<\cdots<c_N, \]

\(c_1=1\).

Dữ liệu ra

Dòng đầu in số mệnh giá mới lớn nhất có thể nhận được. Dòng thứ hai in giá lớn nhất của một món hàng khiến tiền thừa chứa đúng số mệnh giá mới lớn nhất đó.

Ràng buộc

  • \(1\le N\le 500\,000\).
  • \(2\le K\le 1\,000\,000\,000\).
  • \(1\le c_i<K\).

Ví dụ

Ví dụ 1

Input
7 25
1 0
2 0
3 1
5 0
10 0
13 0
20 0
Output
3
6

Bình luận

Mới nhất
Tải bình luận...

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

Kỳ thi: