Đảo dấu dãy số

Đề bài

Mô tả

Cho một dãy n số nguyên a1,a2,,an với n chẵn. Bạn cần biến dãy này thành a1,a2,,an.

Bạn được phép thực hiện các thao tác, mỗi thao tác chọn hai chỉ số ij với i<j rồi làm một trong hai việc:

  1. Gán ai=ai+aj
  2. Gán aj=ajai

Số thao tác không được vượt quá 5000, và sau mỗi thao tác không phần tử nào được có giá trị tuyệt đối lớn hơn 1018.

Có thể chứng minh rằng luôn tồn tại đáp án. Bạn không cần cực tiểu hoá số thao tác.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t là số bộ dữ liệu.
  • Mỗi bộ dữ liệu gồm hai dòng:
    • Dòng thứ nhất chứa số nguyên chẵn n.
    • 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:

  • Dòng đầu in ra số thao tác k với 0k5000.
  • k dòng tiếp theo, mỗi dòng in ra ba số type i j, trong đó type bằng 1 hoặc 2 tương ứng với loại thao tác, và 1i<jn.

Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.

Ràng buộc

  • 1t20
  • 2n103, n chẵn
  • 1ai109

Ví dụ

Input Output Giải thích
2
4
1 1 1 1
4
4 3 1 2
12
1 1 2
2 1 2
1 1 2
2 1 2
1 1 2
2 1 2
1 3 4
2 3 4
1 3 4
2 3 4
1 3 4
2 3 4
12
1 1 2
2 1 2
1 1 2
2 1 2
1 1 2
2 1 2
1 3 4
2 3 4
1 3 4
2 3 4
1 3 4
2 3 4
Sáu thao tác đầu xử lý cặp (1,2): dãy [1,1] lần lượt thành [2,1][2,1][1,1][1,2][1,2][1,1]. Sáu thao tác sau làm tương tự với cặp (3,4). Đáp án của đề bài gốc chỉ dùng 8 thao tác, nhưng vì không cần cực tiểu hoá nên 12 vẫn được chấp nhận.
1
2
1 1
6
1 1 2
2 1 2
1 1 2
2 1 2
1 1 2
2 1 2
Chỉ có một cặp duy nhất, sáu thao tác biến [1,1] thành [1,1].

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