随笔分类 -  算法-题

摘要:AcWing 1086. 恨7不成妻 数位dp例题 注意一个数不能分别对两个不同的数取余,只能将其保存下来 例如下面代码中的prev_b #include<bits/stdc++.h> using namespace std; typedef long long LL; LL MOD = 10000 阅读全文
posted @ 2022-06-24 16:15 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:此题中,dp数组保存存在前导0的windy数(因为在使用时,当前位的前面会存在非0数) 结果为不存在前导0的windy数(循环过程中第一次不包含0)。 #include<bits/stdc++.h> using namespace std; typedef long long LL; LL dp[1 阅读全文
posted @ 2022-06-20 20:49 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:ABC 256 G - Black and White Stones 题目: https://atcoder.jp/contests/abc256/tasks/abc256_g 题解: https://atcoder.jp/contests/abc256/editorial/4142 思路: 求一个 阅读全文
posted @ 2022-06-20 11:17 80k 阅读(94) 评论(0) 推荐(1) 编辑
摘要:前序遍历的第一个元素是根,设其为r,则可以在中序遍历中找到r,并分别确定左右子树的前序遍历和中序遍历。这样递归求解即可。 注意,在中序遍历中查找r时,可以不用遍历,而是预处理出每个r在中序遍历I中的位置invI,这样就可以在O(1)的时间查找到。 是否可以生成一棵二叉树的条件为,每一次递归,判断r在 阅读全文
posted @ 2022-06-13 19:30 80k 阅读(63) 评论(0) 推荐(0) 编辑
摘要:对于一个首尾相接的数组,设其旋转k1、k2、k3...次后可以恢复原状。 且k1<k2<k3<...。 则可以肯定,k1为这个数组的循环节,且k2、k3...均为k1的倍数。 一种求循环节的方法为: 对长度为n的循环字符串,先从小到大遍历可能的循环节的长度i,判断是否n%i==0,然后对其中的除第一 阅读全文
posted @ 2022-06-10 18:47 80k 阅读(36) 评论(0) 推荐(0) 编辑
摘要:根据三个等价条件,可以将n^2个数的GCD转化为n个数的GCD,且这n个数是连续的,可以通过线段树在log时间求解。 转化方式为 a与b的GCD=a与a-b的GCD,因为b=x*GCD。 阅读全文
posted @ 2022-06-09 15:37 80k 阅读(25) 评论(0) 推荐(0) 编辑
摘要:设f(x)为x的最大平方除数(x的除数且为平方数),两数i与j相乘为平方数,等价于i/f(i)*j/f(j)为平方数且由于i / f(i)与j / f(j)不可能被任何质数整除两次以上则两数i与j相乘为平方数,等价于i / f(i)= j/ f(j)且f(i)可以在sqrt(i)的时间复杂度求出。 阅读全文
posted @ 2022-06-09 14:46 80k 阅读(317) 评论(0) 推荐(0) 编辑
摘要:经典数学问题,在一根棍上多个蚂蚁,同时有不同的行走方向和相同的行走速度。如果蚂蚁碰撞则反向。 则整个过程可以等价为,蚂蚁之间不碰撞而穿过。 例题:Kick Start Round C 2022 https://codingcompetitions.withgoogle.com/kickstart/r 阅读全文
posted @ 2022-05-26 18:44 80k 阅读(334) 评论(0) 推荐(0) 编辑
摘要:此题中对面包的分割,可以反向看做为合并。这样对面包的N-1次分割操作,可以视为类似哈夫曼树构建的N-1次合并,这样就可以利用哈夫曼编码的方式进行转化。 阅读全文
posted @ 2022-05-23 22:13 80k 阅读(59) 评论(0) 推荐(0) 编辑
摘要:AtCoder Beginner Contest 252 E - Road Reduction https://atcoder.jp/contests/abc252/editorial/4005 可以证明,总可以构建出一个生成树,使某一点到其余点的距离,等于原图中某一点到其余点的最小距离。 证明方法 阅读全文
posted @ 2022-05-23 17:24 80k 阅读(75) 评论(0) 推荐(0) 编辑
摘要:例题 AcWing 1010. 拦截导弹 建立最长下降子序列模型。 同时对于最少需要配备的系统数,可以利用贪心法,判断添加新系统还是放入某个旧系统中(若放入旧系统,则选择大于当前导弹高度的最小值,同时可以发现系统当前高度单调上升,可二分)。 AcWing 187. 导弹防御系统 上一题的拓展,由于有 阅读全文
posted @ 2022-05-19 22:03 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:对AcWing 1015. 摘花生(走一次)的拓展 二维网格,左上到右下走两次,或者左上到右下再到左上,求收集数总和的最大值。 等价于求两条路径,和行走方向是无关的。 故都可以等价为从左上同时走。 例题: AcWing 1027. 方格取数AcWing 275. 传纸条 构建dp的方法是,三位dp, 阅读全文
posted @ 2022-05-19 21:50 80k 阅读(28) 评论(0) 推荐(0) 编辑
摘要:1、在图的邻接表存储中,可以使用模拟链表法: const int N,M=2*N; h[N],e[M],ne[M],idx;//链表头/链表结点的序号/链表节点的下一个节点 void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++;} 也可 阅读全文
posted @ 2022-05-01 20:05 80k 阅读(30) 评论(0) 推荐(0) 编辑
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000877b42/0000000000afdf76#problem 数学题,利用和的平方与平方的和以及交叉项的关系求解。 可以在k<=2的范围内得到一个有效的解。 #inc 阅读全文
posted @ 2022-05-01 17:00 80k 阅读(32) 评论(0) 推荐(0) 编辑
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000877b42/0000000000afe6a1#analysis 一道复杂的字符串拼接模拟题。 可以考虑对每个字符串进行预处理。 如果在middle的字符在其他字符串中 阅读全文
posted @ 2022-05-01 16:36 80k 阅读(40) 评论(0) 推荐(0) 编辑
摘要:正方形经过任意的旋转(90°)和翻转后,只能有8种情况,而非4!种。 解释如下: http://www.360doc.com/content/18/0407/14/30048172_743530034.shtml 可以用4种旋转和1种翻转,遍历到这8中情况。 例题: LCP 58. 积木拼接 先处理 阅读全文
posted @ 2022-04-25 10:23 80k 阅读(355) 评论(0) 推荐(0) 编辑
摘要:1、分治 2、记忆化 3、动态规划 https://codingcompetitions.withgoogle.com/codejam/round/0000000000877ba5/0000000000aa9280#problem #include <bits/stdc++.h> using nam 阅读全文
posted @ 2022-04-11 21:19 80k 阅读(33) 评论(0) 推荐(0) 编辑
摘要:想要将集合中数字分为两个总和相等的集合,可以使用启发式优化的方式。 方法为:将数字依次加入到,两个集合中,当前和较小的集合。 这样可以将两个集合的误差降到一个数字的大小(|n|)级别,而非sum(|n|). 阅读全文
posted @ 2022-04-11 11:41 80k 阅读(71) 评论(0) 推荐(0) 编辑
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000876ff1/0000000000a45fc0#problem 1、利用总边数=度数/2。 2、为了解决度数不平衡的问题,交替使用T(随机传送)和W(邻接传送)操作。 阅读全文
posted @ 2022-04-04 20:49 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:本质上是使用二分查找 注意:在考虑二分的边界时,可以不用数组的下标边界进行替代,而是直接使用极大的数进行替代 1 class Solution { 2 public: 3 double findMedianSortedArrays(vector<int>& nums1, vector<int>& n 阅读全文
posted @ 2022-02-14 13:53 80k 阅读(23) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示