Kỹ thuật sàng - vét cạn - tham lam
Số bị nhầm tai hại (bài 2 - tham lam)
Nộp bàiPoint: 1
Trong một buổi học toán, giáo viên viết 2 số nguyên A và B và yêu cầu Tý thực hiện phép cộng. Tý không bao giờ tính toán sai nhưng thỉnh thoảng cậu ta chép các con số một cách không chính xác. Lỗi duy nhất của Tý là ghi nhầm '5' thành '6' hoặc ngược lại.
Cho hai số, A và B, tính tổng lớn nhất và nhỏ nhất mà Tý có thể nhận được nếu bị nhầm.
Input Format: 1 dòng duy nhất chứa 2 số A và B
Ràng buộc: ~1 \leq A \leq B \leq 10^6~
Input 01:
35 36
Output 01:
72 70
Input 02:
891 746
Output 02:
1637 1636
Đổi tiền (tham lam)
Nộp bàiPoint: 1
Tại ngân hàng có các mệnh giá băng 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000. Tổng số tiền cần đổi có giá trị bằng N. Hãy xác định xem có ít nhất bao nhiêu tờ tiền sau khi đổi tiền?
Dòng duy nhất chứa số nguyên N
Ràng buộc: 1<=N<=10^9
Đầu ra: In ra số tờ tiền tối thiểu
Input:
138
Output:
6
Max product sum (tham lam)
Nộp bàiPoint: 1
Cho mảng A gồm N phần tử, nhiệm vụ của bạn là sắp đặt lại vị trí các phần tử trong mảng và tính toán giá trị lớn nhất của biểu thức:

Đầu vào: Dòng 1 chứa số nguyên dương N; Dòng 2 chứa N số nguyên của mảng A[] viết cách nhau một dấu cách
Ràng buộc: 1<=N<=10^6; 1<=A[i]<=10^9;
Đầu ra: In ra kết quả của bài toán chia dư với 10^9 + 7
Input:
6
8 1 7 9 8 1
Output:
150
Chia tập (tham lam)
Nộp bàiPoint: 1
Cho mảng A[] gồm N số nguyên không âm và số K. Nhiệm vụ của bạn là hãy chia mảng A[] thành hai mảng con có kích cỡ K và N-K sao cho hiệu giữa tổng hai mảng con là lớn nhất. Ví dụ với mảng A[] = {8, 4, 5, 2, 10}, K=2 ta có kết quả là 17 vì mảng A[] được chia thành hai mảng {4, 2} và { 8, 5, 10} có hiệu của hai mảng con là 23-6=17 là lớn nhất.
Đầu vào: Dòng duy nhất chứa 2 số nguyên N và K; Dòng thứ 2 gồm N số của mảng A[]
Ràng buộc: 1<=K<=N<=10^6; 0<=A[i]<=10^9;
Đầu ra: In ra đáp án của bài toán
Input:
6 4
3 10 10 7 5 2
Output:
27
Sắp xếp tham lam
Nộp bàiPoint: 1
Cho mảng A[] gồm N số, hãy thực hiện các thao tác theo nguyên tắc dưới đây:
Ta chọn một mảng con sao cho phần tử ở giữa của mảng con cũng là phần tử ở giữa của mảng A[] (trong trường hợp N lẻ).
Đảo ngược mảng con đã chọn trong mảng A[]. Ta được phép chọn mảng con và phép đảo ngược mảng con bao nhiêu lần tùy ý.
Hãy cho biết ta có thể sắp xếp được mảng A[] bằng cách thực hiện các thao tác kể trên hay không?
Ví dụ với mảng A[] = (1, 6, 3, 4, 5, 2, 7} ta có câu trả lời là YES vì: ta chọn mảng con {3, 4, 5) và đảo ngược để nhận được mảng All=(1, 6, 5, 4, 3, 2, 7}, chọn tiếp mảng con {6, 5, 4, 3, 2} và đảo ngược ta nhận được mảng A[]=(1, 2, 3, 4, 5, 6, 7}.
Đầu vào:
Dòng 1 chứa số nguyên dương N là số lẻ.
Dòng 2 chứa N số nguyên của mảng A[]
Ràng buộc: 1 <= N <= 10^6; 0 <= A[i] <= 10^9
Đầu ra: In ra YES hoặc NO là đáp án của bài toán
Input 01:
5
1 4 3 2 5
Output 01:
YES
Input 02:
5
1 3 8 7 3
Output 02:
NO
Max product of two array (tham lam)
Nộp bàiPoint: 1
Cho mảng A[], B[] đều có N phần tử. Nhiệm vụ cúa bạn là tìm giá trị lớn nhất của biểu thức P= A[0]B[0] + A[1]B[1] + ..+A[N-1]*B[N-1] bằng cách tráo đổi vị trí các phần tử của cả mảng A[] và B[].
Đầu vào: Dòng 1 chứa số nguyên dương N; Dòng 2 chứa N số nguyên của mảng A[]; Dòng 3 chứa N số nguyên của mảng B[]
Ràng buộc: 1 <= N<= 10^5; 0 <= A[i], B[i] <= 10^6
Đầu ra: In ra đáp án của bài toán
Input:
7
9 4 5 3 9 4 10
9 5 3 1 10 1 5
Output:
270
Số may mắn 2
Nộp bàiPoint: 1
Hoàng yêu thích các số may mắn. Ta biết rằng một số là số may mắn nếu biểu diễn thập phân của nó chỉ chứa các chữ số may mắn là 4 và 7. Ví dụ, các số 47, 744, 4 là số may mắn và 5, 17, 467 không phải. Hoàng muốn tìm số may mắn bé nhất có tổng các chữ số bằng n. Hãy giúp anh ấy.
Đầu vào: Dòng duy nhất chứa số nguyên dương n
Ràng buộc: 1<=n<=10^6;
Đầu ra: In ra đáp án của bài toán, nếu không tồn tại đáp án thì in ra -1
Input:
16
Output:
4444
Sắp đặt xâu ký tự
Nộp bàiPoint: 1
Cho xâu kí tự chỉ bao gồm các kí tự in thường, hãy kiểm tra xem có thể sắp đặt lại các kí tự trong xâu sao cho không có 2 kí tự kề nhau nào giống nhau hay không?
Đầu vào: Dòng duy nhất chứa xâu S
Ràng buộc: 1<=len(S)<=10000;
Đầu ra: Nếu có thể sắp đặt lại xâu kí tự in ra YES, ngược lại in ra NO.
Input:
aqeaaqwq
Output:
YES
Số nhỏ nhất (tham lam)
Nộp bàiPoint: 1
Cho hai số nguyên dương S và D, trong đó S là tổng các chữ số và D là số lượng các chữ số của một số. Nhiệm vụ của bạn là tìm số nhỏ nhất thỏa mãn S và D?
Đầu vào: 1 dòng gồm 2 số S, D
Ràng buộc: 1<=S,D<=1000;
Đầu ra: In ra số nhỏ nhất có D chữ số và có tổng bằng S, nếu không tìm được đáp án thì in ra -1
Input:
12 8
Output:
10000029
In ra các số nguyên tố từ 1 đến n (sàng số nguyên tố)
Nộp bàiPoint: 1
In ra các số nguyên tố từ 1 đến n sử dụng sàng số nguyên tố
Ràng buộc: n đến 10^6
Input 01:
10
Output 01:
2 3 5 7
Input 02:
100
Output 02:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Đếm ước của n giai thừa
Nộp bàiPoint: 1
Đếm số lượng ước của n!.
Input: Dòng đầu tiên là số lượng test case T (1≤T≤100). Mỗi test case là một số nguyên không âm n (1≤n≤100).
Output: In ra kết quả mỗi test case trên 1 dòng.
Ví dụ:
Input:
2
10
97
Output:
270
26494182162432000
Truy vấn số lượng số nguyên tố trong đoạn (mảng 1 chiều nâng cao)
Nộp bàiPoint: 1
Cho K truy vấn, bạn hãy đếm các số nguyên tố trong khoảng từ Left đến Right
Ràng buộc: ~1 \leq K \leq 10^4~; ~1 \leq L, R \leq 10^6~
Input:
9
3 17
1 11
2 18
1 15
4 15
4 18
4 17
2 12
4 20
Output:
6
5
7
6
4
5
5
5
6
Số nguyên tố trong đoạn
Nộp bàiPoint: 1
Viết chương trình cho phép nhập vào hai số nguyên dương và tìm tất cả các số nguyên tố nằm trong khoảng đó.
INPUT:
10 50
OUTPUT:
11 13 17 19 23 29 31 37 41 43 47
Đếm số lượng số nguyên tố nhỏ hơn N
Nộp bàiPoint: 1
Cho số nguyên dương N ≤ 10^6. Hãy đếm có bao nhiêu số nguyên tố nhỏ hơn hoặc bằng N.
Input:
10
Output:
4
Số nguyên tố kề nhau
Nộp bàiPoint: 1
Cho hai số nguyên dương N và M thỏa N < M ≤ 10^3. Hãy tìm tất cả các cặp số nguyên tố liên tiếp nằm trong đoạn [N, M] (bao gồm hai đầu) có hiệu nhỏ nhất. Một cặp số nguyên tố liên tiếp là hai số nguyên tố p và q sao cho không tồn tại số nguyên tố nào nằm giữa p và q và p < q.
Dữ liệu vào: Một dòng chứa hai số nguyên N và M (cách nhau bằng dấu cách hoặc xuống dòng).
Dữ liệu ra:
• Nếu tồn tại ít nhất một cặp số nguyên tố liên tiếp trong đoạn [N, M] thì in ra từng cặp trên một dòng, theo thứ tự tăng dần của cặp (theo thành phần đầu). Mỗi dòng có dạng: p q (với p và q là hai số nguyên tố liên tiếp thỏa N ≤ p < q ≤ M, và q - p bằng hiệu nhỏ nhất tìm được.)
• Nếu trong đoạn [N, M] có dưới 2 số nguyên tố (không thể tạo được cặp nào) thì in ra một dòng duy nhất chứa: -1
Ràng buộc: 0 ≤ N < M ≤ 1000
Input:
2 20
Output:
2 3
Giải thích: Các số nguyên tố trong đoạn là 2, 3, 5, 7, 11, 13, 17, 19). Hiệu nhỏ nhất giữa hai số nguyên tố liên tiếp là 1, cặp thỏa là (2,3)
Input:
3 13
Output:
3 5
5 7
11 13
Input:
14 16
Output:
-1
Số mũ của một số nguyên tố trong N!
Nộp bàiPoint: 1
Cho hai số nguyên N và p (với p là số nguyên tố).
Tính số mũ của p trong N!, tức là số lần p xuất hiện trong phân tích thừa số nguyên tố của N!.
Đầu vào nhập 2 số nguyên N và P
Đầu ra: In ra số mũ của P trong N giai thừa
Input:
10 2
Output:
8
Số 0 tận cùng của N!
Nộp bàiPoint: 1
Cho là số nguyên N ≤ 10^9.
Tính số chữ số 0 tận cùng của N!
Đầu vào: Nhập N
Đầu ra: In ra số lượng chữ số 0 tận cùng của N!
Input:
100
Output:
24
Uớc nguyên tố lớn nhất của N!
Nộp bàiPoint: 1
Cho N là số nguyên nhỏ hơn hoặc bằng 10^6
Tìm ước nguyên tố lớn nhất xuất hiện trong N!
Đầu vào: Nhập số nguyên N (2 < N <= 10^6)
Đầu ra: In ra số nguyên tố lớn nhất xuất hiện trong N!
Input 01:
10
Output 01:
7
Input 02:
999999
Output 02:
999983
Số chia hết cho N!
Nộp bàiPoint: 1
Cho một số M ≤ 10^12 và N ≤ 100.
Hãy kiểm tra xem M có chia hết cho N! hay không.
Đầu vào: Nhập M và N là 2 số nguyên
Đầu ra: In ra YES nếu M chia hết cho N!, ngược lại in ra NO
Input 01:
24 4
Output 01:
YES
Input 02:
12 4
Output 02:
NO