1.題目說明
給定一個長度為?n?的數組?A1,A2,???,An。
你可以從中選出兩個數?Ai?和?Aj(i?不等于?j),然后將?Ai?和?Aj?一前一后拼成一個新的整數。
例如?12?和?345 可以拼成?12345?或 34512。
注意交換?Ai?和?Aj?的順序總是被視為?2?種拼法,即便是?Ai=Aj?時。
請你計算有多少種拼法滿足拼出的整數是?K?的倍數。
2.輸入格式
第一行包含?2 個整數?n?和?K。
第二行包含?n?個整數?A1,A2,???,An。
3.輸出格式
一個整數代表答案。
4.數據范圍
1≤n≤10的5次方,
1≤K≤10的5次方,
1≤Ai≤10的9次方
5.輸入樣例
4 2
1 2 3 4
6.輸出樣例
6
7.代碼
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;
const int N = 100010;int n, m;
int a[N], s[11][N];int main()
{scanf("%d%d", &n, &m);for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);for (int i = 0; i < n; i ++ ){LL t = a[i] % m;for (int j = 0; j < 11; j ++ ){s[j][t] ++ ;t = t * 10 % m;}}LL res = 0;for (int i = 0; i < n; i ++ ){LL t = a[i] % m;int len = to_string(a[i]).size();res += s[len][(m - t) % m];LL r = t;while (len -- ) r = r * 10 % m;if (r == (m - t) % m) res -- ;}printf("%lld\n", res);return 0;
}