蓝桥杯——整数拼接

发布时间 2023-04-06 20:42:10作者: 小花护符

整数拼接

 

 

 测试用例:

4 2
1 2 3 4

题解:

#include<bits/stdc++.h>
using namespace std;
long long a[100010];
long long f[11][100010];//余数数组,表示a[i]*10^r %k 的个数
long long  res;
int main()
{
    long long n,k;
    cin>>n>>k;

    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
        long long t =a[i]%k;
        for(int j=0;j<10;j++)
        {
            f[j][t]++;
            t=t*10%k; //这里用到一个数扩大N被模k = 这个数模K的数扩大N倍模k 比如 120 % 7 = [(12%7)*10]%7
        }
    }
    for(int i=0;i<n;i++)
    {
        long long t =a[i]%k;
        int len = to_string(a[i]).size();//判断数字位数的简单方法。
        res+=f[len][(k-t)%k];//模相加得k

        long long cnt=t;
        while(len--)
        {
            cnt=cnt*10 %k;//把余数扩大到 10^len倍
        }

        if(cnt=(k-t)%k) res--;

    }
    printf("%lld",res);
}