Codeforces 1029D:Concatenated Multiples

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37960603/article/details/82257993

题目传送门
代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const int maxn=200000+10;

map<int,int> M[11];
int ans[maxn];
short bit[maxn];

int main(){

    int n,k,tmp;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){

        scanf("%d",&ans[i]);
        tmp=ans[i];
        while(tmp) tmp/=10,bit[i]++;
        ans[i]%=k;
        M[bit[i]][ans[i]]++;
    }
    LL num=0,mul;
    for(int i=1;i<=n;i++){

        M[bit[i]][ans[i]]--;
        mul=10;
        for(int j=1;j<11;j++){

            tmp=k-(mul%k*ans[i])%k;
            if(tmp==k) tmp=0;
            auto it=M[j].find(tmp);
            if(it!=M[j].end()) num+=it->second;
            mul*=10;
        }
        M[bit[i]][ans[i]]++;
    }
    printf("%lld\n",num);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37960603/article/details/82257993
今日推荐