Bài tập luyện tập về MAP STL - Hưng
Liệt kê các phần tử kèm theo tần suất (map)
Nộp bàiPoint: 1
Nhập vào một mảng A gồm các số nguyên có N phần tử, in ra các phần tử theo thứ tự xuất hiện trong mảng a kèm theo tần suất của nó, mỗi giá trị chỉ in 1 lần.
Ràng buộc: ~0 < N \leq 10^6~; ~-10^6 \leq A[i] \leq 10^6~
Dữ liệu vào gồm 2 dòng, dòng thứ nhất là số lượng N phần tử, dòng thứ 2 lần lượt là N phần tử trong mảng A.
Input 01:
10
5 1 4 1 3 2 1 2 3 10
Output 01:
5 1
1 3
4 1
3 2
2 2
10 1
Số 5 xuất hiện 1 lần, số 1 xuất hiện 3 lần, số 4 xuất hiện 1 lần...
Input 02:
11
5 -1 4 -1 3 2 1 2 3 10 10
Output 02:
5 1
-1 2
1 1
4 1
3 2
2 2
10 2
Xâu Pangram 1 (xâu ký tự - chuỗi ký tự - map)
Nộp bàiPoint: 1
Xâu Pangram là xâu có chứa đầy đủ các kí tự từ A tới Z không phân biệt chữ hoa hay thường. Nhập vào xâu S và kiểm tra xem xâu S có phải là xâu pangram hay không?
Ràng buộc: ~1≤len(S)≤100000~;
In ra YES nếu S là xâu pangram, ngược lại in NO.
Input:
abcdefghijklmnopqrstuvwxyz
Output:
YES
Từ xuất hiện nhiều nhất, ít nhất trong xâu (map - xâu ký tự - chuỗi ký tự)
Nộp bàiPoint: 1
Cho một xâu kí tự S bao gồm các chữ cái và dấu cách, một từ được định nghĩa là các kí tự liên tiếp không chứa dấu cách. Hãy tỉm từ có số lần xuất hiện nhiều nhất và ít nhất trơng xâu, nếu có nhiều từ có cùng số lần xuất hiện nhiều nhất hoặc ít nhất thì chọn từ có thứ tự từ điển lớn nhất làm kết quả
Ràng buộc: ~1 \leq len(s) \leq 100000~
Dòng đầu tiên in ra từ có số lẫn xuất hiện nhiều nhất. Dòng thứ 2 in ra từ có số lần xuất hiện ít nhất
Input:
aa bb cc aa bb aa aa cc
output:
aa 4
cc 2
Số xuất hiện nhiều nhất trong mảng (map)
Nộp bàiPoint: 1
Tìm số xuất hiện nhiều nhất trong mảng, nếu có nhiều số có cùng số lần xuât hiện nhiều nhất thì in ra số nhỏ hơn
Định dạng đầu vào:
Dòng đầu tiên là số lượng test case T. (1≤T≤100).
Mỗi test case bao gồm nhiều dòng, dòng đầu tiên là số lượng phần tử trong mảng. (1≤n≤100000).
Dòng thứ 2 bao gồm n phần tử trong mảng. (-10^18 <= ai <= a0^18).
Định dạng đầu ra: In ra số xuất hiện nhiều nhất cùng số lần xuất hiện của nó
Input:
1
10
1 1 2 2 2 1 4 7 8 19
Output:
1 3
Ký tự xuất hiện nhiều nhất (map)
Nộp bàiPoint: 1
Tìm kí tự xuất hiện nhiều nhất trong chuỗi. (làm bằng 2 cách: Sử dụng mảng đếm hoặc sử dụng map)
Định dạng đầu vào:
Dòng đầu tiên là số lượng test case T. (1≤T≤100).
Mỗi test case gồm một dòng là 1 chuỗi có không quá 100000 kí tự, bao gồm cả dấu cách
Định dạng đầu ra: Tìm kí tự có số lần xuất hiện nhiều nhất và có thứ tự từ điển nhỏ nhất
Input:
1
abcdzzzzu abed
Output:
z
Đếm số lượng từ khác nhau trong xâu - phiên bản nhập xâu trên một dòng (map)
Nộp bàiPoint: 1
Cho một xâu gồm nhiều từ, đếm số lượng từ khác nhau trong xâu (lưu ý các từ không phân biệt chữ hoa và chữ thường, không cho biết trước số lượng từ trong xâu, không sử dụng mảng string)
Ràng buộc: Số lượng từ có thể lên đến 1000 từ
Input:
hoc cong nghe day hoc cong nghe va lap trinh
Output:
7
Từ đầu tiên lặp lại (map)
Nộp bàiPoint: 1
Tìm từ được lặp lại đầu tiên trong câu.
Định dạng đầu vào: Dòng đầu tiên là số lượng bộ test (1≤T≤100).
T dòng tiếp theo mỗi dòng chứa một chuỗi đầu vào.
Định dạng đầu ra: Từ đầu tiên được lặp lại, dữ liệu đảm bảo câu có 2 từ trở lên vào có xuất hiện từ được lặp lại.
Input:
2
abc abc abc zzz ZZZ cd
ngon ngu lap lap ngu ngon
Output:
abc
lap
Đặt tên người dùng (map)
Nộp bàiPoint: 1
Xây dựng chương trình đặt tên tài khoản người dùng. Nếu tên người dùng muốn đặt đã xuất hiện trong hệ thống thì sẽ đặt tên tài khoản theo cú pháp "tên người dùng muốn đặt" + số tài khoản cùng tên trong hệ thống cộng thêm 1. Vi dụ: Giả sử trong hệ thống đã tồn tại tên người dùng là ty thì người dùng tiếp theo muốn sử dụng tên tài khoản là ty sẽ được lưu ở hệ thống với tên ty1, tương tự như vậy trong trường hợp có 2 tài khoản tên ty trong hệ thống thì người dùng có tên ty sẽ được lưu với tên ty2
Định dạng đầu vào: Dòng đầu tiên là n số lượng tên người dùng muốn cài đặt vào hệ thống, n dòng tiếp theo sẽ là tên người dùng, tên người dùng chi bao gồm 1 từ duy nhất
Định dạng đầu ra: In kết quả là tên người dùng được lưu trong hệ thống.
Input:
14
an
binh
an
binh
long
huong
ngoc
thuan
nhung
nhung
ngoc thuan
nhung
nhung
nhung
Output:
an
binh
an1
binh1
long
huong
ngoc
thuan
nhung
nhung1
ngoc thuan
nhung2
nhung3
nhung4
Tìm kiếm sinh viên (map)
Nộp bàiPoint: 1
Ở trường đại học xyz, mỗi sinh viên sẽ có một mã sinh viên riêng. Mã sinh viên là một xâu kí tự không quá 8 kí tự. Bạn được yêu cầu xây dựng chương trình có thể kiểm tra một mã sinh viên nào đó có thuộc về sinh viên nào?
Định dạng đầu vào:
Dòng đầu tiên là số lượng sinh viên N.
N dòng tiếp theo là các dòng tiếp theo mô tả thông tin của sinh viên trên 2 dòng, dòng đầu là mã sinh viên, dòng 2 là tên sinh viên.
Dòng tiếp theo là số truy vấn Q.
Q dòng tiếp theo, mỗi dòng là một mã sinh viên cần tìm kiếm, nếu mã sinh viên này thuộc về một bạn sinh viên thì in ra tên của sinh viên đó trên 1 dòng, ngược lại in ra "NOT FOUND" trên 1 dòng.
Ràng buộc:
1≤ N ≤ 10^4; 1≤ Q ≤ 1000
Mã sinh viên là xâu kí tự không quá 8 kí tự
Tên sinh viên là một xâu có không quá 30 kí tự
Định dạng đầu ra: In ra kết quả của từng truy vấn, mỗi truy vẫn trên 1 dòng.
Input:
3
001
le hoang minh
002
le tuan manh
003
nguye phi hung
2
002
004
Output:
le tuan manh
NOT FOUND
Thi đấu (map)
Nộp bàiPoint: 1
Cho thông tin các trận đấu của giải bóng đá Học Công Nghệ, nhiệm vụ của bạn là đối với mỗi đội bóng hãy liệt kê các đối thủ đã từng chạm trán. Danh sách các đội bóng được liệt kê theo thứ tự từ điển tăng dần và danh sách đối thủ của từng đội bóng cũng được liệt kê tăng dần theo thứ tự từ điền.
Gợi ý : Dùng map(string, vector(string)) mp; mỗi đội bóng sẽ dùng 1 vector để lưu lại danh sách các đối thủ trong các trận bóng, sort danh sách đội bóng trước khi in ra kết quả.
Định dạng đầu vào:
Dòng 1 là N: số trận bóng diễn ra
N dòng tiếp theo mỗi dòng gồm thông tin của 1 trận đấu theo cú pháp X - Y, trong đó đội X thi đấu với đội Y
Ràng buộc: 1<=N<=1000
Định dạng đầu ra: In ra kết quả của bài toán theo mẫu
Input:
13
Arsenal - Lyon
Fullham - Liverpool
Fullham - Chelsea
Barcelona - Chelsea
Barcelona - Fullham
Lyon - Barcelona
Chelsea - AC Milan
PSG - Manchester City
Arsenal - Fullham
Fultham - Arsenal
Real Madrid - Barcelona
Arsenal - Manchester City
Manchester United - Liverpool
Output:
AC Milan : Chelsea
Arsenal : Fullham, Fultham, Lyon, Manchester City
Barcelona : Chelsea, Fullham, Lyon, Real Madrid
Chelsea : AC Milan, Barcelona, Fullham
Fullham : Arsenal, Barcelona, Chelsea, Liverpool
Fultham : Arsenal
Liverpool : Fullham, Manchester United
Lyon : Arsenal, Barcelona
Manchester City : Arsenal, PSG
Manchester United : Liverpool
PSG : Manchester City
Real Madrid : Barcelona
Điểm trung bình (map)
Nộp bàiPoint: 1
Cho thông tin điểm thi của các môn học của các sinh viên, bạn hãy tính điểm trung bình của sinh viên đó và in ra màn hình. Điểm trung bình được tính bằng cách lấy tổng hệ số điểm và số tín chỉ chia cho tổng số tín chỉ. Ví dụ sinh viên X học môn A có 2 tín chỉ và có điểm là 5, môn B có 3 tín chỉ và có điểm là 4 thì điểm trung bình được tính = (2 * 5 + 3 * 4) / (2 + 3).
Định dạng đầu vào: Gồm nhiều dòng, mỗi dòng gồm 3 thông tin: Tên sinh viên (có 1 từ), số tín chỉ và điểm số tương ứng. Dữ liệu đảm bảo không có 2 sinh viên có cùng tên.
Ràng buộc: Điểm là số nguyên từ 0 tới 10, số tín chỉ là số nguyên dương
Định dạng đầu ra: In ra danh sách sinh viên theo thứ tự từ điển giảm dần và điểm trung bình lấy 2 số sau dấu phẩy.
Input 01:
linh 3 7
tuan 4 5
huyen 3 5
linh 4 9
tuan 5 4
huyen 3 6
Output 01:
tuan : 4.44
linh : 8.14
huyen : 5.50
Input 02:
Lan 4 8
Hanh 4 5
Lan 6 10
Phong 4 10
Nam 4 9
Phong 6 5
Lan 2 4
Phuong 6 1
Nhung 2 7
Nhung 6 9
Nhung 5 8
Nhung 4 10
Lan 3 1
Output 02:
Phuong : 1.00
Phong : 7.00
Nhung : 8.71
Nam: 9.00
Lan : 6.87
Hanh : 5.00
Liệt kê và đếm (map)
Nộp bàiPoint: 1
Cho một dãy các số nguyên dương không quá 9 chữ số, mỗi số cách nhau vài khoảng trống, có thể xuống dòng. Hãy tìm các số không giảm (các chữ số theo thứ tự từ trái qua phải tạo thành dãy không giảm) và đếm số lần xuất hiện của các số đó.
Định dạng đầu vào: Gồm 1 dãy các số nguyên dương không quá 9 chữ số
Ràng buộc: Dãy không có quá 100000 số. Các số đều nguyên dương và không quá 9 chữ số.
Định dạng đầu ra: Ghi ra các số không giảm kèm theo số lần xuất hiện. Các số được liệt kê theo thứ tự sắp xếp số lần xuất hiện giảm dần. Trong trường hợp có nhiều số có cùng số lần xuất hiện thì thì số nhỏ hơn sẽ xếp trước.
Input:
888 289 123
321 54 888
Output:
888 2
123 1
289 1
Số nguyên tố xuất hiện bao nhiêu lần
Nộp bàiPoint: 1
Cho dãy số A có n phần tử chỉ bao gồm các số nguyên dương (không quá 10^5). Hãy xác định các số nguyên tố trong dãy và đếm xem mỗi số xuất hiện bao nhiêu lần.
Dữ liệu vào: Dòng đầu tiên ghi số bộ test. Với mỗi bộ test: dòng đầu ghi số n (không quá 100); dòng tiếp theo ghi n số của dãy.
Kết quả: Với mỗi bộ test ghi ra thứ tự bộ test, sau đó lần lượt là các số nguyên tố trong dãy theo thứ tự từ nhỏ đến lớn và số lần xuất hiện của nó.
Ví dụ:
Input
2
10
1 7 2 8 3 3 2 1 3 2
5
1 3 5 5 13
Output:
Test 1:
2 xuat hien 3 lan
3 xuat hien 3 lan
7 xuat hien 1 lan
Test 2:
3 xuat hien 1 lan
5 xuat hien 2 lan
13 xuat hien 1 lan
Số xuất hiện nhiều lần nhất trong dãy
Nộp bàiPoint: 1
Cho một dãy số nguyên dương không quá 100 phần tử, các giá trị trong dãy không quá 30000. Hãy xác định xem số nào là số xuất hiện nhiều lần nhất trong dãy. Chú ý: trong trường hợp nhiều số khác nhau cùng xuất hiện số lần bằng nhau và là lớn nhất thì in ra tất cả các số đó theo thứ tự xuất hiện trong dãy ban đầu.
Đầu vào: Dòng đầu là số bộ test, không quá 20. Mỗi bộ test gồm hai dòng. Dòng đầu ghi số phần tử của dãy, dòng tiếp theo ghi các phần tử của dãy.
Đầu ra: Với mỗi bộ test, đưa ra số xuất hiện nhiều lần nhất trong dãy đã cho.
Ví dụ:
Input:
2
10
1 2 3 1 2 3 1 2 3 1
10
1 2 3 4 5 6 7 8 9 0
Output:
1
1 2 3 4 5 6 7 8 9 0
Liệt kê và đếm
Nộp bàiPoint: 1
Cho một dãy các số nguyên dương không quá 9 chữ số, mỗi số cách nhau vài khoảng trống, có thể xuống dòng. Hãy tìm các số không giảm (các chữ số theo thứ tự từ trái qua phải tạo thành dãy không giảm) và đếm số lần xuất hiện của các số đó.
Đầu vào: Gồm các số nguyên dương không quá 9 chữ số. Không quá 100000 số. Kết quả Ghi ra các số không giảm kèm theo số lần xuất hiện. Các số được liệt kê theo thứ tự sắp xếp số lần xuất hiện giảm dần.
Input:
123 321 23456 123 123 23456 3523 123 321 8988 7654 9899 3456 123 999 3456 987654321 4546 63543 4656 13432 4563 123471 659837 454945 34355 9087 9977 98534 3456 23134
Output:
123 5
3456 3
23456 2
999 1