Hướng dẫn giải của 31. Tổng tích ma trận chẵn (RSGEVEN - * * *) tr71


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

1. Tóm tắt đề bài

Cho hai số nguyên dương ~m, n~. Tính tổng tất cả các tích ~i \times j~ thỏa mãn điều kiện ~1 \le i \le m~, ~1 \le j \le n~ và tổng chỉ số ~i + j~ là một số chẵn.

~ S = \sum_{\substack{1 \le i \le m \\ 1 \le j \le n \\ (i + j) \text{ chẵn}}} (i \times j) ~

  • Dữ liệu vào (Input): Nhập hai số nguyên dương ~m, n~ (~1 \le m, n \le 10^3~).
  • Dữ liệu ra (Output): In ra kết quả sau khi chia lấy dư cho ~MOD = 10^9 + 7~.

2. Phân tích bài toán & Giới hạn

  • Giới hạn: ~m, n \le 10^3~.
  • Nhận xét về điều kiện ~i + j~ là số chẵn:
    • Tổng của hai số là số chẵn khi và chỉ khi hai số đó cùng tính chẵn lẻ (cả ~i, j~ cùng là số lẻ, hoặc cả ~i, j~ cùng là số chẵn).
  • Với ~m, n \le 10^3~, số cặp ~(i, j)~ cần xét tối đa là ~m \times n \le 10^6~ cặp. Ngưỡng này hoàn toàn chạy tốt trong thời gian cho phép (~< 0.05~ giây) với hai vòng lặp lồng nhau, rất dễ hiểu và phù hợp với học sinh THCS.

3. Thuật toán xử lý

  • Ý tưởng:

    1. Khởi tạo biến tổng ans = 0.
    2. Sử dụng hai vòng lặp lồng nhau:
      • Vòng ngoài: cho biến ~i~ chạy từ ~1~ đến ~m~.
      • Vòng trong: cho biến ~j~ chạy từ ~1~ đến ~n~.
    3. Tại mỗi cặp ~(i, j)~:
      • Kiểm tra điều kiện: nếu ~(i + j) \% 2 == 0~:
        • Cộng dồn tích vào kết quả: ans = (ans + (1LL * i * j)) % MOD.
    4. Sau khi duyệt hết các cặp, in ra giá trị ans.
  • Độ phức tạp:

    • Thời gian: ~\mathcal{O}(m \times n)~ — với ~m, n \le 10^3~, số phép toán tối đa là ~10^6~, thực thi gần như tức thời.
    • Không gian (bộ nhớ): ~\mathcal{O}(1)~.


Đang tải...