Sắp xếp xâu bằng phép đảo

Đề bài

Mô tả

Cho n xâu chỉ gồm các chữ cái latin in thường. Với mỗi xâu i, đảo ngược nó (chữ cái đầu thành cuối, thứ hai thành thứ áp cuối, ...) tốn ci đơn vị năng lượng.

Bạn không được phép đổi chỗ hai xâu bất kỳ — thao tác duy nhất là đảo ngược một xâu. Hãy tìm tổng năng lượng nhỏ nhất cần dùng để dãy n xâu (theo thứ tự đã cho) được sắp xếp theo thứ tự từ điển không giảm, hoặc thông báo điều đó là không thể.

Xâu A nhỏ hơn xâu B theo thứ tự từ điển nếu A là tiền tố thực sự của B (|A|<|B|A trùng với |A| ký tự đầu của B), hoặc tại vị trí đầu tiên mà chúng khác nhau, ký tự của A nhỏ hơn ký tự của B. Hai xâu bằng nhau đứng cạnh nhau không vi phạm điều kiện sắp xếp.

Dữ liệu vào

  • Dòng đầu: số nguyên n — số lượng xâu.
  • Dòng thứ hai: n số nguyên c1,c2,,cn — chi phí đảo ngược của từng xâu.
  • n dòng tiếp theo: dòng thứ i chứa xâu thứ i, gồm các chữ cái latin in thường.

Dữ liệu ra

In ra tổng năng lượng nhỏ nhất cần dùng, hoặc 1 nếu không thể.

Ràng buộc

  • 2n105
  • 0ci109
  • Tổng độ dài các xâu không vượt quá 105.

Ví dụ

Input Output Giải thích
2
1 2
ba
ac
1 Đảo xâu thứ nhất "ba" → "ab", được dãy "ab", "ac" đã sắp xếp. Chi phí 1.
3
1 3 1
aa
ba
ac
1 Đảo xâu thứ ba "ac" → "ca", được "aa", "ba", "ca". Chi phí 1.
2
5 5
bbb
aaa
-1 Cả hai xâu đối xứng — đảo không làm thay đổi, dãy vẫn không sắp xếp được.
2
3 3
aaa
aa
-1 "aaa" > "aa" theo thứ tự từ điển; đảo cũng không giúp được.

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