[DSA T2 2024]. TEST 1. C++, STL, SORT & SEARCH

Lũy thừa dãy số

Nộp bài
Time limit: 1.0 / Memory limit: 256M

Point: 1

Cho mảng A[]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ài
Time limit: 1.0 / Memory limit: 256M

Point: 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ài
Time limit: 1.0 / Memory limit: 256M

Point: 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 Nakamoto1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa còn địa chỉ ví của 28Tech3E97AjYaCq9QYnfFMtBCYiCEsN956Rvpj2 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ài
Time limit: 1.0 / Memory limit: 256M

Point: 2

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]. 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ài
Time limit: 1.0 / Memory limit: 256M

Point: 3

Tại Vương Quốc 28TechN 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ài
Time limit: 1.0 / Memory limit: 256M

Point: 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ài
Time limit: 1.0 / Memory limit: 256M

Point: 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ài
Time limit: 1.0 / Memory limit: 256M

Point: 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 NM 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