Codeforces 1213C Book Reading

cf題面spa

中文題意

多組數據,每組給一個n給一個m,要求正整數\(1\)~\(n\)中,全部能被m整除的數的個位之和。.net

解題思路

首先,能被m整除的數的數量是\(\lfloor\frac{n}{m}\rfloor\),手算一下(或者打表)能夠發現能被m整除的數的個位會循環,循環節長度只和m的個位有關,循環節具體狀況見代碼。而後沒了……code

源代碼

#include<cstdio>
#include<algorithm>
int T;
long long n,m;
int temp[12][12]={//temp[i][0]表明的是循環節長度
    {1,0},
    {10,1,2,3,4,5,6,7,8,9,0},
    {5,2,4,6,8,0},
    {10,3,6,9,2,5,8,1,4,7,0},
    {5,4,8,2,6,0},
    {2,5,0},
    {5,6,2,8,4,0},
    {10,7,4,1,8,5,2,9,6,3,0},
    {5,8,6,4,2,0},
    {10,9,8,7,6,5,4,3,2,1,0}
};
int main()
{
 //   freopen("test.in","r",stdin);
    scanf("%d",&T);
    for(int i=0;i<10;i++)
    {
        for(int j=2;j<=temp[i][0];j++)
        {
            temp[i][j]+=temp[i][j-1];
        }
    }
    while(T--)
    {
        scanf("%lld%lld",&n,&m);
        long long num=n/m;
        m%=10;
        long long ans=temp[m][temp[m][0]];//一整個循環節
        ans*=num/temp[m][0];
        num%=temp[m][0];
        if(num) ans+=temp[m][num];
        printf("%lld\n",ans);
    }
    return 0;
}
相關文章
相關標籤/搜索