Calexp (Tin học trẻ toàn quốc 2024 – Vòng sơ khảo – Bảng B)
Đề bài
Cho biểu thức
$$A = x^2 + y^2 + x \times y.$$
Biết giá trị của hai số nguyên $x$ và $y$, em hãy tính giá trị của $A$.
Dữ liệu vào:
- Dòng thứ nhất: số nguyên $X$ ($0 \le X \le 100$) – giá trị của $x$;
- Dòng thứ hai: số nguyên $Y$ ($0 \le Y \le 100$) – giá trị của $y$.
Kết quả: in ra một số nguyên duy nhất là giá trị của $A$.
Giới hạn thời gian: 1 giây. Dữ liệu nhập từ bàn phím, in ra màn hình.
1
27Giải thích: $x = 1$, $y = 2$ nên $A = 1^2 + 2^2 + 1 \times 2 = 1 + 4 + 2 = 7$.
Lời mở đầu
Đây là bài "khởi động" của đề sơ khảo Bảng B Tin học trẻ 2024: đọc hai số, thay vào công thức và in kết quả. Bài dễ nhưng vẫn có vài điểm các em mới học hay vấp: đọc dữ liệu nằm trên hai dòng, viết $x^2$ trong C++ thế nào (đừng viết x^2!), và có bị tràn số không. Mình đi lần lượt từng ý, kèm một hình vẽ nhỏ để thấy biểu thức này "trông như thế nào".
Bấm vào nút bên dưới để nộp bài và được hệ thống CLUE OJ chấm tự động.
Nộp bài trên CLUE OJLộ trình lời giải, bấm vào từng phần để nhảy tới:
Bộ testBộ test có gì?
Bộ test trên CLUE do mình tự sinh theo đúng giới hạn của đề: 20 test, test 1 là ví dụ của đề. Đề không chia subtask (cả bài là một nhóm 100%).
| Nhóm test | Test | Nội dung |
|---|---|---|
| Ví dụ của đề | 1 | $x = 1, y = 2$, đáp án $7$ |
| Biên | 2–10 | $x = y = 0$ (đáp án $0$), $x = y = 100$ (đáp án lớn nhất $30000$), một số bằng $0$, hai số bằng nhau, $99$ và $100$… |
| Ngẫu nhiên | 11–20 | $x, y$ ngẫu nhiên trong đoạn $[0, 100]$ |
Có 5 test có ít nhất một số bằng $0$ (test 2, 4–5, 7, 10), trong đó test 2 cả hai số đều bằng $0$. Đáp án lớn nhất là $30.000$ (test 3, $x = y = 100$).
| Subtask | Điều kiện | Test | Cách làm C++ | Cách làm Python |
|---|---|---|---|---|
| Duy nhất (100%) | $0 \le X, Y \le 100$ | 1–20 | 20/20 | 20/20 |
Ý tưởngBiểu thức nhìn bằng hình vuông
Cách làm thì chỉ là thay số vào công thức. Nhưng có một cách nhìn rất đẹp: vẽ hình vuông cạnh $x + y$. Diện tích của nó là $(x + y)^2 = x^2 + y^2 + 2xy$ – gồm hình vuông $x \times x$, hình vuông $y \times y$ và hai hình chữ nhật $x \times y$. Biểu thức $A$ chỉ lấy một hình chữ nhật, nên
$$A = x^2 + y^2 + xy = (x + y)^2 - xy.$$
Em nhập $x, y$ nhỏ (không quá 12) rồi bấm Tiếp để đếm từng phần (mỗi ô vuông nhỏ là $1$ đơn vị diện tích):
Với ví dụ $x = 1, y = 2$: $(1 + 2)^2 - 1 \cdot 2 = 9 - 2 = 7$ – đúng như đáp án. Công thức $(x+y)^2 - xy$ chỉ là để hiểu thêm; trong code mình tính thẳng theo đề cho dễ đọc.
Lời giảiTính thẳng theo công thức – O(1)
Vài lưu ý khi viết code:
- Bình phương: trong C++ và Python,
x^2là phép XOR bit chứ không phải lũy thừa! Hãy viếtx * x. (Python cóx ** 2; C++ cópow(x, 2)nhưng hàm này trả về số thựcdouble– không nên dùng cho số nguyên.) - Hai dòng:
cin >> x >> yđọc được cả khi hai số nằm trên hai dòng (C++ bỏ qua dấu xuống dòng). Trong Python thì mỗi lệnhinput()đọc một dòng, nên gọi hai lần. - Tràn số: lớn nhất $A = 100^2 + 100^2 + 100 \cdot 100$ $= 30000$ – kiểu
intlà đủ. Mình vẫn dùnglong longtheo thói quen an toàn, không tốn gì cả.
Kết quả chạy thật: Bản C++ đúng 20/20 test, chạy lâu nhất 0.003s. Bản Python đúng 20/20 test, chạy lâu nhất 0.021s.
Tổng kếtKết quả chạy thật trên bộ test
| Cách | Ngôn ngữ | Đúng | Lâu nhất (test đúng) | Điểm theo subtask |
|---|---|---|---|---|
| Tính thẳng theo công thức | C++ | 20/20 | 0.003s | 100% |
| Python | 20/20 | 0.021s | 100% |
x * x, không dùng ^; (2) luôn ước lượng giá trị lớn nhất của đáp án để chọn kiểu dữ liệu; (3) thử lại với các trường hợp biên như $x = y = 0$ và $x = y = 100$ trước khi nộp.- Không biết học gì trước, học gì sau, học lan man nên kiến thức bị hổng.
- Bí bài không ai gỡ, ngồi cả buổi vẫn không ra rồi bỏ cuộc.
- Code chạy được nhưng không đủ điểm, không biết sai ở đâu, chậm ở đâu.
- Không có đề thi thử và người chấm, nên không biết mình đang ở mức nào.
- Dễ nản giữa chừng khi không có ai theo sát.
- Lộ trình 111 buổi video sắp sẵn từ dòng code đầu tiên đến đề HSG thật của các tỉnh.
- Thầy trực tiếp gỡ bí, chữa bài cho từng em qua nhóm Zalo riêng.
- Hệ thống chấm bài tự động 24/7 và thi thử HSG hằng tuần để biết chính xác mình đang ở đâu.
- Đóng học phí một lần, thầy kèm lâu dài: từ thi chuyên Tin đến HSG quốc gia và cả khi lên đại học.
Nhận xét
Đăng nhận xét