USACO 2025 - Making Mexes

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

Bạn được cho một mảng \(a\) gồm \(N\) số nguyên không âm \(a_1,a_2,\dots,a_N\) (\(1\le N\le 2\cdot 10^5\), \(0\le a_i\le N\)). Trong một thao tác, bạn có thể thay đổi bất kỳ phần tử nào của \(a\) thành một số nguyên không âm bất kỳ.

mex của một mảng là số nguyên không âm nhỏ nhất không xuất hiện trong mảng. Với mỗi \(i\) từ \(0\) đến \(N\), hãy tính số thao tác tối thiểu cần thiết để mex của \(a\) bằng \(i\).

Dữ liệu vào

Dòng đầu tiên chứa \(N\).

Dòng tiếp theo chứa \(a_1,a_2,\dots,a_N\).

Dữ liệu ra

Với mỗi \(i\) từ \(0\) đến \(N\), in trên một dòng riêng số thao tác tối thiểu ứng với \(i\). Lưu ý rằng luôn có thể làm cho mex của \(a\) bằng bất kỳ \(i\) nào từ \(0\) đến \(N\).

Ví dụ

Ví dụ 1

Input
4
2 2 2 0
Output
1
0
3
1
2
Giải thích
  • Để mex của \(a\) bằng \(0\), ta có thể đổi \(a_4\) thành \(3\) (hoặc bất kỳ số nguyên dương nào). Trong mảng thu được \([2,2,2,3]\), \(0\) là số nguyên không âm nhỏ nhất không xuất hiện, nên \(0\) là mex của mảng.
  • Để mex của \(a\) bằng \(1\), ta không cần thay đổi gì vì \(1\) đã là số nguyên không âm nhỏ nhất không xuất hiện trong \(a=[2,2,2,0]\).
  • Để mex của \(a\) bằng \(2\), ta cần thay đổi ba phần tử đầu tiên của \(a\). Chẳng hạn, ta có thể đổi \(a\) thành \([3,1,1,0]\).

Phân nhóm

  • Dữ liệu 2–6: \(N\le 10^3\).
  • Dữ liệu 7–11: Không có ràng buộc bổ sung.

Nguồn

USACO 2025 February Contest, Bronze — Making Mexes. Tác giả: Benjamin Qi.

https://usaco.org/index.php?page=viewproblem2&cpid=1492

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: