给定一个长度为 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

题解

又是一道关于数组骚操作的题目。
巧妙运用数组序列来进行记忆化和答案求和。
由于是一边记忆一边统计个数所以肯定有遗漏,不过遗漏的有规律(对称)于是可以补全遗漏。
两个数字拼接就类似于a[i]×10⌊log10a[j]⌋%k+a[j]%ka[i]×10⌊log10⁡a[j]⌋%k+a[j]%k

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
long long n,k,ans;
long long a[1000010];
long long cnt[11][100010];
int log_k(long long item){long long res=0;while(item){item/=10;res++;} return res;
}
void solve(){long long power=1;for(int i=0;i<n;i++){//当a[i]在后面的时候符合条件的答案有多少,此处开始出现遗漏ans+=cnt[log_k(a[i])][(k-(a[i]%k))%k];//注意一定要再次模K,因为k-a[i]%k可能为k。 //cout<<k-(a[i]%k)<<endl;power=1;for(int j=0;j<11;j++){//当a[i]在前面的时候符合后面条件的答案加一 cnt[j][((a[i]%k)*(power))%k]++;power*=10;power%=k;}}
}
int main(){cin>>n>>k;for(int i=0;i<n;i++){cin>>a[i];}solve();memset(cnt,0,sizeof(cnt));//因为是更新型记忆所以一次记录不够完整,不过幸好是对称缺失//于是只需要改变顺序将缺失操作补全即可。 reverse(a,a+n);solve();cout<<ans;return 0;
}

注意

不可以一次性全部记忆化更新完。
这样会导致答案偏大,因为会出现自身和自身拼接的情况
错误代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
long long n,k,ans;
long long a[1000010];
long long cnt[11][100010];
int log_k(long long item){long long res=0;while(item){item/=10;res++;} return res;
}
void solve(){long long power=1;for(int i=0;i<n;i++){power=1;for(int j=0;j<11;j++){//当a[i]在前面的时候符合后面条件的答案加一 cnt[j][((a[i]%k)*(power))%k]++;
//          cout<<j<<" "<<((a[i]%k)*(power))%k<<endl;power*=10;power%=k;}}
}
int main(){cin>>n>>k;for(int i=0;i<n;i++){cin>>a[i];}solve();for(int i=0;i<n;i++){ans+=cnt[log_k(a[i])][(k-(a[i]%k))%k];
//  cout<<cnt[log_k(a[i])][(k-(a[i]%k))%k]<<endl;}cout<<ans;return 0;
}

整数拼接(记忆化更新)相关推荐

  1. Bailian4117 简单的整数划分问题【整数划分+记忆化递归】

    4117:简单的整数划分问题 总时间限制: 100ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+-+nk, 其中n1>=n2>=->=n ...

  2. leetcode 397. Integer Replacement | 397. 整数替换(动态规划,记忆化搜搜)

    题目 https://leetcode.com/problems/integer-replacement/ 题解 一开始写了个 dp,结果因为大数组 OOM 了. dp 数组需要计算每一个值,有的值是 ...

  3. DFS——记忆化搜索——动态规划

    以洛谷P1802  5倍经验日 为例 https://www.luogu.org/problem/show?pid=1802 题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却 ...

  4. J - 数塔 HDU - 2084(深搜,记忆化搜索+)

    在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目 ...

  5. 记忆化搜索c语言,2017C语言混搭 标题:10.图形排版 搜索+记忆化

    标题:图形排版 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi. 假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 该工具会按照图片顺 ...

  6. 【AcWing】数位统计DP、树形DP、状态压缩DP、记忆化搜索

    [AcWing]数位统计DP.树形DP.状态压缩DP.记忆化搜索 一.数位统计DP 二.状态压缩DP 三.树形DP 四.记忆化搜索 一.数位统计DP 计数问题 给定两个整数 a 和 b,求 a 和 b ...

  7. 图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)

    题目链接 题目大意: q∈[1,1e5],n∈[1,1000],mi∈[1,10]q\in[1,1e5],n\in[1,1000],m_i\in[1,10]q∈[1,1e5],n∈[1,1000],m ...

  8. 棋盘分割(记忆化搜索)

    棋盘分割 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  9. LuoguP3183 [HAOI2016]食物链 记忆化搜索

    题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...

  10. 「BZOJ1055」[HAOI2008] 玩具取名 - 区间动规 - 记忆化搜索

    ->戳我进原题 [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2486 Solved: 1448 Descript ...

最新文章

  1. linux shell 小数计算
  2. 给定下面的java代码_则运行_会产生类型的异常_JavaSE_笔试题_单选选择题
  3. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受
  4. PHP的各种参数设置ini_set:内存 错误等级 session
  5. MyBatis知多少(8)关系型数据库
  6. UVA10152 ShellSort【匹配】
  7. Android TeaPickerView数据级联选择器
  8. 将adb命令打包成脚本
  9. 3D打印-切片软件简介
  10. javascript 逻辑运算符 和 或 非
  11. java SE复习笔记55
  12. 芝麻信用分怎么提高到750+芝麻信用分暴涨攻略
  13. lintcode 168. 吹气球 动态规划
  14. 思考“手绘家谱”的算法
  15. Word页眉页码、公式编号、引用文献编号
  16. 服务器:php-fpm线程卡死导致网站无响应
  17. java语音输入_求教:javaWeb,添加语音输入的功能实现方法
  18. 当商业空间撞见元宇宙艺术
  19. 阻尼振动与无阻尼电磁振动(大学物理笔记)
  20. git小文件时报错Remote origin does not support the LFS

热门文章

  1. 论文笔记:PaintsTorch: a User-Guided Anime Line Art Colorization Tool
  2. 姿态估计(人体关键点检测)之CPN
  3. python爬虫:批量下载qq空间里的照片(二)
  4. 迪文屏与单片机c语言范例,STM32与迪文屏通讯 DMA模式
  5. php 字符显示不出来,ps文字显示不出来怎么办?
  6. 利用python快速视频格式转换 解决 Premiere 导入TS文件只有声音没有视频
  7. 关于电脑突然产生数字文件夹用360删不掉的情况
  8. Androidstudio连接华为手机问题
  9. 繁凡的ACM模板(满注释模板)
  10. AtCoder Beginner Contest 264笔记