trang chủ / đề bài / psufprod

Tích bỏ một, không dùng phép chia

Đề bài

Mô tả

Cho mảng a1,a2,…,an. Với mỗi vị trí i từ 1 tới n, gọi Pi là tích của tất cả các phần tử của mảng trừ ai: Pi=∏j≠iaj.

Hãy tính dãy P1,P2,…,Pn theo mô-đun 109+7.

Lưu ý quan trọng: Lời giải không được sử dụng phép chia (kể cả nghịch đảo mô-đun). Lý do: nếu có ai=0 thì mọi Pj với j≠i đều bằng 0 trên trường ℤM và việc "chia 0" không hợp lệ. Cách tiếp cận đúng là dùng tiền tố và hậu tố.

Dữ liệu vào

  • Dòng đầu: số nguyên n.
  • Dòng thứ hai: n số nguyên a1,…,an, mỗi ai trong [0,109].

Dữ liệu ra

Một dòng gồm n số nguyên P1,P2,…,Pn cách nhau bởi dấu cách, mỗi số là ∏j≠iajmod(109+7).

Ràng buộc

  • 2≤n≤2·105
  • 0≤ai≤109

Ví dụ

Input Output Giải thích
4
1 2 3 4
24 12 8 6 P1=2·3·4=24; P2=1·3·4=12; P3=1·2·4=8; P4=1·2·3=6.
3
0 5 7
35 0 0 P1=5·7=35. P2=0·7=0 và P3=0·5=0 vì có thừa số 0.
4
0 0 5 7
0 0 0 0 Có hai số 0, nên với mỗi i tích còn lại luôn chứa ít nhất một số 0.

Ghi chú

  • Có thể có nhiều giá trị 0 trong dãy. Nếu có ≥2 số 0, mọi Pi=0. Nếu có đúng một số 0 tại vị trí p, thì Pp là tích các phần tử ≠0 và mọi Pi với i≠p đều là 0.
  • Đáp số có thể lớn — luôn lấy mod 109+7.

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