chuyên đề số học chuyên đề số học bài 1 amount of degrees một số a gọi là có bậc k đối với cơ số b nếu như a bx1 bx2 bxk trong đó x1 x2 x3 xk ví dụ 17 có bậc 2 đối với cơ số 2 vì 17

9 22 0
chuyên đề số học chuyên đề số học bài 1 amount of degrees một số a gọi là có bậc k đối với cơ số b nếu như a bx1 bx2 bxk trong đó x1 x2 x3 xk ví dụ 17 có bậc 2 đối với cơ số 2 vì 17

Đang tải... (xem toàn văn)

Thông tin tài liệu

Hoặc một cách cải tiến khác cũng đưa về xâu dựa trên nhận xét : xâu con chung dài nhất của X , Y = Y tương đương với các phần tử của Y xuất hiện đúng theo thứ tự này trong xâu X , tức là[r]

(1)

CHUYÊN ĐỀ SỐ HỌC Bài : Amount of Degrees

Một số A gọi có bậc K số B :

 A = Bx1 + Bx2 + … + Bxk

( x1  x2  x3 …  xk )

Ví dụ :

 17 có bậc số 17 = 24 + 20  151 có bậc số 151 = 53 + 52 + 50

Yêu cầu : Cho trước đoạn [X,Y] Hãy xác định xem đoạn có số có bậc K số B

Giới hạn : +  X  Y  109

+  K  20,  B 

+ Bộ nhớ : 200KB + Time limit : s Input

X Y K B Output

Gồm số kết tìm Ví dụ

Input 15 20 2 Output

( Giải thích : Đó số 17 = 24 + 20 . 18 = 24 + 21. 20 = 24 + 22 )

Thuật giải :

Ta đưa toán tốn nhỏ cho biết đoạn [1,A] có số có bậc K số B

Với giá trị A ta xác định Bn cho Bn+1 > A Áp dụng tính chất: Bn > Bn-1 + Bn-2 + … B0  A > Bn-1 + Bn-2 + … B0.

 Tổng tổ hợp K phần tử (n-1) phần tử < A ( tức : A >

Bx1 + Bx2 + …+ Bxi +… + Bxk ( với xi  n–1 ) ).

 Như ta giải xong vấn đề với số mà không chứa Bn, không

chứa Bn số lượng số thoả mãn = Tổ hợp chập K (n-1) Ta tiếp tục giải quyết vấn đề với số mà có dạng = Bn + Bx2+…+Bxk.Dễ thấy vấn đề lại quay tìm số lượng số có bậc (K-1) số B đoạn [1,A-Bn] không chứa Bn, vậy ta cần xác định lại n mà thôi, n(mới)  n (cũ) –

Như toán giải Nói tóm lại đặc trưng cho QHĐ = Đệ quy với công thức truy hồi đơn giản :

(2)

Bài : Nikifor – 2

Nikifor có số X khơng phải số mà cần Anh ta muốn đổi số X lấy số Y mà thích Để đổi số Y phải chọn số K cho ta đạt số Y cách xoá vài chữ số số X biểu diễn hệ số K

Ví dụ : X = 19 , Y = , K =

Biểu diễn X hệ số = 201 Biểu diễn Y hệ số = 21

Vậy ta đạt số Y cách xoá số biểu diễn số X Yêu cầu : Hãy tìm số K nhỏ

Giới hạn : +  X , Y  106

+ Time limit s , nhớ 200 KB Input

X Y Output

Nếu tồn K ghi K nhỏ , khơng tồn ghi “No Solution” ( Lưu ý số K  10 , khơng thiết nhỏ 10 )

Ví dụs Input 19 Output

Thuật giải :

Ta duyệt tất số K từ -> Y Tuy nhiên điều muốn nói làm cách để kiểm tra xem với số K có đáp ứng yêu cầu hay không cách nhanh ! Nếu làm bình thường ta xây dựng biểu diễn X, Y Nếu xâu chung dài X Y = Y -> Đáp ứng yêu cầu ! Hoặc cách cải tiến khác đưa xâu dựa nhận xét : xâu chung dài X , Y = Y tương đương với phần tử Y xuất theo thứ tự xâu X , tức xâu chung dài Y = Xi1Xi2…Xik i1 < i2 < … < ik -> Ta sủ dụng thuật tốn mơ tả sau : ( Cải tiến )

Ok := True ;

While Y <>  Begin

While X[1] <> Y[1] Begin Delete(X,1,1) ;

If X =  then Begin

Ok := False ; Exit ; End ;

End ;

Delete(X,1,1) ; Delete(Y,1,1) ; End ;

(3)

xâu ta sử dụng phép div , hệ số K ta sử dụng phép div K giống ta sử dụng phép shr trong hệ nhị phân ! Nó dịch chuyển số X bên phải chữ số ! Ta áp dụng cải tiến trường hợp so sánh chữ số cuối chữ số ! Và chữ số cuối X = X mod K , chữ số cuối Y = Y mod K Thủ tục Delete thay X = X div K Như thuật toán với cải tiến giảm nhiều thời gian lãng phí phải tạo xâu, sinh luỹ thừa ! Về mặt thời gian chạy tốt !

Ngồi cịn thuật tốn có cấp độ O( (logY)3 ) mà ta không đề cập tới đây mà nhắc tới chương khác Mặc dù với X , Y  106 ta n tâm

thuật tốn chạy chậm gấp 2,5 lần thuật toán duyệt với cải tiến ! Bài : Central Heating

Trong trường đại học có hệ thống N lò sưởi đánh số từ 1-> N ! N lò sưởi điều khiển N kỹ sư đánh số từ -> N ! Mỗi lị sưởi có cơng tắc tắt/bật lị sưởi mà thơi ! Tuy nhiên ối oăm thay kỹ sư lại điều khiển vài lò sưởi khơng phải lị sưởi! Và họ làm định trực lị sưởi họ thay đổi cơng tắc tất lị sưởi mà họ điều khiển, bật -> tắt tắt -> bật Kỹ sư thứ i tới vào trường vào lúc i Ban giám hiệu trường muốn đảm bảo sức khoẻ cho sinh viên nên phải phân công kỹ sư trực thứ N+1 tất lò sưởi trạng thái bật !

Yêu cầu : Bạn thuê giúp đỡ Ban Giám Hiệu trường ! Hãy xem kỹ sư phải định trực để đáp ứng yêu cầu ban giám hiệu kỹ sư ! Nếu có nhiều phương án cho biết phương án mà số kỹ sư bị định

Giới hạn : +  N  200

+ Time limit s , nhớ 200 KB Input

- Dòng ghi số nguyên N

- N dòng có cấu trúc gồm số Li ( số lò sưởi mà kỹ sư thứ i điều khiển ) tiếp sau Li số số lò sưởI mà kỹ sư i điều khiển )

Output

- Nếu khơng có phương án ghi dịng : “No solution” Ngược lại : - Dòng ghi số K số kỹ sư tối thiểu định

- Dòng gồm K số số kỹ sư định Ví dụ :

(4)

Thuật giải :

Đây giải hệ phương trình nhị phân đơn giản Ta sử dụng khử Gauss để giải hệ Nghiệm có số phần tử = phương án sử dụng kỹ sư ! Cấp độ khử Gauss vào khoảng O(N3) chấp nhận

Bài : Simple Calculations

Có dãy số thực gồm N+2 phần tử A0 , A1, … , An+1 Dãy có tính chất đặc biệt A[i] = ( A[i-1] + A[i+1] ) / – C[i] với i = 1,2,3…,n

Yêu cầu : Cho dãy C A0 , An+1 Hãy tính A1 Giới hạn : +  N  3000

+ -1000  Ai , Ci  1000

+ Time limit s , nhớ 200 KB Input

N A0 An+1 C1 C2 … Cn Output

A1 ( Ghi xác đến chữ số sau dấu phẩy ) Ví dụ :

Input

50.50 25.50 10.15 Output 27.85

Thuật giải :

Ta có A(1) = ( A(0) + A(2) ) / – C(1) A(2) = ( A(1) + A(3) ) / – C(2) …

A(n) = ( A(n-1) + A(n+1) ) / – C(n)

 A(1) + A(2) + … A(n) = ( A(0) + A(n+1) + A(1) + A(n) ) / + A(2) + A(3) + …

+A(n-1) – ( C(1) + C(2) + C(3) +…+C(n) )

 A(1) + A(n) = A(0) + A(n+1) – 2*( C(1) + C(2) + C(3) +…+C(n) )

Tương tự ta có : A(1) + A(n-1) = A(0) + A(n) – 2*( C(1) + C(2) + C(3) +…+C(n-1) ) ………

A(1) + A(1) = A(0) + A(2) – 2* C(1)

 A(1) * (n+1) = A(0) * n + A(n+1) – *( C(1) + C(2) + C(3) +…+C(n) )

(5)

 Ta tính A(1) Cấp độ thuật tốn O(n) Cũng với phương pháp ta tính

được tất phần tử dãy A với cấp độ O(n) Bài : Nikifor – 3

Nikifor có số tự nhiên N Anh ta người yêu thích số ( giống ) Bởi số phải số chia hết cho Nhưng tiếc số N lại chưa phải bội Bây muốn đổi vị trí chữ số số N cho tạo số mà số chia hết cho Vì Nikifor người đặc biệt nên số N đặc biệt Số N ln có đủ chữ số , , biểu diễn thập phân ! Hơn số N bội muốn biến đổi để số khác chia hết cho

Yêu cầu : Hãy giúp Nikifor đổi vị trí chữ số số N cho số chia hết cho

Giới hạn : + số N có khơng q 1000 chữ số có chữ số + Time limit : 1s , nhớ 200KB

Input

- Dòng : số X số test (  X  10000 )

- X dòng dòng ghi số N Output

N dòng ghi kết test , test vơ nghiệm ghi “No solution” ngược lại ghi số N sau biến đổi

Ví dụ : Input 10234 531234 Output 32410 353241

Thuật giải :

Nhận thấy số N ln có đủ chữ số 1,2,3,4 Với số ta tạo thành số dư số dư từ 0->6 :

Ví dụ : 1234 mod = , 3241 mod = …

Như ta có cách làm hay cho : đặt tuỳ ý chữ số # vào đầu cho dư lại chữ số , , , Với chữ số ta đặt vào , sau đặt chữ số chữ số 1,2,3,4 cuối ta duyệt hoán vị xem hốn vị số N tạo chia hết cho Vì với số dư R có hốn vị nên dù N có dạng có số khác dạng -> Bài tốn khơng vơ nghiệm ! Vì 4! = 24 -> Chạy nhanh !

(6)

Cha Pinocchio muốn làm lại cho Pinocchio mũi Ơng có N gỗ , gỗ có độ dài Ai Là người u thích tốn học ơng ta đưa giải thuật sau để lấy gỗ có độ dài cần thiết :

 Nếu cịn lại gỗ ơng ta lấy gỗ làm mũi cho Pinocchio  Nếu >= gỗ ơng ta làm sau :

 Chọn gỗ i , j cho Ai Aj có độ dài nhỏ số N  Nếu Ai = Aj vứt bỏ đi, lại quay bước

 Nếu Ai < Aj ta cắt Aj đoạn = Ai ( tức Aj = Aj – Ai)

Quay lại bước

Yêu cầu : Hãy tính xem độ dài mà gỗ ông ta nhận Giới hạn : +  N  100000

+  Ai  109

+ Time limit 1s , nhớ 200 KB Input

N A1 A2 … An Output

Gồm số X độ dài gỗ đạt Ví dụ:

Input 3 Output

Thuật giải :

Dễ dàng CM ước chung lớn N số Ta dùng thuật tốn Oclit Cấp độ tính tốn O(n)

Bài : Button

(7)

Giới hạn : + < K < 109.

+ Time limit 1s , nhớ 200KB Input

K Output L Ví dụ : Input Output

Thuật giải :

Đây tốn trị chơi cổ điển, số L để người chắn thắng K phải chia hết cho (L+1) Vậy ước nhỏ K ( mà > ) – Khi tìm ước cần ý đến số trường hợp đặc biệt 14 chẳng hạn , kết trả mà không cẩn thận ( tìm ước = hàm kiểm tra nguyên tố lấy Sqrt Sqrt(14) = 3.7416 nên dẫn tới sai xót ! )

Bài : Combinations

Yêu cầu : Rất đơn giản ! Hãy tính xem C có ước ngun tố với C tính = CT :

C = N! / ( ((N-M)!) * (M!) ) Tất nhiên N M số cho trước Giới hạn : +  M  N  60000

+ Time limit 1s , Bộ nhớ 200KB Input

N M Output

Gồm số số ước C Ví dụ :

Input Output

( Giải thích : C = 35 = 5*7 )

Thuật giải :

Ta phân tích N! , M! thành tích số nguyên tố

 N! = 2x1 * 3x2 * …

M! = 2y1 * 3y2 * … (N-M)!= 2z1 * 3z2*…

(8)

Ta việc đếm thơi , với xi-yi-zi > ta tăng số phần tử tìm thấy lên Thuật tốn hồn tồn đơn giản Tuy nhiên để thuật toán chạy nhanh ta nên áp dụng công thức Lagrăng sau :

Số mũ số nguyên tố P N! = [N/P] + [N/(P2)] + … [N/(Pk)]. với [q] = phần nguyên số q

Bài : Fibonacci sequence

Có dãy số dài vơ hạn thoả mãn tính chất Fibonacci Đó : F[i] = F[i-1] + F[i-2] ( Với i thuộc Z ) Yêu cầu : Cho biết F[i] F[j] Hãy tính F[n]

Giới hạn : + -1000  i  j , n  1000

+ -MaxLongInt  F[i] , F[j] , F[n]  MaxLongInt

+ Time limit 1s , nhớ 200KB Input

i F[i] j F[j] n Output

F[n] Ví dụ : Input

3 –1 f(i-1) + f(i) = f(i+1); f(i)+f(i+1)=f(i+2) f(i-2)+2f(i-1) = f(i+1) Output

12

Thuật giải :

Đối với có cách làm Giả sử i < j

Cách : Duyệt nhị phân giá trị F[i+1] Với giá trị F[i+1] ta kiểm tra xem số F[j] có với đề khơng ! Nếu dừng lại sinh F[n] Biết F[i] , F[i+1] rõ ràng ta tính tồn phần tử thuộc dãy

Cách : Dựa vào CT :

F[i+1] = * F[i-1] + * F[i] ; F[i+2] = * F[i-1] + * F[i] ; F[i+3] = * F[i-1] + * F[i] ; F[i+4] = * F[i-1] + * F[i] ; F[i+5] = * F[i-1] + * F[i] ;

F[j] = x * F[i-1] + y * F[i]

Nếu để ý ta thấy hệ số F[i-1] , F[i] dãy Fibonacci Vậy cơng việc cịn lại đơn giản Ta việc tính xem x , y xong ! Chú ý chút nho nhỏ dùng Cách x, y lớn nên khai báo kiểu Extended tốt

(9)

SKBJunk 307 rô bốt đời trung tâm nghiên cứu vũ trụ VNSC ( Viet Nam Space Center ) Nó trang bị khả tính tốn siêu việt An người thích tiếng, người thấy SKBJunk 307 tính tốn cịn chậm máy tính thơng thường, thách đấu với Nội dung thi tính xem 1N + 2N + 3N + 4N có chữ số cuối An biết thua nên đã thuê bạn giúp

u cầu : Hãy lập trình tính xem 1N + 2N + 3N + 4N có chữ số cuối cùng. Giới hạn : +  N  300000

+ Time limit s , nhớ 200KB Input

N Output

Gồm số X kết tính Ví dụ:

Input Output

Thuật giải :

Dễ thấy kết trả ln số : , , Kết toán CM Euler :

X(N) = X(N mod 2000)

Ngày đăng: 12/04/2021, 16:07

Tài liệu cùng người dùng

Tài liệu liên quan