File tree Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Expand file tree Collapse file tree 2 files changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < bits/stdc++.h>
2
+
3
+ using namespace std ;
4
+
5
+ int const N = 2e5 + 1 ;
6
+ int n, k, a[N];
7
+ long long p[11 ];
8
+ vector<long long > rem[11 ];
9
+
10
+ int main () {
11
+ p[0 ] = 1 ;
12
+ for (int i = 1 ; i < 11 ; ++i)
13
+ p[i] = p[i - 1 ] * 10 ;
14
+
15
+ scanf (" %d %d" , &n, &k);
16
+ for (int i = 0 ; i < n; ++i)
17
+ scanf (" %d" , a + i);
18
+
19
+ for (int i = 0 ; i < n; ++i)
20
+ rem[int (floor (log10 (a[i])) + 1 )].push_back (a[i] % k);
21
+
22
+ for (int i = 1 ; i <= 10 ; ++i)
23
+ sort (rem[i].begin (), rem[i].end ());
24
+
25
+ long long res = 0 ;
26
+ for (int i = 0 , l, r; i < n; ++i) {
27
+ for (int j = 1 ; j <= 10 ; ++j) {
28
+ if (rem[j].empty ())
29
+ continue ;
30
+
31
+ long long tmp = (k - ((1ll * (a[i] % k) * (p[j] % k)) % k)) % k;
32
+ if (tmp < 0 )
33
+ continue ;
34
+
35
+ l = lower_bound (rem[j].begin (), rem[j].end (), tmp) - rem[j].begin ();
36
+ r = upper_bound (rem[j].begin (), rem[j].end (), tmp) - rem[j].begin ();
37
+
38
+ res += r - l;
39
+ }
40
+
41
+ if ((1ll * ((a[i] % k) * (p[int (floor (log10 (a[i])) + 1 )] % k)) % k + a[i]) % k == 0 )
42
+ --res;
43
+ }
44
+
45
+ printf (" %lld\n " , res);
46
+
47
+ return 0 ;
48
+ }
Original file line number Diff line number Diff line change 564
564
- [ 1029A. Many Equal Substrings] ( http://codeforces.com/contest/1029/problem/A )
565
565
- [ 1029B. Creating the Contest] ( http://codeforces.com/contest/1029/problem/B )
566
566
- [ 1029C. Maximal Intersection] ( http://codeforces.com/contest/1029/problem/C )
567
+ - [ 1029D. Concatenated Multiples] ( http://codeforces.com/contest/1029/problem/D )
You can’t perform that action at this time.
0 commit comments