整数拼接 哈希表 枚举 蓝桥杯 java

给定一个长度为 n 的数组 A1,A2,⋅⋅⋅,An。

你可以从中选出两个数 Ai 和 Aj(i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。

例如 12 和 345 可以拼成 12345 或 34512。

注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,即便是 Ai=Aj 时。

请你计算有多少种拼法满足拼出的整数是 K 的倍数。

输入格式
第一行包含 2 个整数 n 和 K。

第二行包含 n 个整数 A1,A2,⋅⋅⋅,An。

输出格式
一个整数代表答案。

数据范围
1≤n≤105,
1≤K≤105,
1≤Ai≤109
输入样例:
4 2
1 2 3 4
输出样例:
6

import java.util.*;

public class Main
{
    static int N=100005;
    static int a[]=new int [N],s[][]=new int[11][N];
    static int n,k;

    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        k=sc.nextInt();
        for(int i=0;i<n;++i)
        {
            a[i]=sc.nextInt();
            int t=a[i]%k;
            for(int j=0;j<11;++j)
            {
                 s[j][t]++;
                 t=t*10%k;
            }
        }
        long res=0;
        for(int i=0;i<n;++i)
        {
            int len=String.valueOf(a[i]).length();
            //找与-a[i]同余的数的个数
            int ar=(-a[i]%k+k)%k;
            res+=s[len][ar];

            long r=a[i]%k;
            while((len--)>0)r=r*10%k;
            if(r==ar)res--;
        }
        System.out.println(res);
    }
}


posted @ 2022-11-17 23:03  林动  阅读(31)  评论(0编辑  收藏  举报