trang chủ / bài tập / binremov

Xoá ký tự nhị phân

Đề bài

Mô tả

Cho một xâu nhị phân s chỉ gồm các ký tự '0' và '1'.

Bạn được phép chọn một số nguyên k (k>0) và một dãy vị trí a1<a2<<ak thoả mãn hai điều kiện:

  • 1a1<a2<<ak|s|;
  • ai1+1<ai với mọi i từ 2 đến k (tức là không có hai vị trí nào trong dãy đứng kề nhau).

Sau đó xoá các ký tự tại những vị trí a1,a2,,ak khỏi s, rồi nối các ký tự còn lại theo đúng thứ tự ban đầu để được xâu s.

Xâu s được gọi là đã sắp xếp nếu si1si với mọi i, nghĩa là toàn bộ ký tự '0' đứng trước toàn bộ ký tự '1'.

Cũng có thể không xoá gì (khi đó s=s). Hãy xác định xem có tồn tại cách chọn dãy vị trí (không bắt buộc phải xoá) để xâu s đã sắp xếp hay không.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t là số bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm một dòng chứa xâu s.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra YES nếu tồn tại cách chọn để xâu thu được đã sắp xếp, ngược lại in ra NO.

Ràng buộc

  • 1t1000
  • 2|s|100
  • Mỗi ký tự của s là '0' hoặc '1'.

Ví dụ

Input Output Giải thích
5
10101011011
0000
11111
110
1100
YES
YES
YES
YES
NO
Bộ 1: chọn các vị trí 1,3,6,9, còn lại "0011111" đã sắp xếp. Bộ 2 và 3: xâu đã sắp xếp sẵn. Bộ 4: xoá vị trí 3, còn "11". Bộ 5: không có cách nào.
8
01
10
00
11
010
101
0110
1001
YES
YES
YES
YES
YES
YES
YES
YES
Mọi xâu ở đây đều có thể biến đổi về dạng đã sắp xếp: các xâu không chứa đồng thời một cặp "11" đứng trước một cặp "00".

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