[CPP T7 2024]. TEST 8. SẮP XẾP, TÌM KIẾM, MẢNG 1 CHIỀU NC
Trailing zeros of array
Nộp bàiPoint: 100
Cho mảng A[] gồm N phần tử, gọi X là tích các phần tử trong mảng A[], bạn hãy xác định xem X có bao nhiêu chữ số 0 liên tiếp tính từ chữ số cuối cùng của X.
Ví dụ A = [2, 5, 10, 3, 1, 2], X = 600 sẽ có 2 chữ số 0 tận cùng tính từ cuối
Gợi ý : Tương tự như bài trailing zero, bạn cần phần tích thừa số nguyên tố của từng số trong mảng A[] để đếm số lần xuất hiện của số 2 và 5
Đầu vào
Dòng 1 là N
Dòng 2 gồm N số trong mảng A[]
Giới hạn
1<=N,M<=10^6
0<=A[i]<=10^6
Đầu ra
In ra đáp án của bài toán
Ví dụ :
Input 01
6
2 5 10 3 1 2
Output 01
2
Nhóm bạn thân thiện
Nộp bàiPoint: 100
Tại lớp học của 28Tech có N bạn học sinh tham gia, 28Tech muốn chọn ra K bạn trong N bạn này để thành lập nhóm làm contest. Tuy nhiên 28Tech muốn độ chênh lệch trình độ của các bạn trong nhóm là nhỏ nhất có thể. Trong đó độ chênh lệch trình độ của nhóm bằng hiệu của bạn có trình độ lớn nhất và nhỏ nhất trong nhóm. Mỗi bạn tham gia lớp học tại 28Tech có trình độ tương đương với điểm số được cho trong mảng A[], A[i] là trình độ của bạn học sinh thứ i. Bây giờ bạn hãy tìm ra độ chênh lệch nhỏ nhất về trình độ của 1 nhóm làm contest.
Ví dụ A = [3, 9, 10, 20, 14, 7] và K = 3 thì sẽ chọn nhóm [7, 9, 10] có độ chênh lệch tối ưu là 3.
Gợi ý : Sắp xếp rồi xét các cửa sổ cỡ K
Đầu vào
Dòng 1 là N : số lượng học sinh và K
Dòng 2 gồm N số trong mảng A[] là trình độ của các bạn từ 1 tới N
Giới hạn
1<=N<=10^6
0<=A[i]<=10^6
Đầu ra
In ra kết quả tối ưu tìm được
Ví dụ :
Input 01
6 3
3 9 10 20 14 7
Output 01
3
[Sắp Xếp - Tìm Kiếm]. Bài 52. Sắp xếp mảng
Nộp bàiPoint: 100
Cho mảng A[] gồm N phần tử, 28tech muốn bạn kiểm tra xem liệu có thể lật ngược 1 dãy con liên tiếp bất kỳ trong mảng 1 lần duy nhất để tạo thành mảng tăng dần hay không?
Ví dụ A = [1, 2, 5, 4, 3, 7, 8 ,9] bạn có thể lật ngược lại đoạn [2, 5, 4] để tạo thành mảng [1, 2, 3, 4, 5, 7, 8, 9]
Gợi ý : Tìm left là chỉ số bắt đầu của dãy còn cần lật (a[left] > a[left + 1]) và chỉ số right là chỉ số cuối cùng của dãy con cần lật (a[right] < a[right - 1]). Nếu left ko tồn tại tức mảng đã tăng dần rồi, còn nếu left và right tồn tại thì lật ngược đoạn đó là và kiểm tra xem sau khi lật thì mảng có tăng dần không?
Đầu vào
Dòng 1 là N : các phần tử trong mảng
Dòng 2 là N số trong mảng
Giới hạn
1<=N<=10^6
0<=A[i] <= 10^9
Đầu ra
In ra 28tech nếu có thể lật ngược mảng con để tạo thành mảng tăng dần, ngược lại in ra 29tech
Ví dụ :
Input 01
5
1 4 3 2 5
Output 01
28tech
Input 02
5
1 4 2 3 5
Output 02
29tech
Cửa hàng đồ chơi
Nộp bàiPoint: 100
Cửa hàng 28Toys có N đồ chơi được gán giá cho mỗi trò chơi được mô tả bằng mảng price[], trong đó price[i] đô la là giá của đồ chơi thứ i. Tèo là một học sinh lớp 6 mới mượn được mẹ K đô la, Tèo muốn sử dụng số tiền này một cách tối ưu bằng cách chọn số lượng đồ chơi lớn nhất có thể mua bằng K đô la. Bạn hãy giúp Tèo tìm số lượng đồ chơi tối đa mà Tèo có thể mua
Ví dụ price = [3, 10, 2, 1, 9, 20, 8] và K = 16 thì Tèo có thể mua tối đa 4 đồ vật là [3, 2, 1, 9]
Gợi ý : Sắp xếp tăng dần để lựa những đồ vật rẻ nhất và chọn ra những số đầu tiên có tổng <= K
Đầu vào
Dòng 1 là N và K : số lượng đồ chơi và số tiền của Tèo
Dòng 2 gồm N số trong mảng price[] là giá triền các đồ chơi từ 1 tới N
Giới hạn
1<=N<=2.10^5
1<=K<=2.10^14
0<=A[i]<=10^9
Đầu ra
In ra số đồ chơi tối đa Tèo có thể mua
Ví dụ :
Input 01
7 16
3 10 2 1 9 20 8
Output 01
4
MEX
Nộp bàiPoint: 200
Cho mảng A[] gồm N phần tử, bạn hãy xác định số nguyên dương nhỏ nhất chưa xuất hiện trong mảng A[].
Đầu vào
Dòng 1 là N : số lượng phần tử trong mảng A[]
Dòng 2 là N số của mảng A[]
Giới hạn
1<=N<=10^6
0<=A[i]<=10^6
Đầu ra
In ra kết quả của bài toán
Ví dụ :
Input 01
6
1 2 3 7 8 10
Output 01
4
[Sắp Xếp - Tìm Kiếm]. Bài 58. Loại bỏ đoạn thẳng
Nộp bàiPoint: 200
Cho N đoạn thẳng trên trục tọa độ Ox, mỗi đoạn thẳng bắt đầu từ hoành độ L và kết thúc tại hoành độ R. 2 đoạn thẳng được coi là không giao nhau nếu điểm bắt đầu của đoạn thẳng này lớn hơn hoặc bằng điểm kết thúc của đoạn thẳng trước.
Ví dụ [2, 5] và [5, 10] là 2 đoạn thẳng không giao nhau, trong khi đó [1, 3] và [2, 5] là 2 đoạn thẳng giao nhau.
28Tech cảm thấy khó chịu khi phải nhìn những đoạn thẳng bị giao cắt nhau, bây giờ anh ấy muốn bạn xóa đi 1 số đoạn thẳng ít nhất để tất cả những đoạn thẳng còn lại sẽ không còn giao nhau.
Đầu vào
Dòng 1 là N : số lượng đoạn thẳng
N dòng tiếp theo mỗi dòng là [Li, Ri] tương ướng với điểm bắt đầu và kết thúc của đoạn thẳng thứ i
Giới hạn
1<=N<=10^5
0<=L[i]<R[i]<=10^9</p>
Đầu ra
In ra số lượng đoạn thẳng ít nhất cần loại bỏ để những đoạn thẳng còn lại không bị giao nhau
Ví dụ :
Input 01
5
4 5
2 3
1 4
6 7
5 9
Output 01
2
Giải thích test :
Loại bỏ đi đoạn thẳng [1, 4] và [5, 9] thì 3 đoạn thẳng còn lại sẽ không bị giao nhau
[Sắp Xếp - Tìm Kiếm]. Bài 51. Đếm cặp
Nộp bàiPoint: 300
Cho mảng A[] có N phần tử, mảng B[] có M phần tử. Gọi a là những phần tử thuộc mảng A[], b là những phần tử thuộc mảng B[], nhiệm vụ của bạn là hãy đếm số cặp (a, b) thỏa mãn a^b > b^a.
Ví dụ A = [3, 9, 7, 2] và B = [2, 5] thì có những cặp thỏa mãn là (3, 2), (3, 5), (2, 5)
Gợi ý : a^b > b^a nếu a < b, ví dụ a = 2, và b = 5 thì 2^5 = 32 > 5^2 = 25. Có 1 vài ngoại lệ là cặp (a, b) = (3, 2) thì lại ngược lại và cặp (2, 4) thì bằng nhau cần loại bỏ khi đếm và chú ý khi a = 0, a = 1 là những trường hợp đặc biệt.
Vậy đối với mỗi phần tử trong mảng A[] bạn cần đếm xem trong mảng B[] có bao nhiêu phần tử lớn hơn nó.
Đầu vào
Dòng 1 là N và M
Dòng 2 gồm N số trong mảng A[]
Dòng 3 gồm M số trong mảng B[]
Giới hạn
1<=N,M<=2.10^5
0<=A[i], B[i]<=10^9
Đầu ra
In ra đáp án của bài toán
Ví dụ :
Input 01
4 2
3 9 7 2
2 5
Output 01
3