Tích của mảng

Đề bài

Mô tả

Cho một mảng a gồm n số nguyên. Bạn được phép thực hiện hai loại thao tác:

  1. Chọn hai vị trí ij (1i,jn, ij): ghi giá trị ai·aj vào ô thứ j và xoá số ở ô thứ i.
  2. Chọn một vị trí i và xoá số ở ô thứ i. Thao tác loại này được dùng không quá một lần, tại bất kỳ thời điểm nào.

Sau mỗi thao tác, số phần tử của mảng giảm đi một, nhưng chỉ số của các vị trí giữ nguyên. Các số đã bị xoá không được dùng trong những thao tác sau.

Nhiệm vụ của bạn là thực hiện đúng n1 thao tác sao cho số duy nhất còn lại trong mảng là lớn nhất có thể. Số này có thể rất lớn, nên thay vì in ra giá trị, bạn cần in ra một dãy thao tác dẫn tới số lớn nhất đó.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

In ra n1 dòng, mỗi dòng là một thao tác:

  • Thao tác loại 1: 1 i j, trong đó i, j là hai vị trí được chọn.
  • Thao tác loại 2: 2 i, trong đó i là vị trí được chọn. Không được có quá một dòng loại này.

Nếu có nhiều dãy thao tác cùng dẫn tới số lớn nhất, in ra bất kỳ dãy nào.

Ràng buộc

  • 2n2·105
  • 109ai109

Ví dụ

Input Output Giải thích
5
5 -2 0 1 -3
2 3
1 1 2
1 2 4
1 4 5
Xoá ô 3 (số 0), rồi nhân dồn các số còn lại: 5·(2)·1·(3)=30. Đây là giá trị lớn nhất.
2
2 -1
2 2 Xoá ô 2 (số 1), còn lại số 2. Giữ cả hai sẽ cho 2<2.
4
0 0 0 0
1 1 2
1 2 3
1 3 4
Mọi số đều bằng 0, kết quả tốt nhất là 0.

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