trang chủ / đề bài / twoarrsum

Hai mảng và tổng hàm

Đề bài

Mô tả

Cho hai mảng a và b, cùng có n phần tử.

Với mỗi cặp chỉ số 1≤l≤r≤n, định nghĩa

f(l,r)=∑l≤i≤rai·bi.

Bạn được phép hoán vị tuỳ ý các phần tử của mảng b (mảng a giữ nguyên thứ tự). Hãy chọn cách hoán vị sao cho giá trị

S=∑1≤l≤r≤nf(l,r)

đạt giá trị nhỏ nhất.

Vì S có thể rất lớn, hãy in ra S theo modulo 998244353. Lưu ý: bạn phải cực tiểu hoá chính giá trị S, không phải cực tiểu hoá phần dư của nó khi chia cho 998244353.

Dữ liệu vào

  • Dòng đầu tiên chứa một số nguyên n là số phần tử của mỗi mảng.
  • Dòng thứ hai chứa n số nguyên a1,a2,…,an.
  • Dòng thứ ba chứa n số nguyên b1,b2,…,bn.

Dữ liệu ra

In ra một số nguyên duy nhất là giá trị nhỏ nhất của S sau khi hoán vị mảng b, lấy theo modulo 998244353.

Ràng buộc

  • 1≤n≤2·105
  • 1≤ai≤106
  • 1≤bj≤106

Ví dụ

Input Output Giải thích
5
1 8 7 2 4
9 7 2 9 3
646 Một cách hoán vị tối ưu là b=[9,2,3,9,7]. Khi đó S=1·9·5+8·2·8+7·3·9+2·9·8+4·7·5=45+128+189+144+140=646, trong đó hệ số của vị trí i là số đoạn [l,r] chứa i.
2
1 3
4 2
20 Giữ nguyên b=[4,2]. Ta có f(1,1)=4, f(2,2)=6, f(1,2)=10, nên S=4+6+10=20. Hoán vị còn lại cho S=1·2·2+3·4·2=28>20.
1
1000000
1000000
757402647 Chỉ có một đoạn duy nhất, S=106·106=1012. Kết quả in ra là 1012mod998244353=757402647, tuy phần dư này nhỏ hơn 1012 nhưng ta vẫn phải cực tiểu hoá S chứ không phải phần dư.

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