优化
Lawrence_121
千里之行,始于足下
展开
-
k倍区间 (抽屉原理)
转自:https://www.cnblogs.com/tyty-Somnuspoppy/p/8454521.html给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗? 输入-----第一行包含两个整数N和K。(1 &l...转载 2018-04-23 06:58:59 · 403 阅读 · 0 评论 -
分巧克力-------二分查找
儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力,其中第i块是Hi Wi的方格组成的长方形。 为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足: 1. 形状是正方形,边长是整数 2. 大小相同 例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。...原创 2018-11-05 18:46:36 · 208 阅读 · 0 评论 -
深度搜索之基本款
思路:从1号节点出发开始遍历。如果遍历结束时所有visited[]数组的值全都是true,那么就说明整个图是连通的,否则就不是。 #include <iostream> #include <vector> using namespace std; int m, n; vector<int> g[100001]; bool visited[100001]...原创 2018-11-10 15:55:10 · 132 阅读 · 0 评论 -
k倍区间
给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗? 输入 ----- 第一行包含两个整数N和K。(1 <= N, K <= 100000) 以下N行每行包含一个整数Ai。(1 <= Ai <= ...原创 2018-06-18 09:49:27 · 174 阅读 · 0 评论 -
偶像的条件
/* 描述 小Hi的学校正面临着废校的大危机。面对学校的危机,小Hi同学们决定从ABC三个班中各挑出一名同学成为偶像。 成为偶像团体的条件之一,就是3名团员之间的身高差越小越好。 已知ABC三个班同学的身高分别是A1..AN, B1..BM 和 C1..CL。请你从中选出3名同学Ai, Bj, Ck使得D=|Ai-Bj|+|Bj-Ck|+|Ck-Ai|最小。 输入 第一行包含3个整数,N,...原创 2018-06-17 10:14:47 · 386 阅读 · 0 评论 -
小Hi和小Ho的礼物
/* 描述 某人有N袋金币,其中第i袋内金币的数量是Ai。现在他决定选出2袋金币送给小Hi,再选2袋金币送给小Ho,同时使得小Hi和小Ho得到的金币总数相等。 他想知道一共有多少种不同的选择方法。 具体来说,有多少种下标四元组(i, j, p, q)满足i, j, p, q两两不同,并且i < j, p < q, Ai + Aj = Ap + Aq。 ...原创 2018-06-08 17:03:57 · 921 阅读 · 0 评论 -
四平方和问题优化:
四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1^2 + 2^2 (^符号表示乘方的意思) 对于一个给定的正整数,可能存在多种平方和的表示法。 要求你对4个数排序: 0 <= a <= b <=...原创 2018-06-08 11:03:10 · 596 阅读 · 0 评论 -
一面砖墙
/* 小Hi的学校的教学楼前有一面砖墙。这面墙由N层砖砌成,其中从上到下第i层包含Ci块高度相同但宽度不同的砖。 例如下图所示的这面墙,由3层砖砌成。其中第1层包含3块砖,从左到右宽度依次是6、4和3;第2层包含4块砖,从左到右依次宽度依次是4、4、2和3;第3层包含3块砖,从左到右宽度依次是5、6和2。 +------------+ | 6 | 4 |3 | +------------+...原创 2018-06-06 21:17:26 · 968 阅读 · 0 评论 -
在n个元素的数组中,找到差值为k的数字对去重后的个数
/* 在n个元素的数组中,找到差值为k的数字对去重后的个数 思路: 双重循环枚举对,然后把一对数放在set容器去重,最后输出set的大小 缺点: 当数据很大时,时间复杂度会很高 */ #include <iostream> #include <set> using namespace std; set <pair<i...原创 2018-06-06 20:58:28 · 839 阅读 · 1 评论 -
N个整数中,在所有大于等于K的两个数的差中,找出最小的差(双指针优化)
先介绍一下暴力枚举,有的时候我们要对一个数组进行i和j的双重循环枚举: 当i=0时,j要从下标1遍历到5。时间复杂度为O(N^2)双指针的思路是什么呢?就是j下标并不需要从i+1开始重新向后枚举一遍,而是随着i向后移动,j也向后移动。 从图中我们可以看到j一直是往右走,不会出现往左移动,当然前提的保证数组是有序的,这样的时间复杂度为O(N)/* 给定N个整数A1,A2....原创 2018-06-12 11:34:21 · 1152 阅读 · 0 评论 -
平方十位数
/* 标题:平方十位数 由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。 这其中也有很多恰好是平方数(是某个数的平方)。 比如:1026753849,就是其中最小的一个平方数。 请你找出其中最大的一个平方数是多少? 思路1: 1.枚举答案 X[9876543210,1026753849] 2.判断是不是恰好0-9十个数字 ...原创 2018-06-04 19:55:02 · 1174 阅读 · 0 评论 -
深度搜索之(加强版)序号
在之前基本款代码里使用visited数组来区分顶点,也就是visited[x]==true表示x顶点已经访问过,visited[x]==false表示还没访问过x顶点。加强版中使用”颜色”来区分顶点,除此之外还给每个顶点都打上一个时间戳。 一开始所有顶点都是白色的,白色代表顶点还没有被访问过。当我们第一次遍历到一个顶点x时,会把顶点x染成灰色...原创 2018-11-12 10:49:59 · 209 阅读 · 0 评论