BOI 2022 - Uplifting Excursion

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 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Những sự kiện bạn tham dự vào ngày mới đến là cơ hội thú vị để làm quen lại với tình hình nghệ thuật đương đại. Hơn nữa, những lời đồn nghe được còn tiết lộ rằng bộ sưu tập bạn quan tâm được cất trong một kho bí mật dưới nước ở biển Baltic gần đó, thuộc sở hữu của một gia đình thương nhân ngũ cốc lâu đời tại Lübeck! Nhớ lại thời làm kẻ trộm tranh, bạn quyết định lên kế hoạch đột nhập kho như một hoạt động thư giãn buổi chiều. Dĩ nhiên, đây chỉ là một vụ trộm giả định.

Bạn muốn dùng chiếc tàu ngầm mới mua để đột nhập. Đáng tiếc là khi thoát khỏi hiện trường, tàu cần một tổng lực nâng chính xác bằng \(L\). Bạn đâu muốn tàu đâm xuống đáy biển hay nổi lên mặt nước để cảnh sát dễ dàng bắt được!

Để lên kế hoạch, bạn cần biết lực nâng của các tác phẩm nghệ thuật trong kho. Với kỹ năng của mình, bạn đã lấy được thông tin cần thiết — hệ thống an ninh của họ dùng thuật toán băm yếu thì đâu phải lỗi của bạn. Với mỗi giá trị lực nâng \(\ell\), bạn biết có bao nhiêu tác phẩm \(A_\ell\) mang lực nâng đó.

Hẳn có một câu chơi chữ về “phishing” ẩn ở đây, nhưng thú thật là chuyện này quá sâu so với chúng tôi.

Hãy viết chương trình dùng thông tin này để tính số tác phẩm nhiều nhất có thể lấy sao cho tổng lực nâng của chúng, bằng tổng lực nâng riêng của từng tác phẩm được lấy, đúng bằng \(L\), hoặc xác định rằng điều đó là không thể.

Dữ liệu vào

Dòng đầu chứa hai số nguyên \(M\)\(L\): lực nâng của mỗi tác phẩm nằm trong đoạn từ \(-M\) đến \(M\), kể cả hai đầu mút, và tổng lực nâng cần đạt là \(L\).

Dòng tiếp theo chứa \(2M+1\) số nguyên \(A_{-M},\ldots,A_M\), trong đó \(A_\ell\) là số tác phẩm có lực nâng \(\ell\) trong kho.

Dữ liệu ra

In một dòng chứa số tác phẩm nhiều nhất có thể lấy sao cho tổng lực nâng đúng bằng \(L\), hoặc chuỗi impossible nếu không có cách thực hiện.

Ràng buộc

  • \(1\le M\le300\).
  • \(-10^{18}\le L\le10^{18}\).
  • \(0\le A_\ell\le10^{12}\) với mọi \(-M\le\ell\le M\).
  • Giới hạn thời gian: \(4\) giây.
  • Giới hạn bộ nhớ: \(512\) MiB.

Phân nhóm

  1. \(5\) điểm: \(M\le50\)\(A_\ell\le50\) với mọi \(-M\le\ell\le M\).
  2. \(15\) điểm: \(M\le100\)\(A_\ell\le100\) với mọi \(-M\le\ell\le M\).
  3. \(20\) điểm: \(M\le30\). Nhận \(50\%\) số điểm của phân nhóm nếu giải đúng tất cả các bộ dữ liệu trong phân nhóm thỏa mãn \(A_\ell=0\) với mọi \(-M\le\ell<0\).
  4. \(20\) điểm: \(M\le50\). Nhận \(50\%\) số điểm của phân nhóm nếu giải đúng tất cả các bộ dữ liệu trong phân nhóm thỏa mãn \(A_\ell=0\) với mọi \(-M\le\ell<0\).
  5. \(20\) điểm: \(M\le100\). Nhận \(50\%\) số điểm của phân nhóm nếu giải đúng tất cả các bộ dữ liệu trong phân nhóm thỏa mãn \(A_\ell=0\) với mọi \(-M\le\ell<0\).
  6. \(20\) điểm: không có ràng buộc thêm. Nhận \(50\%\) số điểm của phân nhóm nếu giải đúng tất cả các bộ dữ liệu trong phân nhóm thỏa mãn \(A_\ell=0\) với mọi \(-M\le\ell<0\).

Trong CMS chính thức, phần dữ liệu không có tác phẩm mang lực nâng âm nói trên được hiển thị là Group 1 của từng phân nhóm từ \(3\) đến \(6\).

Ví dụ

Ví dụ 1

Input
2 5
2 3 1 1 4
Output
9
Giải thích

Bạn có thể lấy một tác phẩm cho mỗi lực nâng \(-2\), \(0\)\(1\), hai tác phẩm có lực nâng \(-1\), cùng bốn tác phẩm có lực nâng \(2\). Tổng số tác phẩm là \(1+1+1+2+4=9\), với tổng lực nâng \(1\cdot(-2)+1\cdot0+1\cdot1+2\cdot(-1)+4\cdot2=5\), đúng như yêu cầu.

Ví dụ 2

Input
3 5
3 1 0 2 0 0 2
Output
impossible
Giải thích

Không thể lấy các tác phẩm sao cho tổng lực nâng bằng \(5\).

Ví dụ 3

Input
1 5
0 0 6
Output
5

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: