codility
文章平均质量分 81
cpcs
诚实努力
展开
-
Codility上的练习 (13)
(1)AbsDistinct给定一个按非递减顺序排好顺序的非空整数数组,问里面右多少种不同的绝对值。数据范围:整数数组长度[1..10^5], 整数范围[-2147483648, +2147483647]。要求复杂度 : 时间O(N),空间O(1)分析: 题目不难…… 但是细节很重要。因为整数直接取绝对值可能回溢出(例如-2147483648),而且我们没有额外空间hash。所以一个好办法是类似合原创 2014-12-10 06:50:08 · 3815 阅读 · 0 评论 -
codility上的问题(37) Magnesium 2014
这个题也比较简单,给定一个无向图,不保证是平面图,原创 2014-07-04 17:00:41 · 2679 阅读 · 0 评论 -
codility上的练习(5)
codility出了lesson 5了。(1) 合法括号序列,原创 2013-11-17 23:09:14 · 2591 阅读 · 0 评论 -
codility上的练习 (4)
(1) 给定一个数组A,N个整数,问是否能组成三角形,即是否存在 0 A[P] + A[Q] > A[R],A[Q] + A[R] > A[P],A[R] + A[P] > A[Q].数组里地数都是整数,有整有负N 范围[0..10^5], 数组中数的范围[-2147483648,+2147483647]要求复杂度 时间O(NlogN),空间O(N)函数头部int solution(const v原创 2013-11-16 13:34:36 · 2685 阅读 · 0 评论 -
codility上的问题(33) Oxygenium 2014
2014年第一个问题。问题描述很简单,给定一个整整数组A,问A有多少个段(下标对)i数据范围 :数组元素个数N [1..10^6]K [0..10^9]数组元素值范围: [-10^9,+10^9]要求:时间复杂度和空间复杂度都是O(n)。分析:注意如果(i,j)满足条件,那么(i+1,j) (i+2,j)....都满足条件,所以满足条件的对子随着i的递增,j可以不减小…… 于是就是单调队列,维护i原创 2014-04-15 13:17:02 · 2172 阅读 · 0 评论 -
codility上的问题(32) Nitrogenium 2013
好久没写,积累了很多……codility的题最近难度增高了一些,有些还是阅读理解……比如说这个题,给定数组A,表示每个点的高度。起初所有的点都是连接在一起的。还有一个数组B,表示水面的高度。如果水面高度大于等于某点高度,则这个点在水面下。问每天在水面上的点有多少个连通区域。(一个连通区域就是一条线段,全在水面上,他称为岛屿)举例: A[0] = 2 B[0] = 0 A[1] = 1原创 2014-04-15 11:07:06 · 2614 阅读 · 0 评论 -
codility上的练习(8)
目前,最新是练习8,这次的题还是比较好玩的。(1) 一个数组中的元素原创 2013-12-22 23:44:47 · 4155 阅读 · 1 评论 -
codility上的练习(7)
codility都练习都到8了,先写7吧。这次题目比较简单,都是最大子段和相关的。(1) Max-slice-sum最大子段和 元素个数n [1..10^5],数组元素个数[-10^6,+10^6],保证最终结果32bit整数内。要求时间复杂度O(n),空间复杂度O(1)。解:// you can also use includes, for example:// #include int原创 2013-12-22 23:23:19 · 5677 阅读 · 0 评论 -
codility上的问题(31) Carbo 2013
给定一个原创 2013-12-23 10:58:45 · 2442 阅读 · 0 评论 -
codility上的问题(27) Helium 2013
这个题目比较难,给定一个字符串S,找到另外一个字符串T,T既是S的前缀,也是S的后缀,并且在中间某个地方也出现一次,并且这三次出现不重合。返回T的最长长度。例如:输入数据是"barbararhubarb" ,输出为1。虽然barb也既是前缀也是后缀,但是在中间没出现过。输入串长度N, [0..10^6] 只包含26个字母。要求复杂度:时间空间都是O(N)。分析: 长度包含0……比较可恶原创 2013-08-27 18:56:12 · 2924 阅读 · 1 评论 -
Codility上的练习 (6)
codility新出了lesson 6。两道题都是关于众数的。(1) Dominator就是找数组中出现次数大于一半的数。数据范围 数的个数 N [0..10^6], 数组里地整数范围[-2147483648, +2147483647],要求复杂度时间O(N),空间O(1)。经典找众数的方法,区别在于众数不一定存在,所以还得检查一下找到的那个数是不是真正的出现次数大于一半。返回的是众数的一个下标原创 2013-11-17 23:20:01 · 2755 阅读 · 0 评论 -
codility上的问题(30) Boron 2013
题目有个背景,但是本质如下,一个数组有N个数,首先先要找到所谓的局部最大值,也就是说,如果数组a下标范围是[0..N-1],局部最大值的下标x在[1..N - 2]内,并且a[x] > a[x - 1], a[x] > a[x + 1]。先要找到这样的下标index,假设我们形成这样一个index数组,然后求一个K值,从index数组找出K个数,任意两个数的差距都要>=K,求这个最大的K值。需要注原创 2013-11-16 13:27:20 · 2735 阅读 · 0 评论 -
codility上的问题(29) Beryllium 2013
codility上的问题。原创 2013-11-16 12:38:09 · 2571 阅读 · 0 评论 -
codility上的问题(38) Aluminium 2014
这是目前codility的最新challenge,貌似还没结束。题目说了一大堆,简单来说就一句话,在一个shu z允许交换两个元素的位置原创 2014-07-04 17:26:28 · 4883 阅读 · 2 评论 -
codility上的问题(34) Fluorum 2014
好久没写codility的题了,一来没时间,二来有的题目不太好分析。这个题比较有意思,我还没有给出非常严格的证明。给定一棵树(无向无环图),从一个节点出发,每次选择一个节点,从起点到目的节点的路径上没经过的节点尽可能多,直到遍历完所有的节点。如果起点到两个目的节点的路径中没经过的节点同样多,则选择标号较小的节点作为目的节点。如此继续,直到遍历所有的节点,求按顺序选择了哪些目的节点?例如从2 开始,原创 2014-07-04 11:41:54 · 2621 阅读 · 0 评论 -
Codility上的练习(12)
(1) MinMaxDivision给定一个非负整数数组,每个整数都是[0..M]之间的,你要把它分成K段,(切K - 1刀),段可以为空,每个元素必须属于一段,每段必须包含0个或者多个连续的元素,要求分好和最大段的和尽量小,返回这个尽可能小的最大和。数据范围 :N, K [1..10^5], M [0..10^4]要求复杂度 时间 O(N * log(N + M)) 空间 O(1)。分析:典型的原创 2014-12-10 05:18:10 · 6736 阅读 · 0 评论 -
Codility上的练习 (10)
(1)ChocolatesByNumbersN块巧克力,从0到N - 1编号,排成一个圈。从0号开始吃,如果上一次吃了x号,这一次吃(x + M) % N号,如果该号码已经存在,则停止。问结束前,吃了多少块巧克力?数据范围M ,N [1..10^9]要求复杂度 时间O(log(M + N)) 空间O(1)分析: 可以证明吃巧克力必然形成一个从0号开始的圈。因为0, M % N, M * 2 %原创 2014-12-09 09:17:42 · 3134 阅读 · 0 评论 -
Codility上的练习 (9)
(1) CountSemiprimes半质数的定义是恰好两个质数(可以相同)乘积的数,例如 4, 6, 9, 10, 14, 15, 21, 22, 25, 26,都是半质数。给定N,长度为M的等长整数数组P和Q,满足1 ≤ P[K] ≤ Q[K] ≤ N, 求每个区间[P[k], Q[k]]之间有多少个半质数。函数头部:vector solution(int N, vector &P, vect原创 2014-12-09 03:01:16 · 3473 阅读 · 0 评论 -
Codility上的练习(11)
(1)Ladder给定两个等长的数组A和B, A[i]和B[i]表示求一个有A[i]级的梯子,每次上1级或者两级,上到最高级的方法数对2^B[i]取余数的结果。数据范围:数组长度 L [1..30000] , A中数字范围 [1..L], B中数字范围[1..30]要求复杂度 时间空间都是O(L)分析:打表法——我们循环可以把0..L的结果都算出来 f[i] = f[i - 1] + f[i -原创 2014-12-09 23:49:05 · 4451 阅读 · 0 评论 -
Codility上的练习 (15)
(1) NumberSolitaire一个游戏是从一排N个格子开始,格子编号0..N - 1,起初,棋子在A[0],每个格子里有一个整数(可能正,可能负)。你在格子I,你扔骰子,得到点数X = [1..6],然后走到编号为I + X的格子,如果这个格子不存在就再投一次骰子,直到I + X号格子存在。你走到N - 1号格子时,游戏结束。你所经过格子里的整数的和是你的得分,求最大可能得分?数据范围:原创 2014-12-10 07:59:50 · 4763 阅读 · 0 评论 -
Codility上的练习 (14)
(1) TieRopes给定n段绳子——一个正整数数组,和一个正整数K,每次只能连接相邻的两根绳子,连接好了绳子长度为之前的绳子长度和,并且位置不变,问这么连接下去,最多能形成多少根长度至少为K的绳子?数据范围: N[1..10^5], 数组元素和K的范围[1..10^9]。要求复杂度: 时间O(N), 空间O(1)。分析: 假设最终扔掉一根绳子,那么为什么不把这根绳子连接到它相邻的绳子上呢? 所原创 2014-12-10 07:18:00 · 3801 阅读 · 0 评论 -
Codility上的问题 (40)Sulphur 2014
给定n个绳子,每个绳子编号0..N - 1。每个绳子下面挂一个重物,每个绳子另外一端(不挂重物的那端),可以挂在其他的绳子上,也可以挂在顶端(只有一个顶端),这些绳子形成一个树。树的结构由数组A,B,C,给出。其中A表示绳子的承受力,如果挂载绳子下的总重量大于绳子的承受力,绳子会断。B表示绳子一端挂的重物的重量,C表示该绳子另外一端挂的绳子的编号(C[i] 例如: A[0] = 5原创 2014-12-07 15:45:53 · 3262 阅读 · 0 评论 -
codility上的问题 之六 Epsilon 2011
codility上得问题还有这么一个特点是题目本身不难,但是它却能描述的很复杂。比如这个题:给定 数组A和B都是整数数组,各包括N个数,定义函数F(X,K),U(X)是最大值,D(X)是最小值,S(X)是差。F(X,K)=A[K]*X + B[K] U(X)=max{ F(X,K) : 0 ≤ K D(X)=min{ F(X,原创 2013-08-18 09:01:28 · 2523 阅读 · 5 评论 -
Codility上的问题 (40) Phosphorus 2014
感觉这个题很难,之前想了很久,一个tree-dp。题目大大意:(N + 1)个点,N条边的树。边代表走廊,节点代表监狱。但是监狱门都开了,有些节点有罪犯,他们可以沿着树边(走廊)任意移动,如果他们至少有一个人能走到叶子节点,他们就越狱了。你需要安排M个狱警,他们只能被安排再树节点上,并且这些节点最开始是没有罪犯的。狱警不能移动,罪犯走到叶子的路径上的节点如果有狱警,他就无法通过该节点,求至少要几个原创 2014-12-05 07:42:31 · 3005 阅读 · 0 评论 -
Codility上的问题(39) Silicium 2014
切蛋糕问题:一个矩形的蛋糕,长为X,宽为Y,沿着X和Y轴各切了刀,形成(N + 1) ^ 2 小块。求面积第K大的块的面积。函数头部:int solution(int X, int Y, int K, vector &A, vector &B);数据范围:N [1..40000];X, Y [2..4 * 10 ^ 8]相邻两刀之间的距离(包括刀和边界的距离)要求复杂度时间: Nlog(N +原创 2014-12-05 05:44:55 · 2596 阅读 · 0 评论 -
Codility上的问题(35) Neon 2014
也是比较有意思的题,越来越数学了……不善于做这种题。原创 2014-07-04 13:51:52 · 2468 阅读 · 1 评论 -
codility上的问题 (36)Natrium 2014
这个题比较简单,好像也比较old,给定一个整数数组A,有N个元素,找到所有下标对(P,Q)满足 0 ≤ P ≤ Q 数据范围N [1..3*10^5]数组元素[-10^9, +10^9]要求时间复杂度O(N),空间复杂度O(N)。分析: 如果b[i] = max{a[i..N - 1]} ,则对每个i,我们找到最大的j,满足b[j]>=a[i],就可以了。这样做的目的是b,反映了后面还有没有比a原创 2014-07-04 16:23:15 · 1779 阅读 · 0 评论 -
codility上的练习(3)
今天发现又出了lesson 3...不过题目都很简单……(1) Min-avg-slice 给定一个长度为n的整数数组,找到一个连续的子数组,数组元素的平均值最小。 数据范围N [1..10^5],数组元素范围[-10^4, +10^4]。要求复杂度: 时间O(N),空间O(N)。分析: 就是求最小值……因为如果拉进别的数,平均值会增大,干嘛搞成这样,空间可以O(1)。说得神乎其神的……代码:1.原创 2013-09-17 17:54:00 · 4852 阅读 · 1 评论 -
codility上的问题之四 Gamma 2011
这个题目比较难,给定一个全部由字母组成的字符串,长度为N,求其中长度大于1的回文子串的个数。其实它求的是下标对的个数 (x,y)满足y-x > 1并且x到y(包含)之间的字符串是回文的。 输入范围:长度 [0..20000] 输出: 长度大于1的回文子串个数,如果个数大于10^8,输出-1。 要求复杂度: 时间复杂度 O(N),空间复杂度 O(原创 2013-07-23 18:29:26 · 2358 阅读 · 0 评论 -
codility上的问题 之三 Beta 2010
// you can also use includes, for example:// #include #include using namespace std;int solution(const vector &A) { // write your code here... int n = A.size(), m = n << 1, i, r, d; vec原创 2013-07-14 22:47:01 · 2934 阅读 · 0 评论 -
codility上的问题(25) Omega 2013
这个题有意思。有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去)。每隔盘子有几种命运:(1) 掉到井底(2) 被卡住(3) 落到别的盘子上方盘子的高度也是单位高度。给定井的深度和每个盘子的宽度,求最后落到井内的盘子数。如图井和盘子信息如下: A[0] = 5原创 2013-08-26 19:39:25 · 2346 阅读 · 0 评论 -
codility上的问题 (21) Upsilon 2012
这是我目前最喜欢的codiltiy上的问题之一。问题描述是:给定一个整数数组A,所有的数均不相同。假设下标从0开始,找到一个数组B, 满足A[B[0]] > A[B[1]] > A[B[2]] >...A[B[K]],对任意两项A[B[i]]和A[B[i + 1]],任意j, min(B[i],B[i + 1]) 例如,对数组 A, A[0] = 9 A[1] = 10原创 2013-08-25 16:23:19 · 2009 阅读 · 0 评论 -
codility上的问题(24) Psi 2012
给定一个n * n 的格子,边都是导线,M秒,每秒有一根导线被烧断,问从(0,0)到(n - 1, n - 1)在第几秒后不连通?如果一直连通的话,返回-1.输入为烧掉的边,也就A,B,C如果C= 0 ,烧掉的是(A,B) (A, B + 1) , C = 1烧掉的是(A,B) (A + 1, B)。于是输入的就是n和3个数组。C的输入比较坑,每个数组给长度,其实A,B,C三个数组都是一样原创 2013-08-26 18:38:50 · 1858 阅读 · 0 评论 -
codility上的问题(26) Hydrogenium 2013
题目,挺无聊的。一个裸的最短路。n个点,你住在0,要去买东西,每个点有一个关门时间,问能最早买到食物的时间。有两点注意 (1)有重边 (2) 原图是dicrect连接。。。但不是有向边,被这个误导了。direct当直接讲……原图无向图。后面就是裸的dijkstra算法。数据范围 点 N [0..100] 不知道为啥还有0.。。。 连边 数 M [1..100原创 2013-08-26 20:40:42 · 2023 阅读 · 0 评论 -
codility上的问题 (23)Chi 2012
这个题也比较有意思。意思是给定一个数组A,长度为M,里面都是正整数,代表每块地形的高度。现在要测试一种加农炮,给定一个炮弹的高度H, 如果存在最小的I,满足0 = H,则炮弹会被挡住,于是A[I - 1]的高度会增加1。如果H 所有的A[I],这个炮弹也无效。现在再给定N个整数的数组B代表炮弹高度,计算出最后地形的样子。数据范围: M和N的范围[0..30000] A和B中元素的高度[0..原创 2013-08-25 16:55:47 · 1930 阅读 · 0 评论 -
codility上的问题 (20) Tau 2012
这个题目不难,给定一个m行n列的矩阵,我们认为矩阵是循环的,也就是说第0列和第(n - 1)列是相邻的,第0行和第(m - 1)行是相邻的。求最大子阵和……数据范围:m.n [1..100],矩阵中每个整数[-10000, +10000]。 要求复杂度O(m^3 + n ^3) 空间复杂度O(m * n)。分析: 首先循环最大子段和的问题,我们可以在O(n)时间内解决。因为循环最大子段和等原创 2013-08-25 10:55:04 · 1844 阅读 · 0 评论 -
codility上的问题(18) Rho 2012
从正整数1开始,产生一个数列,数列中的每个数是之前出现过的任意两个数的和(可以相等),问产生正整数A,需要的数列长度至少是多少?返回这样一个最短的序列。例如A=42 可以这样[1, 2, 3, 6, 12, 24, 30, 42],也可以[1, 2, 4, 5, 8, 16, 21, 42],后者是最短的。A不大于600。分析: 本题没规定时间、空间复杂度。因为本题只能暴力搜索,但原创 2013-08-20 20:03:52 · 2012 阅读 · 2 评论 -
Codility上的问题 (17) PI 2012
这个题比较简单,给定一个整数数组,对每个元素,求出和它最近比它大的数的距离(下标绝对值),如果没有比它大的数,认为距离是0。数组元素个数 N [0..50000],数组元素范围[-10^9, +10^9]。要求复杂度 时间 空间 都是O(N)。分析: 这个题比较简单吧。跟直方图最大矩形差不多,类似于求左右边界。求左边界的话记住,有这个数在的话,比它更早的并且比它小的数都没有意原创 2013-08-20 19:32:31 · 1723 阅读 · 0 评论 -
codility上的问题(15) Xi 2012
进入2012年的题 codility上的题目开始变难,变得有意思起来。给定两个长度在[1..300000]的只包含0和1的串S和T,它们是2进制表示的,S表示的数A不大于T表示的数B,即A 0。还有一个参数是K, 1结果 对 1000000007取模。要求复杂度:时间空间都是O(log(A +B))分析: 我们求[0..B]之间有多少个数满足要求…… 一个显然的dp。不过我写了好久,原创 2013-08-20 18:48:20 · 1874 阅读 · 0 评论 -
Codility上的问题 (16) Omicron 2012
比较无聊的题,求斐波那契数的第N^M项。 f(0) = 0, f(1) = 1, f(n) = f(n - 1) + f(n - 2),结果对10000103取模。 N, M在[0..10^7]之间。要求复杂度:时间O(log(N * M)),空间O(1)。分析: fib数取模有周期,并且对质数的周期一定是从最开头开始。也就在对P取模下,一定有f(T) == f(0)。关于周期的求法有原根之类原创 2013-08-20 18:56:08 · 1694 阅读 · 0 评论