Chia hai tập p mũ k

Đề bài

Mô tả

Cho n số có dạng pk1,pk2,,pkn (cùng cơ số p). Bạn cần chia n số này thành hai tập hợp rời nhau (mỗi số thuộc đúng một tập, và hợp của hai tập bằng toàn bộ dãy) sao cho chênh lệch tuyệt đối giữa tổng hai tập là nhỏ nhất.

Gọi giá trị chênh lệch nhỏ nhất là D. Hãy in ra Dmod(109+7).

Lưu ý. Bạn phải tối thiểu hoá D trước, rồi mới lấy phần dư. Ví dụ nếu D=2 nhưng có một cách chia khác cho chênh lệch 109+8 thì đáp án vẫn là 2, không phải 1.

Dữ liệu vào

Dòng đầu chứa số nguyên t — số bộ test.

Với mỗi bộ test:

  • Dòng thứ nhất chứa hai số nguyên np.
  • Dòng thứ hai chứa n số nguyên k1,k2,,kn.

Dữ liệu ra

Với mỗi bộ test, in ra một số nguyên trên một dòng — chênh lệch nhỏ nhất modulo 109+7.

Ràng buộc

  • 1t105
  • 1n,p106
  • 0ki106
  • Tổng n trên tất cả các bộ test không vượt quá 106.

Ví dụ

Input Output Giải thích
4
5 2
2 3 4 4 3
3 1
2 10 1000
4 5
0 1 1 100
1 8
89
4
1
146981438
747093407
Test 1: các số là 4,8,16,16,8. Chia thành {4,8,16}{8,16}, chênh lệch =4.
Test 2: p=1 nên mọi số đều bằng 1. Với 3 số 1, chênh lệch tối thiểu là 1.
Test 3: các số là 1,5,5,5100. Đáp án mod 109+7.
Test 4: chỉ có một số 889, không chia được — chênh lệch chính là 889mod(109+7).
1
1 2
88
140130951 Chỉ có 288 trong một tập, tập kia rỗng. Đáp án là 288mod(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.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