题目链接

题意

给你N个数字和一个K,问一共有几种拼接数字的方式使得到的数字是K的倍数,拼接:“234”和“123”拼接得到“234123”

AC

  • N <= 2e5,简单的暴力O(N^2)枚举肯定超时
  • 数字A和B拼接,B的位数最多10位,如果我们知道位数为(1-10)的数字和A拼接满足是K的倍数这样的数字有几个,就可以在N*10的复杂度下完成所有的拼接
  • 在读入数据的时候,我们可以统计出数字的位数和对K取余的结果,这样我们就可以在O(1)的时间内得到所有满足的情况
#include <iostream>
#include <cmath>
#include <map>
#include <vector>
#include <set>
#include <algorithm>
#define ll long long
#define ull unsigned long long
#define N 200005
using namespace std;ll a[N];
// 获取长度
int getlen(int x) {int sum = 0;while (x) {++sum;x /= 10;}return sum;
}
map<int, int> mp[11];
int main() {
#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);
#endif  int n, k;while (scanf("%d%d", &n, &k) != EOF) {for (int i = 0; i < n; ++i) {scanf("%lld", &a[i]);int len = getlen(a[i]);mp[len][a[i] % k]++;}ll ans = 0;// 枚举N个数字 for (int i = 0; i < n; ++i) {ll mul = 1;int len = getlen(a[i]);mp[len][a[i] % k]--;// 对每个数字,分别对位数为 j 的数字进行拼接 for (int j = 1; j <= 10; ++j) {mul *= 10;ull temp = a[i] * mul;if (mp[j].find((k - temp % k) % k) != mp[j].end())ans += mp[j][(k - temp % k) % k];}mp[len][a[i] % k]++;}printf("%lld\n", ans);for (int i = 0; i < 11; ++i)mp[i].clear();}return 0;
}

Codeforces Round #506 (Div. 3) - D. Concatenated Multiples(思维)相关推荐

  1. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  2. Codeforces Round #587 (Div. 3) C. White Sheet 思维

    传送门 文章目录 题意: 思路: 题意: 给你一个白色的矩形和俩个黑色的矩形,问白色被黑色覆盖后还能不能看到. 思路: 经典被简单题卡. 一开始写了个自我感觉很对的做法,结果wa41wa41wa41, ...

  3. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...

  4. Codeforces Round #617 (Div. 3) F. Berland Beauty 思维

    传送门 文章目录 题意: 思路: 题意: 给定一棵树,再给定若干两点最短路之间边权的最小值,让你给树的边权赋值,使得满足给定的条件,如果不存在输出−1-1−1. 思路: 观察一个性质,加入经过这条边的 ...

  5. Codeforces Round #506 (Div. 3)题解

    妈个蛋,被新手场教做人 不多说进正文 A. Many Equal Substrings time limit per test 1 second memory limit per test 256 m ...

  6. Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers

    CF-1029F 题意: a,b个小正方形构造一个矩形,大小为(a+b),并且要求其中要么a个小正方形是矩形,要么b个小正方形是矩形. 思路: 之前在想要分a,b是否为奇数讨论,后来发现根本不需要.只 ...

  7. Codeforces Round #506 (Div. 3) - F. Multicolored Markers (思维)

    题意 给两种颜色的数量 a 和 b,这两种颜色恰好组成一个长方形,而且至少有一种颜色在整个长方形里面也是个长方形,求满足条件中周长最小的情况 AC 当a是里面的小长方形,把a能组成的长方形的宽记录一下 ...

  8. Codeforces Round #506 (Div. 3) - E. Tree with Small Distances

    题目链接 题意 给你一棵树,最多加几条边,使点1到所有的点的最大距离不超过2 AC 贪心 从距离最远的点开始,找到他的父节点,然后把父节点相连的点删去,这样最好的情况可以删除三层点 遍历树的时候有两种 ...

  9. Codeforces Round #506 (Div. 3) - C. Maximal Intersection (思维,模拟)

    题目链接 题意 给你N个线段(一条直线上),问删去一个之后,最长公共长度 AC 先考虑不删边,有两种情况 所有直线在一起分布 显然公共部分是排序之后的(第一个右端点 - 最后一个左端点) 直线不在一起 ...

最新文章

  1. 办公电脑变买为租,“企业惊变”背后神秘推手
  2. linux网络配置及IP绑定
  3. VC编写的程序不能在其他机器上运行的解决方案(续)
  4. RequestDispatcher提供两个方法:forward,include有什么区别
  5. 面试题 php随机获取概率结果
  6. 华为交换机静态路由配置案例_快速了解配置三层交换机策略路由配置
  7. 详解JS中的事件机制(带实例)
  8. Linux英伟达驱动程序下载和安装
  9. Perl语言的常用符号
  10. 人人框架 mysql8.0_人人开源框架学习笔记
  11. 2021-11-02为了升级win11去升级BIOS遇到的坑
  12. 连接linux的共享文件夹,Linux连接共享文件夹
  13. LeetCode题目分类整理
  14. 2023年厦门大学应用统计专硕考研上岸经验分享
  15. 部分js文件在360浏览器极速模式下不加载,不执行的原因
  16. 数字PCR和实时PCR的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. python画地图模拟迁徙_python爬取百度地图迁徙-迁入地来源和迁出目的地
  18. Chemoffice 2018安装教程
  19. 关于脑电波的黑科技,离我们生活还有多远。
  20. 程序员高手和菜鸟的区别是什么?

热门文章

  1. 每天一个linux命令-用户之间切换
  2. TP5与TP3.X对比
  3. 如何测得存储空间大小
  4. 让那些为Webkit优化的网站也能适配IE10(转载)
  5. openSSL命令、PKI、CA、SSL证书原理
  6. 5个php实例,细致说明传值与传引用的区别
  7. 解决问题 “You don't have permission to access /index.html on this server.”
  8. kali linux 设置固定IP地址步骤
  9. mysql5.7.11源码安装_MySQL5.7.10最新版本源代码安装详细过程_MySQL
  10. android sd卡列目录文件_Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等...