51CTO博客开发soj
最长公共子序列问题: 给定2个字符串,求其最长公共子串。如abcde和dbada的最长公共字串为bd。 动态规划:dp[i][j]表示A串前i个和B串前j个的最长公共子串的长度。 则 若A[i] == B[j] , dp[i][j] = dp[i-1][j-1] + 1; 否则 dp[i][j] = max(dp[i-1][j],dp[i][j-1]); 时间复杂度O(N*M)。 d
给定一个rand7()函数可以生成1-7的随机数,如何通过rand7()函数构造出rand10()函数,使得rand10()函数可以生成1-10的随机数(显然要求概率平均)。 这道题是个概率问题。 显然一次rand7()不行。 2次可生成1-49的均匀随机数。 取其中10个即可。 即 int a = rand7() , b = rand7() ; while( a * 7 + b &
神奇的一行。 while(a%=b^=a^=b^=a); b^=a^=b^=a即交换a和b的值。 等价于:b^=a; a^=b; b^=a; 最后a和b的最大公因数为b。 附部分代码: int a , b ; while(~scanf("%d%d",&a,&b)) { &nb
从今天开始专心阅读几本经典书籍,《编程珠玑》无疑是及其经典的一本。 读后感主要包括问题,解决方案,总结及完成部分习题。 Cracking the Oyster主要是一个排序的问题。 不超过10,000,000(N个)个不同7位数的排序问题。 初看就是一个磁盘外部排序的问题,通过归并排序或者调用系统函数即可。 通过和该程序员进行更为深入的交流对程序的需求有了细致的理解发现第一印象并不适合该
单链表的基本操作:建立,求长度,打印,删除,插入,排序,逆置。 没什么好说的=。= 上代码 #include <stdio.h> #include <ctype.h> #include <string.h> #include <iostream> &nb
经典问题: 2个栈模拟1个队列。 栈:先进后出。 队列:先进先出。 在push的时候,通过另一个栈将序列翻转一下即可将该栈从栈顶到栈底满足先进的在更上面的位置。 附代码如下: #include <stdio.h> #include <ctype.h> #include <iostream
这道是个典型的AC自动机。 在trie的基础上添加fail指针,指向类似于KMP的next处。 大意是求一段文字中出现过多少某字典的词。 主要用于多串匹配。 #include <stdio.h> #include <ctype.h> #include <string.h> #include
下午闲来无事,突然想起收藏夹里尘封多年的题目,都是些比较感兴趣的题目,随便看了道2829 binary strings。 链接:http://cstest.scu.edu.cn/soj/problem.action?id=2829 大意是: 给定一个初始字符串(不超过20位),和目标字符串,给定操作步骤,求初始字符串到目标字符串的最少操作次数。 操作步骤:对字符串某一段连续区间
先来无事,切道水题。 题目网址如下:http://cstest.scu.edu.cn/soj/problem.action?id=4150 最长递增子序列的变种。 代码如下: #include <stdio.h> #include <ctype.h> #include <string.h&g
先附上代码: package com.hbq.chain; import java.util.ArrayList; import java.util.Random; interface IWomen { pu
先附上观察者模式的一个测试代码。 有空再仔细写一下。 package com.hbq.test; import java.util.ArrayList; /*观察者模式*/ /*观察者接口*/ interface Observer {  
1.子序列最大和问题: 给你一串序列x1,x2,……,xn,求max(i,j){xi+……+xj}。 枚举i,j时间复杂度O(N*N)。 简单dp: 设d[i]表示以i结尾的最大序列和。 则ans=max(d[i])。 d[i] = max(d[i-1]+x[i],x[i]); O(N*N) -> O(N) . 2.最大
昨天考完计算机系统结构,一门没什么兴趣的课程,总共才看一天多点就考试了,书都没来的及买。。。。 下午百度之星初赛的结果出来了~勉强进了复赛吧。记得去年参加的时候什么都不会,连题意都看不太懂,果断只能放弃了。今年做了初赛的第二轮,题目挺水的,还以为3道都对了,没想到还是有点错误。复赛加油吧~争取能那个bae的邀请码。 &nbs
第一轮因为没有时间就没做了。据说较第二轮难一些。 第二轮题目确实比较水。 A题 高斯消元,具体思路还不完全会。待之后补充。 B题 二分答案+并查集。 C题 简单dp D题 暴力枚举即可。 简单分析及代码: B:题目大意是给N(N<=1000)个网页,分成k个聚类,要求类与类之间的网页的差异值至少都为t,求最大的t,每个类至少要有一个网页,差异值计算类似于几何距离。
已经大三下了,本学期忙了各种没要紧的事情,却没什么太大的收获。三四月份一直在忙着找暑假的实习,结果直到现在也没找到= =因为有事,华为的二面就放弃了,百度也悲剧在二面上了,总的来说是因为基础太差!一直懒得复习这些基础的东西。不过真心喜欢百度的面试风格,一上来就上题,感觉真好。之前的一年在acm上花的时间太多了,却因为错过了最佳的进校队的时机,一直被边缘化,在算法上也没有太大的斩获。。
昨天木有事做,于是去民大的图书馆借了本《设计模式之禅》来看,之前软考见过组合模式和装饰模式,觉得虚函数、多态、面向对象似乎很神奇,这些设计模式尤其产生了一些不可思议的效果。今天用c++实验了一下装饰模式。确实比较厉害! 装饰模式主要用来扩展一个类的功能,即装饰。类图如下: 测试代码照搬自《设计模式之禅》,关于装饰四年级成绩单,加年级排名和单项最高分。 代码如下
soj1678的字符界面版本。 通过计算空格从底向上推即可。 源码: #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> /***************************
昨天没事干,本来切了2道水题,可以oj又挂了就没交上。今天交WA了一次,因为一个参数写错了= =简单总结一下。 题目大意: 抽象出如下序列: 1, 1、1,2, 1、1、1,1、2,3.... 第i串序列要么其和比前面的长,要么字典序比前面的大。 序列和显然从1,2,3,……,n。 序列长度为i时,其个数有 f[i] = f[i-1
明天软考,但是今天还是手痒,在soj又切了道水题1663,看cauchy做了,故也来切掉。 题目意思是一串合法的表达式字符串,仅包括大写字母,+,-,(,),空格,tab字符,把多余的括号去掉。如:(A+(B+C)+(D-E)) ->A+B+C+D-E 或者((B))->B 思路: 1.堆栈操作字符串括号屁屁额 2. pos[top] = index ;//记录括
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号