Thanh tích điện cân bằng

Đề bài

Mô tả

Cho một dãy gồm n thanh tích điện, đánh số từ 1 đến n. Thanh thứ i mang điện tích ai bằng +1 (ký hiệu là dấu +) hoặc 1 (ký hiệu là dấu -).

Với một đoạn thanh liên tiếp, ta định nghĩa tổng đan dấu của đoạn đó là tổng các điện tích, trong đó thanh đầu tiên của đoạn lấy dấu cộng, thanh thứ hai lấy dấu trừ, thanh thứ ba lấy dấu cộng, và cứ thế xen kẽ. Nghĩa là với đoạn gồm các thanh có điện tích b1,b2,b3,,bk (theo thứ tự), tổng đan dấu là:

b1b2+b3b4+=j=1k(1)j1bj.

Đoạn được gọi là cân bằng nếu tổng đan dấu của nó bằng 0. Một đoạn rỗng (không còn thanh nào) cũng được coi là cân bằng.

q truy vấn. Mỗi truy vấn cho hai số lr: xét đoạn gồm các thanh từ vị trí l đến r. Bạn được phép bỏ đi một số thanh bất kỳ trong đoạn này (các thanh còn lại giữ nguyên thứ tự và việc tính tổng đan dấu được làm lại từ đầu trên các thanh còn lại). Hãy tìm số thanh ít nhất cần bỏ để đoạn còn lại trở nên cân bằng.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t — số bộ dữ liệu.
  • Với mỗi bộ:
    • Dòng đầu chứa hai số nguyên nq.
    • Dòng thứ hai chứa xâu s độ dài n gồm các ký tự +-, mô tả điện tích các thanh.
    • q dòng tiếp theo, mỗi dòng chứa hai số nguyên lr mô tả một truy vấn.

Dữ liệu ra

Với mỗi truy vấn, in ra trên một dòng số thanh ít nhất cần bỏ.

Ràng buộc

  • 1t103
  • 1n,q3·105
  • 1lrn
  • Tổng n trên tất cả các bộ không vượt quá 3·105.
  • Tổng q trên tất cả các bộ không vượt 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
2
1
0
1
2
1
2
1
2
1
1
2
1
Bộ 1, truy vấn (1,14): bỏ 2 thanh là đủ. Bộ 2, truy vấn (6,12) có độ dài lẻ nên chỉ cần bỏ 1 thanh; truy vấn (3,10) đã cân bằng sẵn nên không cần bỏ. Bộ 3 (xâu +-+-): các đoạn độ dài lẻ cần bỏ 1, đoạn (1,2)(3,4) cần bỏ 2, đoạn (2,3) đã cân bằng.
3
2 1
++
1 2
2 1
+-
1 2
1 1
-
1 1
0
2
1
Đoạn ++ lấy dấu xen kẽ là 11=0 nên đã cân bằng. Đoạn +- cho 1(1)=20, độ dài chẵn nên cần bỏ 2 thanh. Đoạn - có độ dài lẻ, cần bỏ 1 thanh.

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