Giúp tối ưu code đếm cặp số chia hết cho 5

Mình đang gặp lỗi TLE, sau khi tìm hiểu mình biết là do code của mình chạy quá thời gian. Mọi người có thể gợi ý cho mình cách để giảm thời gian chạy của code này không ạ.

image

#include <bits/stdc++.h>
using namespace std;
long long n,m,d;

void check(){
    for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++){
            if ((i+j)%5==0) d++;
        }
    }
    cout<<d;
}

int main(){
    cin>>n>>m;
    check();
    return 0;
}

Thay vì đếm tất cả các cặp số, chúng ta có thể tạo trước một mảng để đếm các số có cùng số dư
a_mod_5[i % 5]. Khi đó để đếm tất cả các cặp có tổng chia hết cho 5 thì chỉ cần nhân các cặp có số sao cho chúng mod 5 = 0 là a_mod_5[j] * b_mod_5[(5-j) % 5].
Cách đếm số từ 0-> n chia cho 5 dư i thì có thể tối ưu mà không phải đếm lần lượt mà cũng có công thức = (n - i) / 5 + 1. Khi đó đếm từ 1 -> n chia 5 dư i là i == 0 ? (n-i)/5: (n-i)/5 + 1

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?