整数拼接 哈希表 枚举 蓝桥杯 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);
}
}