[DSA T2 2024]. TEST 1. C++, STL, SORT & SEARCH
Lũy thừa dãy số
Nộp bàiPoint: 1
Cho mảng A[] và B[] đều có N phần tử, Bạn hãy tính kết quả của biểu thức (A[0]^B[0] + A[1]^B[1] + A[2]^B[2] + ... + A[N-1]^B[N-1]) % 1000000007
Đầu vào
Dòng 1 là N : số lượng phần tử trong mảng
Dòng 2 gồm N số trong mảng A[]
Dòng 3 gồm N số trong mảng B[]
Giới hạn
1<=N<=10^6
0<=A[i],B[i]<=10^9
Đầu ra
In ra kết quả của bài toán sau khi chia dư cho 1e9 + 7
Ví dụ :
Input 01
3
1 2 3
2 2 1
Output 01
8
[Set & Map]. Bài 26. Tần suất truy cập
Nộp bàiPoint: 1
Cho 1 loạt các lượt truy cập website của một sinh viên IT, bạn hãy xác định xem mỗi website được truy cập bao nhiêu lượt.
Đầu vào
Gồm nhiều dòng mỗi dòng là tên địa chỉ của một website đã truy cập
Giới hạn
Có không quá 10^5 lượt truy cập
Đầu ra
In ra tên website cùng lượt truy cập theo thứ tự tên website tăng dần về từ điển
Ví dụ :
Input 01
28tech.com.vn
28tech.com.vn
28tech.com.vn
facebook.com
facebook.com
youtube.com
28tech.com.vn
oj.28tech.com.vn
oj.28tech.com.vn
Output 01
28tech.com.vn 4
facebook.com 2
oj.28tech.com.vn 2
youtube.com 1
[Set & Map]. Bài 27. Gửi Bitcoin
Nộp bàiPoint: 1
Bitcoin là đồng tiền mã hóa lớn nhất từng tồn tại, trong mạng lưới của bitcoin bạn có thể gửi đồng tiền bitcoin của mình tới người khác thông qua địa chỉ ví của họ. Địa chỉ ví là một chuỗi ký tự tương tự như email hay số tài khoản ngân hàng của bạn. Khi biết địa chỉ của một người bạn có thể gửi bitcoin cho họ mà không ai có thể ngăn cản được. Bây giờ bạn được cung cấp thông tin về địa chỉ ví bitcoin và tên người sở hữu nó, sau đó là các giao dịch gửi tiền bitcoin giữa các địa chỉ này. Tuy nhiên việc in ra địa chỉ ví này gửi bitcoin cho địa chỉ ví khác quá khó truy vết nên bạn cần hiển thị tên người gửi thay vì hiển thị địa chỉ.
Ví dụ : địa chỉ ví của Satoshi Nakamoto là 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa còn địa chỉ ví của 28Tech là 3E97AjYaCq9QYnfFMtBCYiCEsN956Rvpj2 thì khi giao dịch từ địa chỉ 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa gửi 3 bitcoin đến địa chỉ 3E97AjYaCq9QYnfFMtBCYiCEsN956Rvpj2 bạn cần hiển thị thành Satoshi Nakamoto send 3 bitcoin to 28Tech
Lưu ý rằng 1 người có thể sử hữu nhiều địa chỉ ví bitcoin khác nhau.
Đầu vào
Dòng đầu tiên là số N : số lượng địa chỉ ví bitcoin và người sở hữu của chúng
2N dòng tiếp theo mô tả người sở hữu và địa chỉ bitcoin tương ứng, dòng 1 là tên người sở hữu, dòng 2 là địa chỉ ví bitcoin
Dòng tiếp theo là T : Số giao dịch được gửi qua lại trên mạng lưới bitcoin có dạng [X] [Y] [Amount] trong đó X là địa chỉ ví người gửi, Y là địa chỉ ví người nhận, Amount là số nguyên tương ứng với lượng bitcoin được gửi.
Giới hạn
1<=N<=1000
1<=T<=1000
Đầu ra
Đối với mỗi giao dịch [X] [Y] [Amount] bạn cần hiển thị thành X send Amount bitcoin to Y . Trong trường hợp X, Y là các địa chỉ ví không thể xác định được người sở hữu thì bạn thay bằng Unknown wallet
Ví dụ :
Input 01
9
Satoshi Nakamoto
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
28tech
3E97AjYaCq9QYnfFMtBCYiCEsN956Rvpj2
Tesla
01CPaziTqeEixPoSFtJxu74uDGbpEAotZom
Vitalik Buterin
34HpHYiyQwg69gFmCq2BGHjF1DZnZnBeBP
Elon Musk
3G98jSULfhrES1J9HKfZdDjXx1sTNvHkhN
Jack Dorsey
15cHRgVrGKz7qp2JL2N5mkB2MCFGLcnHxv
US government
19D5J8c59P2bAkWKvxSYw8scD3KUNWoZ1C
28tech
3A9qNS69dngSU2ak8BwZKEExeVnL2RqpYJ
28tech
1Cr7EjvS8C7gfarREHCvFhd9gT3r46pfLb
6
18qNs1yBGGKR8RyErnEF5kegbNUgPfixhS 34HpHYiyQwg69gFmCq2BGHjF1DZnZnBeBP 723
3A9qNS69dngSU2ak8BwZKEExeVnL2RqpYJ 12HnxiXEeKUVjQRbMVTytsGWnzHd5LdGCt 454
3G98jSULfhrES1J9HKfZdDjXx1sTNvHkhN 3E97AjYaCq9QYnfFMtBCYiCEsN956Rvpj2 380
3A9qNS69dngSU2ak8BwZKEExeVnL2RqpYJ 1Cr7EjvS8C7gfarREHCvFhd9gT3r46pfLb 550
1BAFWQhH9pNkz3mZDQ1tWrtKkSHVCkc3fV 12HnxiXEeKUVjQRbMVTytsGWnzHd5LdGCt 855
1Ki3WTEEqTLPNsN5cGTsMkL2sJ4m5mdCXT 15cHRgVrGKz7qp2JL2N5mkB2MCFGLcnHxv 916
Output 01
Unknown wallet send 723 bitcoin to Vitalik Buterin
28tech send 454 bitcoin to Unknown wallet
Elon Musk send 380 bitcoin to 28tech
28tech send 550 bitcoin to 28tech
Unknown wallet send 855 bitcoin to Unknown wallet
Unknown wallet send 916 bitcoin to Jack Dorsey
Tý và Tèo
Nộp bàiPoint: 2
Tý và Tèo là 2 người bạn thân và cả 2 đều rất thích hoa, trong vườn hoa nhà Tý có N bông hoa, mỗi bông hoa có vẻ đẹp được quy định là A[i]. Tý muốn nhờ Tèo tìm xem trong vườn thì vẻ đẹp chênh lệch lớn nhất giữa 2 bông hoa bất kỳ là bao nhiêu. Và có bao nhiêu cặp bông hoa thỏa mãn điều kiện đó, 2 cặp bông hoa được coi là khác nhau nếu ít nhất 1 trong 2 bông trong 2 cặp đó khác nhau.
Ví dụ : Vẻ đẹp của các bông hoa trong vườn là {1, 1, 5, 8, 3, 9, 9} thì 8 là vẻ đẹp chênh lệch lớn nhất giữa 2 bông hoa và có 4 cặp thỏa mãn điều kiện này.
Đầu vào
Dòng đầu tiên là N : số lượng bông hoa trong vườn
Dòng 2 là vẻ đẹp của N bông hoa trong vườn
Giới hạn
2<=N<=10^6
0<=A[i]<=10^9
Đầu ra
Dòng 1 in ra vẻ đẹp chênh lệch lớn nhất
Dòng 2 in ra số cặp thỏa mãn
Ví dụ :
Input 01
7
1 1 5 8 3 9 9
Output 01
8
4
[Sắp Xếp - Tìm Kiếm]. Bài 55.Vương Quốc 28Tech
Nộp bàiPoint: 3
Tại Vương Quốc 28Tech có N cư dân, mỗi cư dân có một chiều cao . Vì yêu thích sự công bằng nên Quốc Vương của 28Tech muốn tất cả mọi người đều có phải có cùng chiều cao với nhau để tránh tình trạng body shaming giữa các cư dân.
Bây giờ Quốc Vương sẽ đi tìm 1 người bất kỳ mà ông ta thích trong N người đó và chọn làm hạt giống, người này và những người có cùng chiều cao với hạt giống kia thực sự may mắn bởi vì Quốc Vương có một ý tưởng thực sự rất đáng sợ. Ông ta sẽ cắt bớt chân của những người cao hơn người hạt giống hoặc kéo chân những người thấp hơn người hạt giống sao cho tất cả mọi người có cùng chiều cao với người hạt giống. Tuy nhiên ý tưởng của Quốc Vương bị phản đối bởi cư dân trong Vương Quốc của mình thành ra Quốc Vương phải đi tìm một hạt giống sao cho việc cắt bớt chân và kéo dài chân gây ít đau đớn nhất. Quốc Vương nhờ bạn tìm giúp hạt giống này !
Biết rằng khi chiều cao của 1 dân cư là X cao(thấp) hơn người hạt giống có chiều cao là Y thì sự đau đớn khi cắt (kéo dài) chân sẽ là |X - Y| (Đây là ý nghĩa của giá trị tuyệt đối).
Bạn hãy xác định xem với hạt giống tối ưu thì tổng sự đau đớn của mọi dân cư trong Vương Quốc 28Tech sẽ là bao nhiêu để tất cả mọi người có cùng chiều cao với người hạt giống đó.
Đầu vào
Dòng 1 là N : số lượng dân cư
Dòng 2 gồm N số là chiều cao của các cư dân
Giới hạn
Vương Quốc có không quá 1 triệu cư dân
Chiều cao của cư dân thuộc đoạn [1, 999999999]
Đầu ra
- In ra tổng số đau đớn của mọi cư dân được coi là phương án tối ưu
Ví dụ :
Input 01
5
3 9 10 1 8
Output 01
15
[Sắp Xếp - Tìm Kiếm]. Bài 54. Thấp hơn gần nhất
Nộp bàiPoint: 3
Tiếp tục câu chuyện về chiều cao tại Vương Quốc 28Tech, hôm nay Quốc Vương tại 28Tech muốn N cư dân của mình xếp thành 1 hàng dài và đánh số cho họ từ 1 tới N. Quốc Vương sẽ yêu cầu mỗi người tìm ra vị trí của người đứng trước gần họ nhất mà có chiều cao thấp hơn họ. Tất nhiên sẽ có những người không thể tìm được người thấp hơn mình. Nhiệm vụ của bạn rất đơn giản, hãy tìm vị trí của người đứng trước gần nhất của mọi cư dân trong Vương Quốc thịnh vượng này.
Đầu vào
Dòng 1 là N số lượng cư dân
Dòng 2 là chiều cao của cư dân thứ 1 tới thứ N
Giới hạn
1<=N<=10^6
Chiều cao của cư dân thuộc đoạn [1, 999999999]
Đầu ra
In ra vị trí của người thấp hơn gần nhất với mỗi cư dân trong Vương Quốc, nếu không thể tìm được vị trí hợp lý này thì in ra 0.
Ví dụ :
Input 01
6
1 3 7 2 4 6
Output 01
0 1 2 1 4 5
Ước Chung Lớn Nhất Của Dãy Số
Nộp bàiPoint: 4
Cho mảng A[] gồm N phần tử, bạn hãy tìm ước chung lớn nhất của 2 phần tử bất kỳ trong mảng.
Gợi ý : Sử dụng sàng để có thể có độ phức tạp tốt hơn
Bước 1 : Đếm xem mỗi phần tử trong mảng A[] xuất hiện bao nhiêu lần
Bước 2 : Duyệt i từ maxval (giá trị lớn nhất trong mảng) về 1, mình sẽ xét i là ước chung lớn nhất của bao nhiêu số trong mảng bằng cách duyệt qua các bội của i từ i tới maxval, dùng 1 vòng for duyệt từ i tới maxval, bước nhảy là i để chỉ duyệt các bội của i, duyệt tới bội gọi là j thì dựa vào tần suất của j để xác định xem i có bao nhiêu bội trong mảng A[], nếu đếm được >= 2 bội thì có thể kết luận sớm và dừng chương trình.
Đầu vào
Dòng 1 là N
Dòng 2 gồm N số trong mảng A[]
Giới hạn
2<=N<=10^6
1<=A[i]<=10^6
Đầu ra
In ra đáp án của bài toán
Ví dụ :
Input 01
5
2 8 10 2 16
Output 01
8
[Xâu Ký Tự]. Bài 61. Tổng 2 số nguyên lớn
Nộp bàiPoint: 2
Cho 2 số nguyên không âm N & M có không quá 10^4 chữ số, hãy tính tổng của N và M và in ra màn hình.
Đầu vào
• Dòng 1 là số bộ test T
• T dòng tiếp mỗi dòng là 2 số nguyên N M cách nhau 1 khoảng trắng
Giới hạn
• 1<=T<=100
Đầu ra
In ra kết quả từng test trên mỗi dòng
Ví dụ :
Input 01
3
10570120111055536422164 481703468408024246478735720
46208456686518677708 5617408074740658152263621125466
4520771650246044343323263202 72165130453752120403013532152
Output 01
481714038528135302015157884
5617408074786866608950139803174
76685902103998164746336795354