trang chủ / đề bài / funcfact

Phân tích hàm

Đề bài

Mô tả

Ký hiệu [n]={1,2,…,n}. Ta viết f:[x]→[y] khi hàm f được xác định tại mọi điểm nguyên 1,2,…,x và mọi giá trị của nó đều là số nguyên thuộc [1,y].

Cho hàm f:[n]→[n]. Hãy tìm một số nguyên dương m cùng hai hàm g:[n]→[m] và h:[m]→[n] thoả mãn đồng thời:

  • g(h(x))=x với mọi x∈[m];
  • h(g(x))=f(x) với mọi x∈[n];

hoặc xác định rằng không tồn tại bộ (m,g,h) nào như vậy.

Nếu có nhiều đáp án hợp lệ, bạn được in ra bất kỳ đáp án nào. Dữ liệu đảm bảo rằng nếu bài toán có lời giải thì cũng có lời giải với m≤106.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên f(1),f(2),…,f(n).

Dữ liệu ra

Nếu không tồn tại đáp án, in ra một số −1.

Ngược lại:

  • Dòng đầu in số m.
  • Dòng thứ hai in n số g(1),g(2),…,g(n).
  • Dòng thứ ba in m số h(1),h(2),…,h(m).

Ràng buộc

  • 1≤n≤105
  • 1≤f(i)≤n
  • 1≤m≤106

Ví dụ

Input Output Giải thích
3
1 2 3
3
1 2 3
1 2 3
f là hàm đồng nhất, nên chọn m=n=3 với g và h đều là hàm đồng nhất.
3
2 2 2
1
1 1 1
2
Với m=1: g(h(1))=g(2)=1, và h(g(x))=h(1)=2=f(x) với mọi x.
2
2 1
-1 Nếu tồn tại đáp án thì f(f(1)) phải bằng f(1), nhưng ở đây f(f(1))=f(2)=1≠2=f(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.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