trang chủ / bài tập / splituniq

Tách mảng gần phân biệt

Đề bài

Mô tả

Ta gọi một mảng là phân biệt (unique) nếu nó không chứa phần tử nào lặp lại.

Ta gọi một mảng độ dài ngần phân biệt (almost unique) nếu có thể biến nó thành một mảng phân biệt bằng cách xóa đi không quá n/3 phần tử.

Ví dụ, mảng [1,2,1,3,2] là gần phân biệt vì sau khi xóa hai phần tử đầu tiên nó trở thành [1,3,2] (xóa 2 phần tử, trong khi 5/3=2). Mảng [1,2,1,3,1,2] không gần phân biệt vì cần xóa ít nhất 3 phần tử mới thành phân biệt, mà 6/3=2.

Cho một mảng phân biệt s độ dài n gồm các số nguyên không âm. Hãy tách s thành hai mảng ab cùng độ dài n, sao cho với mọi i (1in):

  • aibi là các số nguyên không âm;
  • si=ai+bi.

Đồng thời, cả hai mảng ab đều phải là mảng gần phân biệ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 phân biệt s1,s2,,sn.

Dữ liệu ra

Nếu có thể tách s thành hai mảng gần phân biệt, in ra YES ở dòng đầu tiên. Dòng thứ hai in mảng a, dòng thứ ba in mảng b. Nếu có nhiều đáp án, in ra bất kỳ đáp án hợp lệ nào.

Nếu không thể, in ra NO.

Ràng buộc

  • 1n105
  • 0si109
  • Các phần tử si đôi một phân biệt.

Ví dụ

Input Output Giải thích
6
12 5 8 3 11 9
YES
0 0 2 0 1 3
12 5 6 3 10 6
n=6 nên mỗi mảng được xóa tối đa 6/3=2 phần tử. Mảng a=[0,0,2,0,1,3]: xóa hai số 0 còn [0,2,1,3] phân biệt. Mảng b=[12,5,6,3,10,6]: xóa một số 6 là đủ. Cả hai đều gần phân biệt.
5
4 6 7 5 8
YES
0 2 3 0 0
4 4 4 5 8
5/3=2. Mảng a=[0,2,3,0,0]: xóa hai số 0 còn [0,2,3]. Mảng b=[4,4,4,5,8]: xóa hai số 4 còn [4,5,8]. Đáp án khác cũng được chấp nhận.

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