Giá trị lớn nhất của hàm bit

Đề bài

Mô tả

Cho mảng a gồm n số nguyên không âm a0,a1,…,an−1 và hàm f nhận vào một số nguyên x với 0≤x≤2n−1, được định nghĩa như sau:

f(x)=∑i=0n−1ai·bit(i)

trong đó bit(i) bằng 1 nếu bit thứ i trong biểu diễn nhị phân của x là 1, và bằng 0 nếu ngược lại.

Ví dụ, với n=4 và x=11 (vì 11=20+21+23) thì f(x)=a0+a1+a3.

Cho thêm một số nguyên m. Hãy tìm giá trị lớn nhất của f(x) trên tất cả các x thỏa mãn 0≤x≤m.

Số m được cho dưới dạng một xâu nhị phân s0s1…sn−1 độ dài n, trong đó ký tự đầu tiên ứng với bit thấp nhất:

m=∑i=0n−1si·2i

Dữ liệu vào

  • Dòng đầu chứa số nguyên n là số phần tử của mảng.
  • Dòng thứ hai chứa n số nguyên a0,a1,…,an−1.
  • Dòng thứ ba chứa xâu nhị phân s0s1…sn−1 (không có dấu cách) biểu diễn số m.

Dữ liệu ra

  • In ra một số nguyên duy nhất là giá trị lớn nhất của f(x) với 0≤x≤m.

Ràng buộc

  • 1≤n≤105
  • 0≤ai≤104
  • |s|=n và si∈{0,1}

Ví dụ

Input Output Giải thích
5
17 0 10 2 1
11010
27 m=20+21+23=11. Giá trị lớn nhất đạt tại x=5=20+22, cho f(5)=a0+a2=17+10=27. Lưu ý x=5≤11 dù bit thứ 2 của m bằng 0.
2
3 8
10
3 m=20=1. Chỉ có hai lựa chọn: f(0)=0 và f(1)=a0=3. Phần tử a1=8 không dùng được vì x=2>m.

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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0