整数拼接 哈希表 枚举 蓝桥杯 java
Published on 2022-11-17 23:03 in 暂未分类 with 林动

整数拼接 哈希表 枚举 蓝桥杯 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 @   林动  阅读(32)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 地球OL攻略 —— 某应届生求职总结
    · 周边上新:园子的第一款马克杯温暖上架
    · Open-Sora 2.0 重磅开源!
    · 提示词工程——AI应用必不可少的技术
    · .NET周刊【3月第1期 2025-03-02】
    点击右上角即可分享
    微信分享提示