12 2011 档案
摘要:题意:给定字符串,求哈夫曼编码长和它与等长编码的比值,比较基础思路:这题考查哈弗曼编码,但其实没必要建树得出编码,只需要统计哈弗曼编码后的总码长即可参考了网友的题解,用到了优先权队列维持一个从小到大的序列第38行其实就是把越小的频数反复多加几次,越大的频率少加几次,体现了前缀码的设计思想Source CodeProblem: 1521User: yangliuACMerMemory: 232KTime: 0MSLanguage: C++Result: Accepted//这题考查哈弗曼编码,但其实没必要建树得出编码,只需要统计哈弗曼编码后的总码长即可
#include <iostream
阅读全文
摘要:const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令**************常量必须被初始化*************************cons的作用(1)可以定义const常量例如:constintMax=100;intArray[Max];(2)便于进行类型检查例如:voidf(constinti){.........}编译器就会知道i是一个常量,不允许修改;(3)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;例如:voidf(constinti){i=10;//error!}(5)为函
阅读全文
摘要:背包问题 它是在1978年由Merkel和Hellman提出的。它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放 到背包中来加密消息。背包中的物品中重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物 品,在计算上是不可实现的。背包问题是熟知的不可计算问题,背包体制以其加密,解密速度快而其人注目。但是,大多数一次背包体制均被破译了,因此现在很少有人使用它。DD牛的背包九讲P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c,价值是w。求解将哪些物品装入背包可使这些物..
阅读全文
摘要:题意:车的类型用字符串来描述,两个汽车类型的距离定义为其字符串中不同字符的个数,给定所有的车的类型,求车之间的派生关系,使得总的距离最短,派生关系质量分最大算法:转化为图论问题,结点对应不同的汽车类型,边的权值就是不同结点字符串距离值,求最小生成树即可(因为题目说明了每个汽车只有一种汽车派生出)Source CodeProblem: 1789User: yangliuACMerMemory: 15688KTime: 422MSLanguage: C++Result: Accepted//00:31-0:53 20分钟写完
#include <iostream>
using name
阅读全文
摘要:这么多天第一次1AC,虽然题目不难,但是心里还是挺高兴算法思路:先根据纯色颜料中的最大者求出至少需要的颜料盒数,然后用剩余的颜料来配gray,配的时候要1ml 1ml的配gray颜料,通过不断重新从大到小排序,每次从前三种颜料去1ml配出1mlgray颜料,配之前判断下第3种颜料是否还有剩余,没有就加1个颜料盒,以此类推,到gray颜料配足够为止。要注意判断一定要紧跟排序之后,防止减完第三种颜料为0误判,因为此时第4种颜料可能还剩余1ml。测试用例3就是这种情况Source CodeProblem: 2709User: yangliuACMerMemory: 268KTime: 0MSLang
阅读全文
摘要:看到关于字符串的面试题总结,第一题我就曾经遇到过- -摘录于下, 来源:http://rjwyr.blog.163.com/blog/static/112986400201153061911864/字符串操作#include <iostream>#include <sstream>#include <limits>#include <vector>#include <string>using namespace std;/*\1.翻转句子中的单词题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔
阅读全文
摘要:这题很简单,但还是超时和WA一次主要是由于1、这题输入可能是非常大的数,可能上千位,所以把输入当成了2000位的字符串来处理,转化成数字2、还是变量初始化的问题,WA了一个,细心最重要#include <iostream>
#include <string>
using namespace std; int f (int n){ int sum = 0; while((n/10) > 0){ sum += n % 10; n /= 10; } sum += n; if(sum >= 10) return f(sum); else return sum;
}
阅读全文
摘要:很经典的BFS搜索 走迷宫选取经过门最少的路线,这题POJ测试数据设计不全面,changeDir数组赋值错误也可以过。。。主要图的数据结构存储方式和算法实现参考了http://blog.csdn.net/bobten2008/article/details/5093307(1)首先是建图, 由于输入给的都是线段, 但是我们平常处理这类问题都是转换为网格来做的, 因此需要将线段转换为网格.转化的方法是对于每个格子,用其左上角点的坐标来表示这个格子。如果其左上角点的坐标是[i][j],那么这个格子就表示为[i][j].将其四周边界的四条线段归这个格子管.即为每个格子建一个数组round[i][j]
阅读全文
摘要:本题很简单,变形虫的长度合成满足一定公式,只要每次从所有变形虫当中取出最长的两只合成新虫放进长度集合即可由于要不断取最大值,可以考虑用优先权队列或者堆Source CodeProblem: 1862User: yangliuACMerMemory: 272KTime: 47MSLanguage: C++Result: Accepted#include <iostream>
#include <queue>
#include <cmath>
using namespace std; int main(){ int n,i; double a,b,t; prio
阅读全文
摘要:以后一定要细心,不能再犯这个低级的错误,把WA控制在最低范围内参考了http://www.cnblogs.com/damacheng/archive/2010/09/24/1833983.html的题目分析题目大意:你要写一个OS,要实现磁盘碎片整理的功能。磁盘分为N个簇,一个文件可以占用K个簇,(1 <= K < N <= 10000),给出各个文件的占用磁盘的情况,也就是一个文件占用了哪些簇,想要进行碎片整理,就是把这些簇按顺序整理到磁盘的最顶部,例如给出示例: 文件1:2 3 11 12,占用了4个簇,编号为1-4。 文件2:7,占用了1个簇,编号为5。 文件3:18
阅读全文
摘要:这题和编程之美上面的“地板覆盖”问题有点像,不同的是,编程之美上面只需要判定能否覆盖,这题需要求出总方案数目结题报告转自http://duanple.blog.163.com/blog/static/709717672008930104124684/题意:给你一个h*w的矩形,用一个1*2的小矩形去填充,问有多少种填充方法,不考虑对称性。关键点提示:1.DFS部分实际上是在枚举第i行的放置方法,由此便可以确定出该行及上一行的状态。对于第i行,状态(参数next_stat)的定义是指,前i-1行完全放满,第i行的所有位置是否放置(0,1表示)组成的二进制序列,转化为十进制数后所代表的状态。放置方
阅读全文
摘要:本题很简单,但是还是WA了几次,主要原因是1、变量初始化的位置要非常小心,何时需要在下一次循环重复记录何时初始化,由于这个原因WA太可惜了2、输出保留三位小数的格式控制一定要注意主要算法思想如下先求各个设备最小带宽中的最小值和最大带宽中的最小值然后遍历最小带宽到最大带宽的区间,求最大比例,贪心搜索最优方案加速方案设置标志数组flag,只有输入中间出现过的并且位于上下界区间中带宽值才会考虑,节省搜索时间,空间换时间另外总结下查看数据类型表示范围的方法,以int为例1, 要看int 占用多少字节: sizeof(int)2, 要看int 占用多少bits: sizeof(int) * 83, 要看
阅读全文
摘要:本题为多重背包问题,即每种零钱的个数是有限个,求不超过目标钱数的可以组合出的最大钱数采用DP的思想,先对目标钱数以内的所有面额做逆向遍历,初始dp[0] = true,即0元可凑出在此基础上如果当前的stat可以凑出,那么继续组合出更大的钱数,记下当前有限个零钱和前面的零钱一起可以凑出的不超过目标钱数的所有合法的值。最后从money逆向打印记下的最大的值即可Source CodeProblem: 1276User: yangliuACMerMemory: 640KTime: 516MSLanguage: C++Result: Accepted#include <iostream>u
阅读全文
摘要:由于CSDN密码泄露事件大家纷纷关注起自己的互联网账号安全,隐患早已有之,只是这次暴露大了。下面分析下明文存放密码动机分析。转自 http://shell909090.com/blog/2011/12/%e5%af%86%e7%a0%81%e4%b8%ba%e4%bb%80%e4%b9%88%e6%98%8e%e6%96%87%e5%ad%98%e6%94%be/很早就写过一篇blog,说到过,你的密码应当一次一密,至少某些密码泄露时不至于波及太广。结果这次CSDN不幸中枪。我不去讨论多少人急急忙忙修改密码,多少人数据泄露,单说说为什么很多时候密码是明文存放的。 就我有记忆以来,我写应用就从来
阅读全文
摘要:转自 http://shell909090.com/blog/2011/09/%E5%AF%86%E7%A0%81%E7%AE%A1%E7%90%86%E8%A7%84%E8%8C%83/下面是贝壳自己总结的密码管理规范,大家可以参考一下。 概念解说网络密码和本地密码。网络密码通常很难暴力攻击,尝试速度受到网络限制,而且尝试一定次数后还可能被管理员发现。而本地密码则相对比较容易攻击,我假定本地密码攻击可以达到每秒测试2^30个密码。密码长度推定使用如下计算方式。使用年数乘以攻击频率,得出攻击者在密钥使用期限内能尝试的最大次数。为了安全起见,尝试范围不应当超过总体密码空间的一定比例。以此推算出密
阅读全文
摘要:本人开园第一天,打算主要发表算法、编程及技术面试题等相关内容,还望各大牛多多指教!DFS深度搜索算法实现深度探究解析-以POJ 1040为例#include <iostream>#include <cstdlib>#include <algorithm>using namespace std;#define maxm 23#define maxn 8int cap, n, m;int ans;int ocount;int down[maxn];struct Order{ int s, e, p;}order[maxm];int max(int a,int b
阅读全文
摘要:2012世界末日到来,太阳系九大行星轨道出现混乱,人类无奈乘坐飞碟逃难,身为飞碟船长的你,能够保护人类几秒呢?下面是在学校里面开发的Planet2012小游戏,以前从没写过游戏,熬了两个晚上才整处女作来,别废话了,上图!游戏初始化界面 三条生命耗尽后弹出坚持的时间游戏下载见个人博客游戏下载地址把两个文件放在同一个文件夹下面就可以玩了,祝大家玩得Happy:)(说明:单击游戏屏幕开始游戏,用方向键控制飞碟,尽量避开星球的碰撞,每次游戏有三条命,碰撞行星达到3次游戏结束,显示玩家坚持的时间,躲开星球的时间越长越好。)
阅读全文
摘要:还是最小生成树prim算法,套用的浙大模板#include <iostream>#define MAXN 28#define inf 10000typedef int elem_t;using namespace std;elem_t prim(int n,elem_t mat[MAXN][MAXN],int* pre){ elem_t min[MAXN],ret=0; int v[MAXN],i,j,k; for (i=0;i<n;i++) min[i]=inf,v[i]=0,pre[i]=-1; for (min[j=0]=0;j<n;j++){ ...
阅读全文
摘要:典型的prim算法这类题目可以稍作变形,比如POJ2421#include <iostream>#include <map>#define MAXN 102typedef long elem_t;using namespace std;elem_t prim(int n,elem_t mat[MAXN][MAXN]){ elem_t closeEdge[MAXN],sum=0,min; int i,j,k; for(i = 0; i < n; i++) closeEdge[i] = mat[0][i];//初始化辅助数组 for(i = 1; i < n;.
阅读全文
摘要:这题比较简单,就是对电话号码的字符串处理并排序输出,但是实现时有几个注意的地方1、用map存储比较方便,可以自动根据string的排序规则排序,而且题目数据恰好是<string,int>的K-V存储特点。2、用另一个字符串重新拼接待输出地字符串比直接对输入字符串进行替换移位等操作要方便。3、注意字符和数字的ASCII的转化。4、‘-’的加入可以在输出的时候,输到第4个字符的时候先输出‘-’。5、map,set,vector,deque,list等容器要熟练使用,可以参考http://www.cplusplus.com/和MSDN的文档。#include <iostream&g
阅读全文
摘要:这是我面试一个公司的时候碰到的面试题Q请用两个栈模拟实现队列,至少完成入队、出队及计算长度的方法A 基本思路是两次后进先出 = 先进先出,元素入队列总是入左栈,元素出队列如果右栈不为空直接弹出右栈头元素;如果右栈为空就把左栈元素出栈全部压入右栈,再弹出右栈头,这样就模拟出了一个队列。Class Q{ stack<int> S1,S2; void push(int a){ S1.push(a);} int pop(){ if(S2.empty()){ while(S1.size()>0){ S2.push(S1.pop()); } } return S2.pop();...
阅读全文
摘要:基本思路就是求逆序数然后根据逆序数排序,出现的问题有:1、这题出现的问题主要是对m和n总是搞混,而且提交出现了Runtime Error,这个错误一般都是由于一般都是非法访问内存(数组越界、访问空指针、堆栈溢出)、做除法时除以了0 等造成的,后来仔细看了一下“a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (0 < m <= 100) giving the number of strings. ”就立刻发现了错误,结构体数组开小了。
阅读全文
浙公网安备 33010602011771号