Phase 1

Mảng, xâu & cấu trúc dữ liệu cơ bản

Xử lý thành thạo dãy số và chuỗi ký tự; làm quen vài cấu trúc STL nền tảng

Đây là phần chiếm nhiều điểm và gần như tỉnh nào cũng có. Khi đã quen mảng và xâu, bạn xử lý được phần lớn các bài "đọc một dãy rồi làm gì đó". Ta cũng làm quen vector, pair và sort của STL để viết ít mà mạnh.

1. Mảng một chiều

Mảng là một dãy ô nhớ cùng kiểu, đánh số từ 0. a[0] là phần tử đầu, a[1] phần tử thứ hai, ... Ta truy cập phần tử qua chỉ số trong ngoặc vuông.

khai-bao-mang.cpp
int a[100];        // mang chua toi 100 so nguyen
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];   // doc n phan tu vao a[0..n-1]

Thao tác kinh điển nhất: một lượt quét qua mảng để tìm max/min, đếm, hay tính tổng. Hình dưới minh hoạ con trỏ chạy dọc mảng tìm giá trị lớn nhất:

Tìm max bằng một lượt quét. Con trỏ i đi qua từng ô; mỗi khi gặp giá trị lớn hơn max hiện tại thì cập nhật. Chỉ cần một lượt — độ phức tạp O(n)O(n).
Tìm giá trị lớn nhất của mảng
tim-max.cpp
int maxVal = a[0];               // gia su phan tu dau la lon nhat
for (int i = 1; i < n; i++) {
    if (a[i] > maxVal) maxVal = a[i];   // gap so lon hon thi cap nhat
}
cout << maxVal << "\n";

Khởi tạo maxVal bằng phần tử đầu (không phải 0!) để mảng toàn số âm vẫn đúng. Đổi > thành < là thành tìm min.