Cân bằng mảng

Đề bài

Mô tả

Cho một mảng a gồm n số nguyên dương, đánh số từ 1 đến n.

Bạn được phép thực hiện thao tác sau không quá 3n lần:

  1. Chọn ba số nguyên i, j và x với 1≤i,j≤n và 0≤x≤109;
  2. Gán ai:=ai−x·i và aj:=aj+x·i.

Lưu ý rằng lượng chuyển đi là x·i, trong đó i là chỉ số của phần tử cho, không phụ thuộc vào j. Cho phép chọn i=j (khi đó mảng không đổi) và cho phép x=0.

Sau mỗi thao tác, mọi phần tử của mảng đều phải không âm.

Hãy tìm một dãy không quá 3n thao tác sao cho sau khi thực hiện xong, tất cả các phần tử của mảng bằng nhau; hoặc cho biết điều đó là không thể.

Dữ liệu vào

Dòng đầu chứa một số nguyên t là số bộ dữ liệu. Sau đó là t bộ dữ liệu.

Dòng đầu của mỗi bộ 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 a1,a2,…,an.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra kết quả như sau:

  • Nếu không tồn tại dãy thao tác thoả mãn, in ra −1;
  • Ngược lại, in ra một số nguyên k với 0≤k≤3n là số thao tác. Sau đó in ra k dòng, dòng thứ m chứa ba số nguyên i, j, x (1≤i,j≤n; 0≤x≤109) mô tả thao tác thứ m.

Nếu có nhiều dãy thao tác thoả mãn, in ra dãy bất kỳ. Bạn không cần cực tiểu hoá k.

Ràng buộc

  • 1≤t≤104
  • 1≤n≤104
  • 1≤ai≤105
  • Tổng n trên tất cả các bộ dữ liệu không vượt quá 104

Ví dụ

Input Output Giải thích
3
4
2 16 4 18
6
1 2 3 4 5 6
5
11 19 1 1 3
8
2 1 8
1 3 2
3 1 2
1 4 2
4 1 5
1 2 10
1 3 10
1 4 10
-1
12
1 2 1
2 1 10
1 3 2
3 1 1
1 4 3
4 1 1
1 5 2
5 1 1
1 2 7
1 3 7
1 4 7
1 5 7
Bộ 1: tổng bằng 40, chia hết cho 4, giá trị chung là 10; lời giải dùng 8≤12 thao tác. Bộ 2: tổng bằng 21 không chia hết cho 6 nên vô nghiệm. Bộ 3: tổng bằng 35, giá trị chung là 7.
4
1
1
1
100000
2
1 1
2
1 2
0
0
3
1 2 1
2 1 1
1 2 1
-1
Hai bộ đầu có n=1 nên mảng đã "bằng nhau", in 0. Bộ 3 đã bằng nhau sẵn nhưng dãy 3 thao tác ở trên vẫn hợp lệ vì 3≤3n=6. Bộ 4 có tổng 3 không chia hết cho 2.

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