自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(181)
  • 收藏
  • 关注

转载 n*m的矩阵,行和列都递增有序,求是否出现target元素(面试题)

题目描述:给定一个n*m的矩阵,矩阵的每一行都是递增的,每一列也是递增的,给定一个元素target,问该target是否在矩阵中出现。思路:先从最左下角的元素开始找,三种情况: 1. 如果该元素大于target,说明target一定不会出现在最后一行中(因为最后一行也是递增的,其他的更大于target) 2.如果该元素小于target,说明target可能会出现...

2018-10-23 20:12:00 792

转载 求数组所有区间最大值减去最小值之差的和(贝壳笔试题)

这个题直接暴力求解的话时间复杂度肯定是不行的,所以,我们要计算每个数值的贡献,对每一个数求他当最小值当了多少次,当最大值当了多少次,最后当最大值的次数乘以这个数值减去当最小值的次数乘以数值就得到这个数的贡献,依次把这n个数的贡献加起来就是整个极差之和。在计算一个数当了多少最值的时候,我们要理解问题,因为区间是连续的,所以,以最小值为例,如果一个数是当前这段区间的最小值,那么他一定...

2018-08-19 00:08:00 1596

转载 关于二分查找中的中点问题

最近写整数的二分查找,也就是二分index,期间会用到mid = (left + right) / 2;这个求他的中点,之前一直这么用,也和mid = left + (right - left) / 2交叉着用,没发现什么区别,而且我之前也手推过,发现这两个数学上是等价的,然而,今天做了一道二分的题目,发现用前面这种方式写的话就会出错,后面的那种方式就对,查了一下原因发现是前者可能在执行...

2018-07-20 11:51:00 670

转载 numpy中min函数

numpy提供的数组功能比较常用,NumPy中维数被称为轴,轴数称为秩。import numpy as np比如a = np.array([[1, 5, 3], [4, 2, 6]])a.min()返回的就是a中所有元素的最小值a.min(0)返回的就是a的每列最小值a.min(1)返回的是a的每行最小值光这么说可能有点犯迷糊,下面举一个三维的例子b = np...

2018-01-21 20:09:00 1556

转载 关于二分查找的总结

最近又重新拾起了一直很凌乱的二分查找,各种版本,有时候总是很难调对,今天就整理了一下。最基础的二分查找是从非递减序的数组中查找某个元素是否在数组中,如果在的话,随意返回一个位置,如果没有这个元素,返回-1。那么就有了下面这个基础的算法//查找目标元素在数组中的位置,任意一个都可以,如果没有返回-1int Binary_search(int *arr, int n, int...

2018-01-15 17:39:00 102

转载 Python写网络爬虫爬取腾讯新闻内容

最近学了一段时间的Python,想写个爬虫,去网上找了找,然后参考了一下自己写了一个爬取给定页面的爬虫。Python的第三方库特别强大,提供了两个比较强大的库,一个requests, 另外一个BeautifulSoup,这两个库目前只是会用,其他的还不太了解,网上给了一个BeautifulSoup文档的链接,特别方便,不会的直接查(中文版的),还有一个关于requests的。在使...

2017-05-05 11:26:00 1274

转载 codeforces 148D Bag of mice(概率dp)

题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完之后会随机跳出来一个。取到每个小鼠的概率是一样的,跳出的也是一样的。先取到白色的小鼠赢,问最后princess能赢的概率。思路:概率dp,如果把princess能赢的分成两种情况,那么这...

2016-05-21 11:41:00 114

转载 codeforces 505C Mr. Kitayuta, the Treasure Hunter(dp)

题意:有30001个岛,在一条线上,从左到右编号一次为0到30000。某些岛屿上有些宝石。初始的时候有个人在岛屿0,他将跳到岛屿d,他跳跃的距离为d。如果当前他跳跃的距离为L,他下一次跳跃的距离只能为L-1,L,L+1之一且不能为0。他只能往编号更大的岛跳,直到他不能跳,问他最多能收集多少个宝石?思路:用dp[i][j]表示在第i个岛,上一步跳的距离为j的收集到的最多宝石的个数。这样...

2016-05-18 15:27:00 110

转载 HDU 4336 Card Collector(容斥)

题意:要收集n种卡片,每种卡片能收集到的概率位pi,求收集完这n种卡片的期望。其中sigma{pi} <=1;思路:容斥原理。就是一加一减,那么如何算期望呢。如果用二进制表示,0表示未收集到,1表示收集到。那么1/p1(p1表示的是事件1发生的概率)表示的是1发生的期望,这边包括001,011,111,101同理,1/p2包括的是010,011,111,1101/p...

2016-05-09 21:52:00 131

转载 HDU 4196 Remoteland

题意:给定一个n,然后让你从1-n中选出某些数乘起来,使得乘积最大,并且乘积必须是完全平方数。思路:将1-n种每个数都分解素因子,把他们的素因子的幂加起来,如果是偶数,就说明可以构成完全平方数,乘起来,如果是奇数,说明不能构成,减去一个就是偶数了,所以减去一个再乘起来。因为要分解1-n当中所有的素因子,然后乘起来,那么也就是分解n!的素因子,所以只要找出来他的所有的素因子的幂指数为奇...

2016-05-09 21:41:00 82

转载 HDU 5667 Sequence(矩阵快速幂+费马小定理)

题意:不好复制,直接上链接http://acm.hdu.edu.cn/showproblem.php?pid=5667思路:观察递推式我们可以发现,所有的f_if​i​​都是aa的幂次,所以我们可以对f_if​i​​取一个以aa为底的loglog,即g_i=log_a\ f_ig​i​​=log​a​​f​i​​那么递推式变成g_i=b+c*g_{i-1}+g_{i-2}g...

2016-05-07 23:19:00 103

转载 POJ 1845 Sumdiv(因子分解+快速幂+二分求和)

题意:给你A,B,让求A^B所有的因子和模上9901思路:A可以拆成素因子的乘积: A = p1^x1 * p2^x2 *...* pn^xn那么A^B = p1^(B*x1) * p2^(B*x2) *...* pn^(B*xn)那么A^B所有的素因子和就是(p1^0 + p1^1 + p1^2 + ... + p1^(B*x1) ) * (p2^0 + p2^1 + ...

2016-05-06 23:46:00 98

转载 codeforces 580D Kefa and Dishes(状压dp)

题意:给定n个菜,每个菜都有一个价值,给定k个规则,每个规则描述吃菜的顺序:i j w,按照先吃i接着吃j,可以多增加w的价值。问如果吃m个菜,最大价值是多大。其中n<=18思路:一看n这么小,除了暴力之外就得想想状态压缩dp了。因为每种菜正好两种状态(吃过与没吃过),正好可以使用二进制来表示每种状态,那么一共有(1<<n)位种可能,即从状态(000...0)到状态...

2016-05-06 14:41:00 95

转载 HDU 5637 Transform

题意: 有两种变换:  1. 改变此数二进制的某一位(1变成0 或者 0变成1)  2. 让它与给出的n个数当中的任意一个做异或运算给你两个数s, t,求从s到t最少要经过几步变换,一共m组查询思路: 仔细观察会发现其实只与(s^t)有关,那么设x = s^t,那么x就是s和t二进制之间的差别(仔细想想就是s和t相同的位都是0, 不同的都是1,说明只要需要发生变化的位都是1)...

2016-03-08 21:00:00 92

转载 二分图的判定hihocoder1121 and hdu3478

这两个题目都是二分图的判定,用dfs染色比较容易写。算法流程:选取一个没有染色的点,然后将这个点染色,那么跟他相连的所有点一定是不同颜色的,所以,如果存在已经染过颜色的,如果和这个颜色相同的话,就说明不是二分图,否则,继续从这个点往下染。hihocoder#include <cstdio>#include <cstring>#inclu...

2016-01-07 20:37:00 93

转载 codeforces 132C Logo Turtle(dp)

可以用三维dp来保存状态,dp[i][j][k]表示在前i个字符变换了j步之后方向为k(k = 1 or k = 0)的最优解,也就是离原点的最大距离。这里规定0方向为正方向,1位负方向,表示的是当前这个人朝哪个方向。这两个方向是对立的。所以就可以递推一个关系式,分第i个字符为'F'or'T'时如果为'F'  依次枚举在第i个位置变换了几步,这是枚举的范围为0~j, 假...

2015-12-30 20:36:00 99

转载 LCIS 最长公共上升子序列

之前求过LIS和LCS,这次求两者的综合问题。那么就需要用到这两个问题的思想。首先,用dp[i][j]表示str1和str2分别以i和j结尾的LCIS,那么对于str1[i] == str2[j]的时候,就要在1~j-1之间找到最优解,就是满足条件dp当中最大的一个,这个就是LIS的思想。如果不等的时候顺便更新一下小于str1[i]的dp最大的str2[j],这样的话在更新str1[...

2015-12-28 15:05:00 90

转载 欧拉函数与欧拉定理

以下内容摘自acdreamer求欧拉函数值long long Euler(long long n){ long long ans = n; for (long long i = 2; i * i <= n; i++) { if (n % i == 0) { ...

2015-12-12 21:41:00 85

转载 HDU 5592 ZYB's Premutation(树状数组+二分)

题意:给一个排列的每个前缀区间的逆序对数,让还原 原序列。思路:考虑逆序对的意思,对于k = f[i] - f[i -1],就表示在第i个位置前面有k个比当前位置大的数,那么也就是:除了i后面的数字之外,它是在剩下的数字当中第k+1大的。知道这个之后,可以用树状数组来帮助找出剩下的数中第k大的数,刚开始我们可以让1~n中每个元素都标记为1,那么他们的前缀和就代表它是第几小。所以,...

2015-12-10 16:16:00 102

转载 HDU 4294 Multiple(搜索+数学)

题意:给定一个n,让求一个M,它是n个倍数并且在k进制之下 M的不同的数字最少。思路:这里用到一个结论就是任意两个数可以组成任何数的倍数。知道这个之后就可以用搜索来做了。还有一个问题就是最多找n+1个数,因为由鸽巢原理,这n+1个数当中模上n一定有一个一同的。所以他们一减就是答案。如果找到直接是它的倍数的话,就直接返回。搜索时保存的是它的余数,如果余数为0 的时候直接返回...

2015-11-09 19:48:00 130

转载 HDU 4296 Buildings(贪心)

题意:给定n个建筑物,每个建筑物都有两个属性w, s,每个建筑物都有一个PDV =(Σwj)-si 。意思就是它上面的所有的w相加减去它的s,让求怎么放置这个建筑物使得每个建筑物当中PDV最大的最小。思路:贪心。关键步骤就是怎么排序的问题假设考虑两个建筑物,分别为w1, s1, w2, s2; 假设他们上面的w的总和为sum,1.当标号为1建筑在上面时 最大差值...

2015-11-09 19:39:00 88

转载 HDU 4288 Coder(线段树)

题意:给定三种操作  1. add x 向序列中添加x,添加之后序列还保持有序  2. del x 删除序列中值为x的元素  3. sum 求下边模5等于3的元素和思路:直接暴力也可以过,就是看暴力写的好不好了。用数组直接暴力可过。暴力代码:#include <cstdio>#include <cstring>#in...

2015-11-09 19:25:00 120

转载 hdu 5073 Galaxy

题意是给定n个点,让求找到一个点p使得sigma( (a[i] - p) ^ 2 ) 最小,其中a[i]表示第i个点的位置。其中有k个点不用算。思路:发现这道题其实就是求n-k个点方差。那么推一下公式就是:sigma( (a[i] - p)^ 2 ) = sigma( a[i]^2 + p^2 - 2*a[i]*p )= sigma( a[i]^2 + p^2) ) ...

2015-11-06 20:00:00 64

转载 ZOJ 3905 Cake(贪心+dp)

动态规划题:dp[i][j]表示有i个Cake,给了Alice j个,先按照b排序,这样的话,能保证每次都能成功给Alice Cake,因为b从大到小排序,所以Alice选了j个之后,Bob最少选了j个,所以i>=2*j, 并且每次Alice选的时候Bob已经选过了。所以当i>=2 * j的时候Alice一定能选. 所以dp[i][j] = max(dp[i - 1][j],...

2015-11-04 09:39:00 105

转载 ZOJ 3903 Ant(公式推导)

这个公式推导过程是看的这位大牛的http://blog.csdn.net/bigbigship/article/details/49123643扩展欧几里德求模的逆元方法:#include <cstdio>#include <cstring>#include <algorithm>using namespace std...

2015-11-03 11:09:00 71

转载 除法求逆元(扩展欧几里德和费马小定理)

我们都知道除法不满足取模,那么我们可以求模的逆元来进行求结果,既然乘法可以取模,如果这个数除以一个数,那么我们可以让他乘以一个数使得和除以那个数的结果相同,那么乘的这个数就是那个数的乘法逆元。下面摘自Acdreamer的博客今天我们来探讨逆元在ACM-ICPC竞赛中的应用,逆元是一个很重要的概念,必须学会使用它。对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫...

2015-11-03 11:03:00 251

转载 HDU 4442 Physical Examination(关于贪心排序)

这个题目用贪心来做,关键是怎么贪心最小,那就是排序的问题了。加入给定两个数a1, b1, a2, b2.那么如果先选1再选2的话,总的耗费就是a1 + a1 * b2 + a2; 如果先选2再选1,总的耗费就是a2 + a2 * b1 + a1.这时比较两个数的大小,发现两边都有a1+a2,所以只是比较a1*b2和a2 * b1的大小。#include <cstdio&...

2015-11-01 15:47:00 80

转载 ACM vim配置

ACM现场赛时用的,比较简短,但是主要的功能都有了。直接打开终端输入gedit ~/.vimrc 把下面的东西复制到里面就行了。filetype plugin indent oncolo eveningset nuset hlsearch set syntax=onset tabstop=4set shiftwidth=4set smarttab...

2015-10-27 18:52:00 96

转载 2015 南阳ccpc The Battle of Chibi (uestc 1217)

题意:给定一个序列,找出长度为m的严格递增序列的个数。思路:用dp[i][j]表示长度为i的序列以下标j结尾的总个数。三层for循环肯定超时,首先离散化,离散化之后就可以用树状数组来优化,快速查找下边在j之前,值比ary[j]小且长度为i-1 的个数#include <iostream>#include <cstdio>#include &lt...

2015-10-27 09:15:00 94

转载 次小生成树(入门)

次小生成树,就是求除了最小生成树之外最小的那个生成树。下面介绍一下利用prim求次小生成树的主要步骤。1.先求出来最小生成树。并将最小生成树任意两点之间路径当中的权值最大的那一条找出来,为什么要找最大的呢,因为生成树加入一条边之后一定构成了回路,那么肯定要去掉这个回路当中一条边才是生成树,那么,怎么去边才是次小的,那就去掉除了刚刚添加的一条边之外回路当中权值最大的一个,所以留下的...

2015-10-26 18:17:00 123

转载 有向图的欧拉路径POJ2337

每个单词可以看做一条边,每个字母就是顶点。有向图欧拉回路的判定,首先判断入度和出度,其实这个题判定的是欧拉通路,不一定非得构成环,所以可以有一个点的顶点入度比出度大1,另外一个点的出度比入度大1,或者每个点的出度和入度相等。用并查集判断是否弱联通。最后dfs求出欧拉路径,不过这个题是让求字典序最小的那个,所以加边之前先把边排序。#include <iostream&gt...

2015-10-24 09:50:00 178

转载 欧拉回路和欧拉路径

几个入门的题目:hdu 1878判定一个图是否存在欧拉回路。直接判断图是否连通和每个点的度数是否为偶数就行了。(可用并查集判断连通,也可以用dfs)#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using n...

2015-10-23 21:03:00 60

转载 HDU 4462(暴力枚举)

因为题目当中的k比较小k <= 10,所以可以直接枚举,题目里面由两个trick, 一个是如果每个点都可以放稻草人的话,那么答案是0, 另外一个就是如果可以放稻草人的点不用被照到。知道了这两个基本上暴力既可以ac了#include <iostream>#include <cstdio>#include <cstring>#in...

2015-10-23 11:03:00 98

转载 HDU 4455(dp)

题意:给定一个序列ai,个数为n。再给出一系列w;对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数。思路:动态规划,用dp[w]表示当前长度为w的时候的权值和。显然dp[1] = n; 如果求dp[2]的话,那么它可以由dp[1]推出来,首先它比dp[1]少了最后一个子序列,那么最后一个子序列的权值用num来表示,num[i]从后面开始数i位的权值...

2015-10-23 10:55:00 213

转载 鸽巢原理入门

鸽巢原理又叫抽屉原理,百度百科的定义是:桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。下面有两个入门题目:POJ2356题意:从n个数中选出几个数的和是n的倍数。因为给定的是n个数,所以结论是一定存在。证明如下:用sum[k]表示前k个数的和,假设不存在,那么sum[k] %...

2015-10-22 14:49:00 142

转载 HDU 4819 Mosaic(二维线段树)

给定一个矩阵,查询一块子矩阵的最大值和最小值,然后他们和的一半替换(x, y)这个位置,裸的二维线段树。和一维差不多,只不过是一维当中保存的是最值,而这个保存的是个数组而已,而这个数组也是个一维的线段树,所以就是二维线段树。具体见代码注释。#include <cstdio>#include <cstring>#include <algor...

2015-10-13 11:56:00 58

转载 POJ 1330 Nearest Common Ancestors(LCA模板)

给定一棵树求任意两个节点的公共祖先tarjan离线求LCA思想是,先把所有的查询保存起来,然后dfs一遍树的时候在判断。如果当前节点是要求的两个节点当中的一个,那么再判断另外一个是否已经访问过,如果访问过的话,那么它的最近公共祖先就是当前节点祖先。下面是tarjan离线模板:#include <cstdio>#include <cstring>...

2015-10-12 15:30:00 80

转载 POJ 1470 Closest Common Ancestors(LCA&RMQ)

题意比较费劲:输入看起来很麻烦。处理括号冒号的时候是用%1s就可以。还有就是注意它有根节点。。。Q次查询在线st算法/************************************************************************* > File Name: 3.cpp > Author: ...

2015-10-08 20:53:00 87

转载 CDOJ 92 Journey(LCA&RMQ)

题目连接:http://acm.uestc.edu.cn/#/problem/show/92题意:给定一棵树,最后给加一条边,给定Q次查询,每次查询加上最后一条边之后是否比不加这条边要近,如果近的话,输出近多少,否则输出0思路:没加最后一条边之前两点之间的距离是dis(u) + dis(v) - 2*dis(lca(u, v)); 加上之后就是必须要经过这两个点。(假设最后添加的...

2015-10-08 20:48:00 87

转载 POJ 1986(LCA and RMQ)

题意:给定一棵树,求任意两点之间的距离。思路:由于树的特殊性,所以任意两点之间的路径是唯一的。u到v的距离等于dis(u) + dis(v) - 2 * dis(lca(u, v)); 其中dis(u)表示u到根节点的距离。RMQ求LCA,过程如下,摘自http://dongxicheng.org/structure/lca-rmq/在线算法DFS+ST描述(思想是:将树...

2015-10-08 18:50:00 126

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除