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

Bỏ thanh cân bằng đan dấu

Đề bài

Mô tả

n thanh kim loại xếp trên một đường thẳng, đánh số từ 1 đến n. Mỗi thanh mang điện tích bằng 1 hoặc 1, cho bởi một xâu s độ dài n: nếu si là ký tự "+" thì điện tích thanh thứ i1, nếu là "-" thì điện tích là 1.

Với một dãy thanh b1,b2,,bm (theo thứ tự từ trái sang phải, đánh lại chỉ số từ 1), ta gọi tổng đan dấu của nó là

b1b2+b3b4+=i=1m(1)i1bi.

Nếu m=0 (không còn thanh nào) thì tổng đan dấu quy ước bằng 0.

q truy vấn. Truy vấn thứ i gồm hai số li,ri: chỉ xét các thanh có chỉ số từ li đến ri. Bạn cần bỏ đi số thanh ít nhất sao cho các thanh còn lại (giữ nguyên thứ tự và đánh lại chỉ số từ 1) có tổng đan dấu bằng 0. Hãy cho biết số thanh cần bỏ, đồng thời chỉ ra các thanh đó.

Nếu tổng đan dấu của đoạn [li,ri] đã bằng 0 thì không cần bỏ thanh nào.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1t103): số bộ dữ liệu.
  • Với mỗi bộ dữ liệu:
    • Dòng đầu chứa hai số nguyên nq (1n,q3·105).
    • Dòng thứ hai chứa xâu s độ dài n gồm các ký tự "+" và "-".
    • q dòng tiếp theo, mỗi dòng chứa hai số nguyên li,ri (1lirin).

Tổng của n trên tất cả các bộ dữ liệu không vượt quá 3·105, và tổng của q trên tất cả các bộ dữ liệu không vượt quá 3·105.

Dữ liệu ra

Với mỗi truy vấn, in ra:

  • Dòng đầu: một số nguyên k, số thanh ít nhất cần bỏ.
  • Dòng thứ hai: k chỉ số (theo cách đánh số gốc từ 1 đến n) của các thanh cần bỏ, phân tách bởi dấu cách. Nếu k=0 thì không cần in gì thêm cho truy vấn này.

Nếu có nhiều đáp án đúng, in ra đáp án bất kỳ.

Ràng buộc

  • 1t103
  • 1n,q3·105
  • 1lirin
  • Tổng n không quá 3·105; tổng q không quá 3·105.

Ví dụ

Input Output Giải thích
3
14 1
+--++---++-++-
1 14
14 3
+--++---+++---
1 14
6 12
3 10
4 10
+-+-
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4
2
1 2
2
1 9
1
9
0
1
1
2
1 2
1
2
2
1 3
1
2
2
2 3
1
3
1
3
2
3 4
1
4
Với truy vấn đầu của bộ 2, bỏ hai thanh 19 thì các thanh còn lại có tổng đan dấu bằng 0. Truy vấn thứ ba (3,10) đã cân bằng nên k=0. Có thể có nhiều cách bỏ khác cùng số lượng.
1
4 3
++--
1 4
2 3
1 1
0
2
2 3
1
1
Đoạn (1,4) của xâu ++-- có tổng đan dấu 11+(1)(1)=0 nên k=0. Đoạn (2,3) gồm hai thanh "+-", tổng 1(1)=20 và độ dài chẵn nên phải bỏ cả hai thanh (k=2). Đoạn (1,1) chỉ có một thanh, tổng luôn khác 0 nên phải bỏ nó (k=1).

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