ACM算法题目和总结
文章平均质量分 69
此专栏收录了小熊零基础入门ACM竞赛到获得亚洲区金奖的解题报告和算法总结。
新熊君
欢迎关注公众号「新熊君」
展开
-
高中数学如何解决阿里面试算法题
大家好,我是新熊君。今天跟大家分享一道阿里的算法面试题。题目描述给定一个正整数nnn,把它拆分为若干个数的和,记这若干个数的积为MMM,求MMM的最大值。题目分析这道题正常的思路是使用动态规划算法。假设 dp[n]dp[n]dp[n] 为正整数 nnn 拆分后能够得到最大的积。状态转移时只需要遍历小于nnn的每一个正整数 kkk ,取 k∗dp[i−k]k*dp[i-k]k∗dp[...原创 2020-02-19 17:19:37 · 531 阅读 · 0 评论 -
[Alibaba] 校招二面面经
项目先问了简历上面的项目,着重问了一个和本校研究生合作的一个NLP课题,因为是用深度学习做的,问了一些深度学习的基本知识,和自己对深度学习的理解。然后问了一下我在项目中起的作用,我提到了通过复现其他paper来比较实验效果,然后面试官让我举一个复现论文的例子,我就给他讲了一个机器学习的例子,从word embedding到word2vec再到训练和测试过程,method方面我提到了朴素贝叶斯分...原创 2019-03-20 01:10:10 · 537 阅读 · 1 评论 -
[Tencent/WeChat] 面试算法题及解题报告
说明算法部分一共面了四道题解题思路仅供参考,可能存在更好的解法。题目1题意层序遍历二叉树,每个节点有一个值(val),以链表的形式返回遍历节点对应的val。树和链表定义如下:struct TreeNode {int val;TreeNode* Left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(N...原创 2019-02-27 15:35:42 · 600 阅读 · 0 评论 -
[Alibaba] 四数乘积问题
题意给定一个长度为nnn的数组aaa和一个正整数kkk,从数组中选择四个数,要求四个数的乘积小于等于kkk,求方案总数。数组中可能出现多个值相同的数。每次选择四个数时,同一个数不能被选择两次,而值相同的两个不同的数可以同时被选。1≤n≤1031 \leq n \leq 10^31≤n≤1031≤a[i]≤106(1≤i≤n)1 \leq a[i] \leq 10^6 (1 \leq...原创 2019-02-16 22:26:42 · 792 阅读 · 0 评论 -
[Alibaba] 猜数游戏
题意为了进一步宣传,Alibaba决定策划一个猜数游戏。 游戏开始前,Alibaba会随机保密地选择一个不大于nnn的正整数xxx让玩家来猜,并提供一个长度为nnn的数组aaa,a[i]a[i]a[i]表示玩家选择整数iii时需要付出的金钱。 每一轮游戏,玩家可以任意选择一个整数并付出相应的价钱,如果猜中了,即选择的数是xxx,则游戏结束,否则Alibaba的漂亮小姐姐会告诉玩家xxx比玩家...原创 2019-02-16 21:52:30 · 367 阅读 · 0 评论 -
[Hulu] 数组最大价值
题意给定一个包含nnn个正整数的数组aaa,另外有一个长度为nnn的价值数组bbb,表示第iii个正整数的价值为b[i]b[i]b[i]。我们可以选择任意个不相交区间[i,j][i, j][i,j],需要满足i&lt;ji &lt; ji<j 且a[i]=a[j]a[i] = a[j]a[i]=a[j],随后我们可以获得区间[i,j][i, j][i,j]所有数的价值,即b...原创 2019-02-16 21:33:30 · 484 阅读 · 0 评论 -
BZOJ 2154 + 2693 莫比乌斯反演 (好题
BZOJ 2154题目链接 BZOJ 2693题目链接(权限题)再送上一道类似推导思路的题: NJU 1017题目链接参考文档 (用了一整天 终于刷完文档例题了 qwq)题意: 给定n,m(&amp;amp;lt;=1e7)n,m(&amp;amp;lt;=1e7)n,m(∑i=1n∑j=1mlcm(i,j)∑i=1n∑j=1mlcm(i,j)\sum_{i =1}^n \sum_{j=1}^m lcm(...原创 2017-07-31 00:45:14 · 899 阅读 · 3 评论 -
牛客网暑期ACM多校训练营(第五场) B Pell方程
题目链接题意: 定义好数nnn满足在区间[n2+1,n2+2n][n2+1,n2+2n][n^2+1, n^2+2n]存在一个数xxx满足x|n4x|n4x|n^4 给定一个正整数mmm,求不小于mmm的最小好数。 m≤101000m≤101000m \leq 10^{1000}思路:数论好题~ 设x=n2+ax=n2+ax = n^2 + a 则可得:n2+a|n4...原创 2018-08-03 16:39:47 · 402 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第四场)A 拓展欧拉定理/降幂定理
题目链接题意: 给一个⻓度为nnn的三进制串,有这样⼀个操作:在每个222后⾯插⼊⼀个111 ,每个111后⾯插⼊⼀个000,然后删掉第⼀个字符。问经过多少次操作后,该串变为空串。思路: 考虑遍历串的每一位,根据当前已经有过的操作次数(记为xxx)和当前位的情况来求解删除当前位及其产生的后续影响需要的操作次数。假如当前位为000,则其始终为一个000,故操作次数+1+1+1...原创 2018-07-31 15:53:43 · 332 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第三场)D 字符串匹配 FFT
题目链接题意:给定两个串A,B,问A中有多少个长度等于B的子串与B相似,两个同样长度的字符串相似的条件是:对于对应位置上的字符,差的绝对值不大于1思路:可以类似于FFT用于字符串匹配的算法。假设AAA的长度为mmm,BBB的长度为nnn,且下标均从1开始则相似子串的个数:Ans=∑j=0m−1[∑i=1n(Ai+j−Bi)2∗((Ai+j−Bi)2−1)=0]Ans = \sum_...原创 2018-10-12 12:05:26 · 269 阅读 · 0 评论 -
HDU 6084 | 2017百度之星资格赛 1005 卡特兰数 + 分块打表
题目链接思路: 卡特兰数的变形,此题的公式还是比较好推的。熟悉卡特兰数的同学应该一眼就能看出来,对于长度为lenlen的0101偏串: 设n=len2n = \frac{len}{2} 则其构成的方案数为卡特兰数的第nn项 即hnh_n对于此题,一个重要的突破口便在于想清楚这么一个事实: 一个长度为nn的01偏串,从其中任意去掉一个小的01偏串,剩下的串拼在一起仍然是一个合法的01偏串由01原创 2017-08-07 10:55:41 · 1216 阅读 · 0 评论 -
51Nod 1524 | Codeforces VK Cup 2015 - Finals F题 DP+数论
题目链接: 51Nod Codeforces思路: 一个直接的思路是可以考虑枚举每个数,再枚举每一个数的倍数,正向搜索,易发现其为O(nloglogn)O(nloglogn)的复杂度而我的思路是逆序DPDP。设dp[i]dp[i]是当ii这个数为合法解中的最小值时,包含的数的个数。 比如对于三个数:6,12,246,12,24 则: dp[6]=3dp[6] = 3 dp[12]=2d原创 2017-08-27 09:48:38 · 337 阅读 · 0 评论 -
BZOJ 3529 莫比乌斯反演 + 离线 + 树状数组动态维护前缀和
题目链接 参考资料 膜PoPoQQQ神犇题意:令F(i)F(i)为i的约数和。给定q个询问,每个询问包含n,m,a。 求Ans=∑x=1n∑y=1mF(gcd(x,y)) (F(gcd(x,y))<=a)Ans = \sum_{x=1}^n \sum_{y=1}^m F(gcd(x,y)) \space (F(gcd(x,y))<=a)课件里面讲得很详细,但其中的细节讲解可能对初学者不太友好。原创 2017-07-30 16:46:25 · 572 阅读 · 0 评论 -
BZOJ 2844 异或线性基(HDU3949 升级版
题目链接题意:给出nn个数和一个询问,询问为一个数xx,问nn个数任意组合异或后排序得到的结果中(不去重),数xx最先出现在第几位?思路: 类似于HDU 3949不过这是不去重,故难度大大增加。不过从样例的解释上来看,我们可以试着大胆猜想,每一个结果出现的次数都是一样的。然后推导一番可发现,每个数的出现次数cntcnt恰好是nn个数中不参与构成线性基的数任意组合的次数,即假设线性基的个数为tott原创 2017-09-07 22:30:19 · 420 阅读 · 0 评论 -
BZOJ 2115 异或线性基+DFS找环
题目链接题意:给定一个nn个点,mm条边的无向图,求出一条1−>n1->n节点的路径,使得路径上经过的边的权值的异或和最大。思路: 解决此题只需要基于一个事实: 任意一条1−>n1->n的路径的异或和都可以由任意一条1−>n1->n的路径和与图中一些环的异或和组合而成。为什么呢?简单画个图,举个例子~:考虑下面的这个图,n=8 m=9n=8 \ m = 9,存在33个环,标号1,2,31,2,3原创 2017-09-07 21:22:59 · 615 阅读 · 1 评论 -
HDU 5029 树链剖分+权值线段树
题目链接题意: 给定一颗n个结点的树,进行m次染色操作,对于每一次染色操作是选择树上的一条路径,将路径上所有节点都染上第zzz种颜色。 输出m次操作以后,每一个节点上染色次数最多的颜色。 1&lt;=n,m,z&lt;=1e51&lt;=n,m,z&lt;=1e51[L,R][L,R][L,R],我们在LLL处加1,R+1R+1R+1处减111,最后扫一遍即可。那对于多种颜色,虽...原创 2018-05-07 12:41:37 · 354 阅读 · 0 评论 -
HDU 5293 树链剖分 + 树形DP
题目链接题意: 给定有nn个节点的树和mm条链(链连接两个顶点,且有权值),要求选出一部分链,使连接以后图的每个圈没有公共节点,问能够选出的链的权值和最大为多少?考虑树形DP。对于当前顶点uu,假设dp[u]dp[u]为以uu为根节点的子树所能够达到的最大目标值。 另外定义: 1.ww为当前考虑的链权值。 2.sum[u]=∑dp[k]sum[u] = \sum dp[k](kk为uu的子节原创 2018-02-03 21:25:31 · 366 阅读 · 0 评论 -
HDU 6191 DFS序+可持久化字典树
题目链接思路: 推荐两个前置的入门题:题目1 题目2理解上面两题之后此题就变得很套路了。先用DFSDFS序转树形结构为线性结构,然后按DFSDFS序的顺序向字典树中插值,维护一个前缀字典树,然后利用可持久化保留每一个插值前的字典树历史版本。因为一个以uu节点为根的子树的所有节点在DFSDFS序中连续,且为in[u]−out[u]in[u]-out[u]。故利用差分的思想,可实现高效查询。 注意原创 2017-09-05 20:40:18 · 671 阅读 · 0 评论 -
HDU 4757 树链剖分+可持久化字典树
题目链接思路: 对于这种询问树的路径的题,第一反应就是树链剖分,但与多个给定值异或后的最大值却没有办法去高效维护。考虑另外的思路。有关异或的数据结构,自然会想到01字典树,联系一个经典问题: 求一个数与一个数集中的某个数异或的最大值 而对于此题,每一个询问相当于给定了一个数集,只不过其中的数是一条路径上所有顶点的值。故可以从根出发,对于每一个节点,都维护一个从根到它自己所经过的所有顶点值的前缀原创 2017-09-05 17:05:11 · 734 阅读 · 0 评论 -
HDU 2665 / POJ 2104 静态区间第k小 主席树
HDU题目链接 POJ题目链接很早就开始接触主席树,但一直没有真正理解其维护方式。后来了解了权值线段树和zkw线段树后,再回头学习主席树,发现其实理解起来也是很简单的。对于主席树的每一个节点,分别维护其左儿子节点的标号和右儿子节点的标号加上其维护区间的数的个数。对于区间[1,n][1,n]中的每一个[1,i](1<=i<=n)[1,i] (1<=i<=n),维护权值线段树的前缀和。然后利用差分思想原创 2017-09-03 10:46:41 · 371 阅读 · 0 评论 -
HDU 6070 二分+线段树
题目链接首先二分答案,记答案为AnsAns。 设区间[L,R][L,R]不同的值的个数为Size(L,R)Size(L,R) 则: Ans<=Size(L,R)R−L+1Ans <= \frac{Size(L,R)}{R-L+1}移项变形得: Size(L,R)+L∗Ans<=Ans(R+1)Size(L,R) + L*Ans <= Ans(R+1)故可以枚举每个区间的右端点RR 线段树每原创 2017-08-04 15:16:31 · 412 阅读 · 0 评论 -
HDU 6136 模拟 + 优先队列
题目链接题意:一个圆形跑道,nn个人跑步,每个人有不同的起始点和速度(大小和方向均可能不同),标号1-n,当两个人相遇,标号小的将会被淘汰,问最后还剩一个人时的时间。思路: 直接模拟,首先将n个人按起点的大小排序,考虑第i个被淘汰的人,一定是与其相邻的两个人中的一个相遇,故每次可以找到最快相遇的一对选手,将其中标号小的人淘汰,模拟整个过程即可。其中时间的最小值可用优先队列维护,细节见代码注释。代码原创 2017-08-17 21:23:46 · 836 阅读 · 0 评论 -
HDU 6155 DP+矩阵+线段树
题目链接思路: 设dp[i][0/1]dp[i][0/1]是前ii个字符能组成的以0/10/1结尾的子串个数。若第ii个字符为00,则: dp[i][0]=dp[i−1][0]+dp[i−1][1]+1dp[i][0] = dp[i-1][0] + dp[i-1][1] + 1 dp[i][1]=dp[i−1][1]dp[i][1] = dp[i-1][1]怎么来理解这个递推式呢?考虑把第ii原创 2017-08-21 17:15:22 · 520 阅读 · 0 评论 -
HDU 6169 Senior PanⅡ 数论+DP
题目链接题意:给定区间[L,R][L,R]和一个整数KK,问区间内所有满足其最小因子(11除外)为KK的数的和。 限制:L,R,K(<=1e11)L,R,K(<=1e11)思路: 首先考虑当KK不是素数时,其一定可以分解为更小的数的乘积,这样任何以KK为因子的数的最小因子一定不是KK,故直接特判0。然后考虑K的大小的限制。 对于任意一个[L,R][L,R]的区间,令PP为大于等于KK的第一个素原创 2017-08-22 19:56:53 · 1381 阅读 · 6 评论 -
HDU 6166 二进制分解 + 最短路
题目链接题意: 有nn个点mm条边的有向图,选出其中kk个点成为一个集合,集合中任意选一对跑最短路(不能是自己到自己),问其中距离的最小值是多少。思路: 首先一个明显的思路就是想办法转化成多起点多终点的最短路,然后建立一个超级起点和超级终点,跑一次得到答案。但此题起点集和终点集都来自一个集合,所以只能想办法将集合进行分组。考虑二进制分解,对于每两个不等的数,至少有一个二进制位不一样,这样我们可以原创 2017-08-23 09:56:38 · 640 阅读 · 0 评论