- 博客(21)
- 收藏
- 关注
原创 【NOI2013】矩阵游戏
【题目描述】 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式: F[1][1]=1 F[i,j]=a*F[i][j-1]+b (j!=1) F[i,1]=c*F[i-1][m]+d (i!=1) 递推式中
2016-07-18 11:51:11 904
原创 【BZOJ3669】NOI2014-魔法森林(神奇的解法)
在一个魔法森林中,有n个节点(n<=50000),m条边(m<=100000),每个节点有两个值ai,bi,1<=ai,bi<=50000。有一个精灵要从节点1到达节点n,一个节点i可以经过的要求是它携带的两个值A,B可满足A>=ai,B>=bi,求min(A+B)。 本题目的标准解法是LCT(link-cut-tree),这里讨论一种基于搜索算法的解决方法,其编程复杂性和理解难度略优于LC
2015-04-08 13:16:47 2518 1
原创 动态规划之插头DP入门
基于联通性的状态压缩动态规划是一类很典型的状态压缩动态规划问题,因为其压缩的本质并不像是普通的状态压缩动态规划那样用0或者1来表示未使用、使用两种状态,而是使用数字来表示类似插头的状态,因此,它又被称作插头DP。插头DP本质上是一类状态压缩DP,因此,依然避免不了其指数级别的算法复杂度,即便如此,它依然要比普通的搜索算法快很多。【例】Postal Vans(USACO training
2015-03-20 11:36:19 8863 3
原创 动态规划之状态压缩dp入门
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴。为了更好的理解状压dp,首先介绍位运算相关的知识。1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值。例如3(11)&2(10)=2(10)。2.’|’符号,x|y,会将两个十进制数在二进制下进行或运
2015-02-04 15:54:42 53172 22
原创 动态规划经典例题之传纸条
传纸条(NOIP2008,Vijos-1493)题目描述:小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。
2015-01-30 09:38:36 16732 6
原创 浅显易懂的动态规划入门
为了引出动态规划的基本思想,请看下面的例子:题目描述:斐波那契数列是数学中常见的数列,也叫兔子数列,它满足:a[1]=1,a[2]=1,a[n]=a[n-1]+a[n-2](n>2),输入n,输出a[n] mod 10000007的值。(n输入样例:345输出样例:235【算法分析】看到题目以后,我们可以很轻松的写出两个版本的代码,一个是递推
2015-01-27 15:18:27 1772 1
原创 每日一题之最长上升子序列
题目:有一个长为n的数列a0,a1,...,an-1。请求出这个序列中最长的上升子序列的长度。上升子序列指的是对于仍以的 i输入样例:5 4 2 3 1 5输出样例:3 (a1,a2,a4构成子序列2,3,5最长)思路1:这个问题是被称为最长子序列。可以通过DP的方法来求解。定义dp[i]为以ai为末尾的最长上升子序列的长度。以ai为结尾的上升子序列有两种情
2015-01-24 16:14:14 1928
原创 每日一题之找出水洼个数
题目描述:有一个大小为M*N的园子,雨后起了积水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼.要求,分别输入M,N,以及园子的积水情况。M,N000070000输入样例:10 1270000000077007770000077700007700077000000000077000000000070000700000070007070
2015-01-22 10:42:11 1971 1
原创 每日一题之找出频率>1/k的数字
题意描述:读入n个数字,这n个数字中,有一个数字出现的次数>n/k,剩下的每一个数字都是单独出现的,求那个数字是多少?k骗分思路:因为只有答案的那个数字是出现次数>=1次的,那么在读入的时候记录读入的前一个数字,判断这个数字和上一个数字是不是相等,如果相等,则必然是答案。这样子做,已经可以通过绝大多数(几乎100%的)随机数据了,但是依然不能保证AC,例如1 2 1 3 1
2015-01-21 08:38:00 1003
原创 每日一题之排序算法专题
排序算法专题输入n个数字,对这n个数字按从小到大的顺序排序输出。自己设计场景去考虑使用什么算法合适,可以从时间,空间,数字范围,n的范围等角度去写排序的算法。常用的排序算法简介请移步http://blog.csdn.net/hguisu/article/details/7776068介绍的非常详细,非常赞的一篇博客在这里只浅谈一下各种排序算法的用途:先解
2015-01-19 15:07:47 881
原创 每日一题之二进制下1的个数
题目:输入一个整数n,输出这个整数二进制下1的个数。读入样例:13输出:3解释:13二进制下是1101,一共3个1。看到这道题,首先应考虑到:n是一个整数,而不是正整数,因此,读入一个数字进来以后,第一件事就是应该将它变成它的绝对值。之后来考虑如何把它二进制下1的个数求出来。思路1:短除法。来看这样一个例子:13/2=6……1 6 /2=
2015-01-17 18:53:53 838
原创 每日一题之找出两个单独出现的数字
题目:读入2n个数字,其中,除了有两个数字是单独出现外,剩下任何一个数字出现次数都是偶数个,请写出算法找出这两个数字并输出读入样例:81 3 4 5 9 1 4 3输出:5 9思路1:看到这道题目,第一反应就是for循环枚举一遍,然后统计每个数字出现的次数,最后输出出现次数是奇数次的:map num;for (int i=1;i<=n;i++){ cin>
2015-01-16 20:11:21 1202
原创 中体彩软件研发笔试题
1,请写出Linux系统下的常用操作命令的含义cp:__,ls:__,rm:__这道题目考察的是对linux系统的基本熟悉程度,linux常用的命令如下:Linux常用命令大全常被考到的有:cp:复制文件ls:显示当前目录下的文件rm:删除文件cd:切换目录,cd是切换到根目录,cd ..是切换到上一层,cd 文件夹名字是切换到该文件夹中shutdown:关机
2015-01-14 10:57:54 2003
原创 多益网络笔试题
一、有20张上下表面光滑的扑克牌,其中有8张向上,要求你闭着眼睛且不借助任何工具把这20张扑克牌分成两堆,使得每堆向上的扑克牌的数目一样多答案:首先,把扑克牌随机分成两堆,一堆12张,一堆8张,假设12张的里面有X张朝上的,那么8张的里面就有8-X张朝上的,X张朝下的,此时,把8张扑克牌全部反面,那么朝上的也变成了X张。二、有一串玛瑙项链,项链上面有N个玛瑙珠子,这些玛瑙有M (M
2015-01-14 10:17:19 14873 2
原创 算法面试题之找出不同的数
一共有2N+1个数字,其中只有一个数字出现次数仅1次,剩下每个数字出现次数都是偶数,问那个数字是多少。例如,读入1 2 2 5 1,输出应该是5。这个题已经烂大街了,谁都知道解决方法是异或XOR,也就是C\C++\JAVA中的^符号。由于A^A=0,而且还满足交换律,因此,把读入的所有数字异或到一起,结果就是那个不一样的数字。如果现在读入2N+2个数字,有两个数字落单,那又该怎么办呢?
2015-01-13 15:37:08 1231
原创 算法面试题之判断整数是否可以被3整除
一个整数,知道位数,如何判断它是否能被3整除,不可以使用除法和模运算。小学奥数里面学过,如果一个数字各个位上的和是3的倍数,那么它也能被3整除。拿999做例子来看:999各个位上的和是27,27可以被3整除,但是不能用mod运算,如何判断27可以被3整除呢?我们继续递归的去求27个个位上的和:2+7=9,此时,它变成了一个一位数,一位数能被3整除的只有3,6,9三个数字,用if语句就可以表
2015-01-13 14:59:33 8486 3
原创 算法面试题之求前1000大&在树上判断节点父子关系
一、有10亿个杂乱无章的数,怎样最快地求出其中前1000大的数。想答对这个题是非常简单的,建立一个大小为1000的小根堆就可以了。这个堆满足两个性质:1.堆中的元素个数总是小于等于1000的2.堆顶取出的元素总是这个堆里面最小的那一个这样,这个题可以这样做:priority_queue q;while (cin>>n){ n=-n; //c++中默认优先队列是一个大根堆,
2015-01-13 14:19:56 2018
原创 算法面试题之对n个数排序
A文件中最多有n个正整数,而且每个数均小于n,n 这个题用上一篇博客中算法面试题之统计词频前k大中的基于文件的归并排序算法显然是可以秒杀的,但是不是很好写,这道题目强调了每个数字都小于10^7,而且不会出现重复的数字,又给了1M的内存,因此必然是想让我们用一个其他的算法去搞定他,怎么搞定呢?我们来看题目里面出现的不和谐的描述!不会出现重复的数字,每个数字都小于10^7,1M内存这对我们来说
2015-01-13 11:43:00 2151
原创 每日一题:求数组中出现次数超过一半的元素
求数组n中出现次数超过一半的数这个题目最简单的思路有两种:一种是排序然后顺序枚举统计,复杂度O(NLOGN),还有一种是直接枚举然后用MAP或者HASH去统计,时间复杂度是O(NLOGN(MAP)或者是N(HASH)),但额外的空间复杂度是O(N),这么裸的思路肯定不是最好的答案,面试官肯定还想看到更好的答案。来看这样一个例子:5 1 5 4 1 1 3 1 2 1 1一共11个数
2015-01-13 11:21:52 2783 4
原创 算法面试题之统计词频前k大
有一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前十个词。算法1:将这10W个单词读入,并排序,然后顺序枚举,每当一个单词和左边的单词相同,则计数器num++,否则,将这个单词还有其词频加入新的数组,最后按频率排序输出前10大。代码如下:sort(s,s+n);int num=0;for (int i=0;i<n;i++){ if (i+1==n || s[
2015-01-12 12:27:22 7622
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人