Dãy XOR tốt

Đề bài

Mô tả

Với một dãy các số nguyên không âm đôi một phân biệt (b1,b2,,bk), ta xác định dãy đó có tốt hay không theo cách sau:

  • Dựng một đồ thị vô hướng gồm k đỉnh, đỉnh thứ i mang giá trị bi.
  • Với mỗi i từ 1 đến k: tìm chỉ số j (1jk, ji) sao cho bibj là nhỏ nhất trong tất cả các lựa chọn j (ở đây là phép XOR nhị phân). Sau đó thêm một cạnh nối đỉnh bi với đỉnh bj.
  • Dãy được gọi là tốt khi và chỉ khi đồ thị thu được tạo thành một cây (liên thông và không có chu trình đơn).

Do các giá trị phân biệt nên với mỗi i, chỉ số j làm bibj nhỏ nhất là duy nhất. Có thể xảy ra trường hợp một cạnh giữa bibj được thêm hai lần (một lần khi xét i, một lần khi xét j); khi đó cạnh này chỉ được tính một lần.

Cho một dãy (a1,a2,,an) gồm các số nguyên không âm đôi một phân biệt. Bạn được phép xoá bớt một số phần tử (có thể không xoá phần tử nào) để phần còn lại của dãy trở thành dãy tốt. Hãy tìm số phần tử ít nhất cần xoá.

Có thể chứng minh rằng với mọi dãy, ta luôn xoá được một số phần tử sao cho còn lại ít nhất 2 phần tử và dãy còn lại là dãy tốt. Các phần tử bị xoá không tham gia vào quá trình xác định dãy tốt của phần còn lại.

Dữ liệu vào

  • Dòng đầu: số nguyên n , độ dài của dãy.
  • Dòng thứ hai: n số nguyên phân biệt a1,a2,,an.

Dữ liệu ra

  • Một số nguyên duy nhất: số phần tử ít nhất cần xoá để dãy còn lại trở thành dãy tốt.

Ràng buộc

  • 2n2·105
  • 0ai109
  • Các giá trị ai đôi một phân biệt.

Ví dụ

Input Output Giải thích
5
0 1 5 2 6
1 Dãy (0,1,5,2,6) không tốt (không thể đi từ 5 tới 1). Chỉ cần xoá phần tử 6, dãy còn lại (0,1,5,2) là dãy tốt, nên đáp án là 1.
7
6 9 8 7 3 5 2
2 Cần xoá tối thiểu 2 phần tử để phần còn lại trở thành dãy tốt.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0