题面

题目描述

给定含n个整数的数组a。

规定数x,y的合并为xy。如:数12与数3456的合并为数123456。

有数组中的位置对(i,j)(i≠j),计算使ai,aj的合并能被k整除的位置对数量。

输入

第一行输入整数n,k (1≤n≤2*10^5,2≤k≤10^9)

第二行输入含n个整数的数组a1,a2,a3,...,an (1≤ai≤10^9)

输出

输出位置对(i,j)的数量,使ai,aj的合并能被k整除

样例输入1

6 11

45 1 10 12 11 7

样例输出1

7

样例输入2

4 2

2 78 4 10

样例输出2

12

样例输入2

5 2

3 7 19 3 3

样例输出2

0

提示

样例输出1中,有位置对(1,2),(1,3),(2,3),(3,1),(3,4),(4,2),(4,3),使所得数451,4510,110,1045,1012,121,1210能被11整除。

样例输出2中,全体位置对所得数都能被2整除。

样例输出3中,全体位置对所得数都不能被2整除。

题解

两数合并有计算公式$conc(a_i ,a_j ) = a_i  \cdot 10^{len[j]}  + a_j$ (len[j]表示的位数)

若暴力枚举,时间复杂度达$O(n^2 )$,必超时。可以想到用利用计算公式分解两数的模,计算$a_j$的模并排序,枚举$a_i \cdot 10^{len[j]}$取模并二分查找对应$a_j$的模的数量。这样就利用了排序与二分查找,减少了逐个枚举$a_j$部分的时间。

根据题意可知$(a_i \cdot 10^{len[j]} + a_j {\rm{) mod }}k = 0$,顺推得到$({\rm{ }}(a_i  \cdot 10^{len[j]} {\rm{ mod }}k) + (a_j {\rm{ mod }}k{\rm{) ) mod }}k = 0 \Leftrightarrow k - (a_i  \cdot 10^{len[j]} {\rm{ mod }}k) = a_j {\rm{ mod }}k$。细节上,由于数组a中数的长度参差不齐,于是可以用“mod”二维数组存放长度为len[i]的数 mod k的值并排序。接着i=1 to n,j=1 to 10枚举$a_i  \cdot 10^j$部分,用lower_bound、upper_bound查找符合题意的低位部分的区间,累加这个区间即得到答案。

最终将时间复杂度$O(n^2 )$缩短为$O(10 \cdot n\log n)$。

 #include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n, k;
int a[],len[];
int mod[][], mod_10[];
int cnt[]; int main()
{
scanf("%d%d", &n, &k);
for (int i = ; i <= n; i++)
scanf("%d", a + i);
mod_10[] = ;
for (int i = ; i < ; i++)
mod_10[i + ] = mod_10[i] * % k; //计算10^n的模
for (int i = ; i <= n; i++)
{
int x = a[i];
while (x)
{
len[i]++;
x /= ;
}
mod[len[i]][++cnt[len[i]]] = a[i] % k;
}
for (int i = ; i <= ; i++)
sort(mod[i] + , mod[i] + cnt[i] + );
ll ans = ;
int mod1, mod2, *l, *r;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= ; j++)
{
mod1 = ((ll)a[i] * mod_10[j]) % k; //谨防int溢出!
mod2 = (k - mod1) % k;
l = lower_bound(mod[j] + , mod[j] + cnt[j] + , mod2);
r = upper_bound(mod[j] + , mod[j] + cnt[j] + , mod2);
ans += (len[i] == j && (mod1 + a[i] % k) % k == )?(r - l - ):(r - l);
//此时状态包含位置对(i,i)且满足条件时减去该方案
}
}
printf("%lld", ans);
return ;
}

AC 代码

cf 1029D的更多相关文章

  1. Codeforces Round #506 (Div. 3) 1029 D. Concatenated Multiples

    题意: 给定n个数字,和一个模数k,从中选出两个数,直接拼接,问拼接成的数字是k的倍数的组合有多少个. 思路: 对于a,b两个数,假定len = length of (b),那么a,b满足条件就是a ...

  2. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  3. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  4. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  5. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  6. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  7. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  8. CF memsql Start[c]UP 2.0 B

    CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...

  9. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

随机推荐

  1. Spark 分布式调试工具

    0. 说明 编写工具类,考察 Spark 分布式程序的执行地点 1. 工具类编写 [ JMX ] Java Management Extend , Java 管理扩展服务. 主要用于运维和监控. [测 ...

  2. javascript模块导入导出

    第一次知道javascript有模块的概念通常都是使用<script>标签进行引入,不过只能在html文件上使用 增加的模块就如同php里的include.require可以使用引入的内容 ...

  3. 【Nginx】开启 gzip和缓存

    Nginx 开启 gzip和缓存 时间:2016-09-23 16:42:37 nginx 是一个高性能的 Web 服务器,之前也写过一些关于 nginx 的文章.为了提高博客的响应速度,可以从设置 ...

  4. 转 10 个 Nginx 的安全提示

    Nginx是当今最流行的Web服务器之一.它为世界上7%的web流量提供服务而且正在以惊人的速度增长.它是个让人惊奇的服务器,我愿意部署它. 下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你 ...

  5. HTML5API之获取地理位置详解

    在使用地理位置API之前先来了解一下什么是经度和纬度以及地理位置获取的原理 首先经度指的是南北极的连接线,纬度指的是东西的连接线 地理位置的获取原理是通过IP地址(基于ISP记录,能够知道这个IP地址 ...

  6. BZOJ4766:文艺计算姬(矩阵树定理)

    Description "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数 ...

  7. P1231 教辅的组成

    传送门:https://www.luogu.org/problemnew/show/P1231 这是一道很不错的网络流入门题,关键在于如何建图. 首先,我们将练习册和源点连一条边权为1的边,然后若书 ...

  8. 【转】网络安全——一图看懂HTTPS建立过程

    阅读目录 准备工作(对应图中prepare1234) 发起链接 最后 关于网络安全加密的介绍可以看之前文章: 1. 网络安全——数据的加密与签名,RSA介绍2. Base64编码.MD5.SHA1-S ...

  9. Odoo作为App后端时如何调试App

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307340.html  一:Odoo可以作为app后台+后台管理系统使用 Odoo作为一个可供二次开发的框架, ...

  10. Locust环境搭建及应用-hc课堂笔记

    Locust环境搭建: 1,在命令窗口中,进入到python项目路径,如:d:\Pycharmproject\venv\Scripts 2,执行Scripts下的active.bat,进入到虚拟环境 ...