Cấu trúc dữ liệu set trong C++ - Ôn Chuyên Lớp 1
Liệt kê các từ khác nhau trong xâu (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 liệt kê các từ khác nhau trong xâu S, đầu tiên hãy liệt kê các từ khác nhau theo thứ tự từ điển tăng dần, sau đó liệt kê các từ theo thứ tự xuất hiện trong xâu.
Ràng buộc: ~1 \leq len(S) \leq 100000~;
Dòng đầu tiên in ra các trong xâu theo thứ tự từ điến. Dòng thứ hai in ra các từ theo thứ tự xuất hiện trong xâu. Chú ý không in dấu cách thừa sau từ cuối cùng của từng dòng.
Input:
hoc cong nghe day hoc lap trinh C++ python java rat cong nghe
Output:
C++ cong day hoc java lap nghe python rat trinh
hoc cong nghe day lap trinh C++ python java rat
Đếm số lượng từ khác nhau trong xâu - mỗi từ được nhập trên một dòng (xâu ký tự cơ bản)
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
Intersetion (set)
Nộp bàiPoint: 1
Cho mảng A[] và B[] lần lượt gồm N và M số nguyên, nhiệm vụ của bạn là tìm giao của 2 mảng này và in theo thứ tự xuất hiện trong mảng A[].
Gợi ý:
Cách 1: Dùng 2 set để lưu 2 mảng A, B sau đó duyệt 1 trong 2 mảng và tìm kiểm sự xuất hiện của phần tử đang duyệt trong mảng còn lại.
Cách 2: Dùng 1 map để đánh dấu, duyệt qua các phần tử trong mẳng A[] và cho map của từng phần tử trong mảng A[] = 1, duyệt qua máng B[] thì kiềm tra nếu map của phần tử trong mảng B đã bằng 1 thì chuyền thành 2. Cuối cùng duyệt map và in ra những phần tử được đánh dấu là 2.
Định dạng đầu vào:
Dòng 1 gồm 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[]
Ràng buộc: 1<=N,M<=10^5
Định dạng đầu ra: In ra tập hợp của 2 mảng theo thứ tự xuất hiện trong mảng A[]
Input:
9 8
7 5 0 0 1 6 2 7 3
6 4 9 4 2 8 3 5
Output:
5 6 2 3
Tìm giao của 2 tập hợp
Nộp bàiPoint: 1
Cho trước 2 tập hợp, hãy tìm giao của 2 tập hợp đó.
Định dạng đầu vào: Nhập vào 2 tập hợp, mỗi tập hợp trên 1 dòng, mỗi phần tử cách dâu bởi 1 dấu cách
Định dạng đầu ra: In ra giao của 2 tập hợp, nếu không có in ra NONE
Input 01:
1 2 3 4
3 4 5 6
Output 01:
3 4
Input 02:
1 2 7 8
3 4 5 6
Output 02:
NONE
Số còn thiếu trong tập hợp (set)
Nộp bàiPoint: 1
Cho hai bộ số, hãy viết một chương trình để tìm các số còn thiếu trong bộ thứ hai so với bộ thứ nhất và ngược lại.
Định dạng đầu vào: Nhập vào 2 tập hợp, mỗi tập hợp trên 1 dòng, mỗi phần tử cách dâu bởi 1 dấu cách
Định dạng đầu ra: In ra số còn thiếu trong bộ 2 so với bộ 1 và số còn thiếu trong bộ 1 so với bộ 2, nếu không thiếu số nào thì in ra NONE
Input 01:
1 2 3 4
3 4 5 6
Output 01:
[1, 2]
[5, 6]
Input 02:
1 2 7 8
1 2 7 8
Output 02:
NONE
NONE
Số lớn thứ 3 (set)
Nộp bàiPoint: 1
Tìm số lớn thứ 3 trong danh sách sử dụng set
Định dạng đầu vào: Nhập vào 1 danh sách các số nguyên
Định dạng đầu ra: In ra số lớn thứ 3, nếu không có in ra NONE
Input 01:
1 2 3 4 6 4 5 10 3
Output 01:
5
Input 02:
100 3000
Output 02:
NONE
Input 03:
1 2 3 100 100 50
Output 03:
3
Xóa phần tử trong tập hợp (set)
Nộp bàiPoint: 1
Viết chương trình để xóa một hoặc nhiều phần tử khỏi một tập hợp nhất định.
Định dạng đầu vào: Nhập vào 1 tập hợp và phần tử cần xóa
Định dạng đầu ra: In ra tập hợp sau khi xóa
Input 01:
1 2 3 4
1
Output 01:
2 3 4
Input 02:
1 2 7 8
10
Output 02:
1 2 7 8
Có trong tập 1 nhưng không có trong tập 2 (set)
Nộp bàiPoint: 1
Cho 2 tập hợp, hãy tìm các phần tử có trong tập hợp thứ nhất nhưng không có trong tập hợp thứ 2
Định dạng đầu ra: In ra các phần tử có trong tập hợp 1 nhưng không có trong tập hợp 2, nếu không có in ra NONE
Input 01:
1 2 3 4
3 4 5 6
Output 01:
1 2
Input 02:
1 2 7 8
3 4 5 6
Output 02:
1 2 7 8
Input 03:
1 2 7 8
1 2 7 8
Output 03:
NONE
Tìm hợp của 2 tập hợp (set)
Nộp bàiPoint: 1
Cho trước 2 tập hợp, hãy tìm hợp của 2 tập hợp đó.
Định dạng đầu ra: In ra hợp của 2 tập hợp
Input 01:
1 2 3 4
3 4 5 6
Output 01:
1 2 3 4 5 6
Input 02:
1 2 7 8
3 4 5 6
Output 02:
1 2 3 4 5 6 7 8
Thuộc mảng thứ nhất không thuộc mảng thứ 2 (set)
Nộp bàiPoint: 1
Cho 2 mảng số nguyên, hãy liệt kê những phần từ thuộc mảng thứ nhất mà không thuộc mảng thứ 2.
Định dạng đầu vào:
Dòng dầu tiên là số lượng test case T. (I≤T≤100).
Môi test case gồm 3 dòng, dòng đâu tiên là số lượng phần tử của mảng thứ nhất và mảng thứ hai. (i ≤ n, m ≤ 1000)
Dòng thứ 2 là các số thuộc mảng thứ nhất. (-10^9<=ai<=10^9)
Dòng thứ 3 là các số thuộc mảng thứ hai. (-10^9<=ai<=10^9)
Định dạng đầu ra: Liệt kê các số thuộc mảng thứ nhất mà không thuộc mảng thứ hai theo thứ tự xuất hiện, nếu không tồn tại số nào in ra "NOT FOUND".
Input 01:
1
4 5
1 2 2 9
2 0 9 8 3
Output 01:
1
Input 02:
1
4 5
10 13 13 11
10 11 11 12 13
Output 02:
NOT FOUND
Số nằm trong mảng (set)
Nộp bàiPoint: 1
Cho một mảng số nguyên gồm n phần tử, với mỗi truy vấn hãy kiểm tra xem một số nào đó có nằm trong mảng hay không?
Đị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 <= 1000)
Dòng thứ 2 bao gồm n phần tử trong mảng (-10^9 <= ai <= 10^9)
Dòng thứ 3 là số lượng truy vấn q
Q dòng tiếp theo mỗi dòng là một số nguyên cần kiểm tra
Định dạng đầu ra: In ra YES nếu số cần kiểm tra xuất hiện trong mảng, ngược lại in NO
Input:
1
6
1 2 3 8 7 0
4
1
2
10
20
Output:
YES
YES
NO
NO
Liệt kê phần tử toàn số lẻ
Nộp bàiPoint: 1
Liệt kê các số trong mảng một chiều các số nguyên chứa toàn chữ số lẻ. Mỗi phần tử chỉ liệt kê 1 lần.
Ví dụ:
Input:
10
1 2 3 4 55 666 7 898 1 4
Output:
1 3 55 7
Xóa phần tử nhỏ nhất (multiset)
Nộp bàiPoint: 1
Cho một dãy số gồm n phần tử.
Hãy liên tục xóa phần tử nhỏ nhất ra khỏi dãy cho đến khi dãy rỗng.
Sau mỗi lần xóa, in ra phần tử bị xóa.
Input:
5
4 2 9 2 7
Output:
2 2 4 7 9