算法
SherryWang0622
这个作者很懒,什么都没留下…
展开
-
滴滴出行2017秋招笔试编程题(二)——地下迷宫、数字和为sum的方法数
这个题可以用dfs或bfs遍历迷宫,用dfs是递归地查看每一个位置,这里在每次走到一个前都要先查看青蛙的体力值够不够,不够的话,这条路就pass掉了,够的话继续往下遍历。递归结束的条件就是已经到达了出口,即[0][m-1]这个位置,当到达此位置时还要查看是否所消耗的体力是最少的。另一个问题是要记录最小路径,这里每到达一个位置就把它加入到一个数组中,位置不合适的话就把数组的下标-1,相当于把这个位置原创 2017-01-07 16:27:46 · 1878 阅读 · 0 评论 -
杭电ACM题分类
第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最近点对问题,用分治 1008 简单题 1009 贪心 1010 搜索题,剪枝很关键 1011 1012 简单题 1013 简单题转载 2013-03-11 10:41:47 · 769 阅读 · 0 评论 -
黑洞数(软件大赛)
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。请编写程序,找到5位数所有可能的循原创 2013-04-22 16:02:56 · 902 阅读 · 0 评论 -
猜算式(软件大赛)
看下面的算式:□□ x □□ = □□ x □□□它表示:两个两位数相乘等于一个两位数乘以一个三位数。如果没有限定条件,这样的例子很多。但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。该算式中1至9的每个数字出现且只出现一次!比如:46 x 79 = 23 x 15854 x 69 = 27 x 13854 x 93 = 27 x 186.....请编程,输出所有可能的情况!注意:左边原创 2013-04-22 16:06:16 · 1240 阅读 · 0 评论 -
砝码称重(软件大赛)
5个砝码用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码组合方案。例如:用户输入:5程序输出:9-3-1用户输入:19程序输出:27-9+1要求程序输出的原创 2013-04-22 16:08:44 · 726 阅读 · 0 评论 -
21位花朵数(软件大赛)
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。例如:当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。当N=5时,92727满足条原创 2013-04-22 16:11:27 · 830 阅读 · 0 评论 -
购物券(软件大赛)
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。程序输入:第一行是一个整数m,代表可购买的商品的种类数。接下来是m个整数,每个1行,分别代表这m种商品的单价(0程序输出: 第一行是一个整数,表示共有多少种方案 第二行开始,每种方案占1行,表示对每种商品原创 2013-04-22 16:15:50 · 1431 阅读 · 0 评论 -
priority_queue的用法
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解?#include #in转载 2013-05-15 19:25:57 · 573 阅读 · 0 评论 -
C++STL库函数之string用法总结
1.String::append与string::assignstring& append ( const string& str );string& append ( const string& str, size_t pos, size_t n );string& append ( const char* s, size_t n );string& append ( const ch转载 2013-05-25 17:21:42 · 4469 阅读 · 0 评论 -
USACO1.4.1Packing Rectangles解题报告
原题链接:http://cerberus.delos.com:791/usacoprob2?a=eKxwxMvd2mt&S=packrec解题思路:求出每种摆放方式可能的面积,然后求这些面积的最小值。 1、分析图,求每一种摆放方式的面积。 显然,题目中给出的六个图是矩形的所有摆放方式(其中第四种和第五种是同一种摆放方原创 2013-07-24 10:11:03 · 972 阅读 · 0 评论 -
USACO 1.4.4 Mother's Milk
原题链接:分析与思路:不难看出共有六种到牛奶的方式,a->b,a->c,b->a,b->c,c->a,c->b。但是每次倒完后的状态不一定一样的,不一样的状态在进行六种不同方式的倾倒, 又可以产生不一样的状态。这就需要来记录每个状态是否出现过,当出现过时就直接返回到函数出口,进行上一层的下一次变换,若没有出现过此状态就继原创 2013-07-26 13:53:08 · 2220 阅读 · 2 评论 -
USACO 2.1.3 Sorting a Three-Valued Sequence解题报告
原题链接:一看这道题就想到了离散上学的置换群,按置换群做了做,果然AC了!先讲一下思考过程: index: 1 2 3 4 5 6 7 8 9 分组之后 index: 1 3 2 9 5 4原创 2013-07-29 16:24:16 · 987 阅读 · 0 评论 -
2012蓝桥杯软件大赛决赛(火柴游戏)
第五题 这是一个纵横火柴棒游戏。如图[1.jpg],在3x4的格子中,游戏的双方轮流放置火柴棒。其规则是: 1. 不能放置在已经放置火柴棒的地方(即只能在空格中放置)。 2. 火柴棒的方向只能是竖直或水平放置。 3. 火柴棒不能与其它格子中的火柴“连通”。所谓连通是指两根火柴棒可以连成一条直线,且中间没有其它不同方向的火柴“阻拦”。 例如原创 2013-02-01 15:58:15 · 1998 阅读 · 0 评论 -
2012蓝桥杯软件大赛决赛(源码变换)
第三题【编程题】(满分22分) 超文本标记语言(即HTML),是用于描述网页文档的一种标记语言。 HTML通过文本来描述文档显示出来应该具有的“样子”。它主要通过标签来定义对象的显示属性或行为。 如果把java的源文件直接拷贝到HTML文档中,用浏览器直接打开,会发现本来整齐有序的源文件变成了一团遭。这是因为,文本中的许多回车和空格都被忽略了。而有原创 2013-02-01 15:51:54 · 2260 阅读 · 3 评论 -
0-1背包问题和完全背包问题
二者区别:0-1背包问题是说每件物品不可重复使用,而完全背包则是说每件物品可以重复使用。先看一下0/1背包的简化版: 现有N个物品,每个物品重量为W,这些物品能否使在载重量为S的背包装满(即重量和正好为S)?如过不能那能使物品重量和最重达到多少?当要装第i个物品 时,如果前i-1个物品可以使载重为 k的背包装满,那么载重为k+w[i]的背包就可以装满。但要注意:针对每一个物品枚举原创 2013-08-05 21:22:51 · 6376 阅读 · 1 评论 -
滴滴出行2017秋招笔试编程题(一)——连续最大和、末尾0的个数、进制转换
这题比较简单,算法过程就是遍历数组,记录到第i个数的连续最大和,在计算第i个数的连续最大和时,先判断到第i-1个数的连续最大和是正还是负,如果是负数,则到第i个数的连续最大和就是第i个数本身;如果是正数,则到第i个数的连续最大和就是到第(i-1)个数的连续最大和加上第i个数。代码如下:public class MaxSubArray { public static int FindGreat原创 2017-01-07 16:08:33 · 1492 阅读 · 4 评论 -
KMP算法
一、算法的功能:主字符串:ababcababababcab模式串:abababab判断在主串中是否存在模式串,如果存在,在哪个位置。二、算法的思想: 设模式串为“P0...Pm-1",KMP匹配算法的思想是:当模式串中的字符Pj与主串中相应的字符Si不相等时,因其前j个字符(“P0...Pj-1”)已经获得了匹配,所以若模式串中的“P0...Pk-原创 2016-10-29 11:19:17 · 396 阅读 · 0 评论 -
工信部软件大赛决赛题----统计连通图的个数和面积
题目要求:BMP是常见的图像存储格式。如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。与之相关的数据:(以下偏移均是从文件头开始)偏移:10字节, 长度4字节: 图像数据真正开始的位置。偏移:18字节, 长度4字节: 位图的宽度,单位是像素。偏移:22字节, 长度4字节: 位图的高度,单位是像素。从图像数据开始处,每个像素用1个二进制位表示。原创 2012-11-24 11:31:11 · 1180 阅读 · 0 评论 -
数据结构顺序栈和链栈基本操作----c++实现
顺序栈:#includeusing namespace std;#define MaxSize 50class SeqStack{private: int data[MaxSize]; int top;public: void initStack(); //初始化栈 void Push(int elem);//入栈 int Pop();//出栈 b原创 2012-11-25 16:48:52 · 6302 阅读 · 0 评论 -
数据结构栈的应用
应用一:十进制转为其他进制的非递归实现 #include#include "d://SeqStack.cpp"using namespace std;void f(int num,int radix){ int m; SeqStack st原创 2012-11-25 16:59:16 · 871 阅读 · 0 评论 -
软件大赛练习题
昨天老师布置的题,原来没有我们想的那么简单啊!题目如下: 从2到99中选出两个不同的整数,庞涓拿到两个整数的和,孙膑拿到两个整数的积。 庞涓说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。 孙膑说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。 庞涓说:既然你这么说,我现在也知道这两个数字是什么了。 要求输出所有可能的结果,包括这两个整转载 2012-12-21 19:31:52 · 624 阅读 · 0 评论 -
第三界蓝桥杯软件大赛预赛(答案一)
这是我做的答案,有不准确的地方一定留言哦!第一题 黄金分割数0.618与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子.... 黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对5开方减去1再除以2来获得,我们取它的一个原创 2013-02-01 15:38:42 · 2787 阅读 · 4 评论 -
第三界蓝桥杯软件大赛预赛(答案二)
中间三个填空题比较简单,就省略了!第八题:在编写图形界面软件的时候,经常会遇到处理两个矩形的关系。 如图【1.jpg】所示,矩形的交集指的是:两个矩形重叠区的矩形,当然也可能不存在(参看【2.jpg】)。两个矩形的并集指的是:能包含这两个矩形的最小矩形,它一定是存在的。 本题目的要求就是:由用户输入两个矩形的坐标,程序输出它们的交集和并集矩形。 矩原创 2013-02-01 15:42:36 · 1065 阅读 · 2 评论 -
软件大赛--趣味算式
第九题匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练! 某批警察叔叔正在进行智力训练: 1 2 3 4 5 6 7 8 9 = 110; 请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入原创 2013-02-01 15:45:38 · 2013 阅读 · 1 评论 -
软件大赛--波松分酒
第十题 泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。 有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。 有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另原创 2013-02-01 15:48:18 · 1241 阅读 · 0 评论 -
USACO 2.1.4 Healthy Holsteins解题报告
原题链接:思路:仔细看题会发现G(饲料种数在1~15之间),每种饲料有两种情况,取或者不取,则总共有2^15=32768种可能,并不多可以采取枚举这32768种可能的做法解题。 注意找到一种选择之后,不必判断每一种维他命是否得到满足,比如这种选择不能使第一种维他命得到满足,则舍弃这种选择,后面的几种维他命就不必再进行 判断了,这是一种高效的做原创 2013-07-29 16:48:26 · 1406 阅读 · 0 评论 -
USACO 2.1.1The Castle
The CastleIOI'94 - Day 1In a stroke of luck almost beyond imagination, Farmer John wassent a ticket to the Irish Sweepstakes (really a lottery) for hisbirthday. This ticket turned out to have only原创 2013-07-31 12:55:50 · 1742 阅读 · 0 评论 -
USACO 2.1.5 Hamming Codes
Hamming CodesRob KolstadGiven N, B, and D: Find a set of N codewords (1 <= N <= 64),each of length B bits (1 <= B <= 8), such that each of the codewordsis at least Hamming distance of D (1 <= D <=原创 2013-07-31 13:20:05 · 1005 阅读 · 0 评论 -
USACO 2.4.5 Fractions to Decimals
思路:模拟两数相除的过程,将商的每一位都保存在一个string中,只要出现的余数相同,就证明已经出现循环了,就可以终止计算了。然后处理存储商数的字符串,找出循环节。输出就可以了!源代码:/*ID: supersnow0622PROG: fracdecLANG: C++*/#include #include #include #includeusing namespace原创 2013-08-05 11:59:08 · 1308 阅读 · 0 评论 -
USACO 3.1.2 Score Inflation
分析:这个题是赤裸裸的完全背包问题。竞赛的时间可以看做背包的总容积,每道题的时间可看作每个物体的体积,每道题得的分数则是每件物品的价值。当然在进行背包问题之前,要先计算单位体积的物品的价值,并以此来进行排序。在本题中,就是时间越少分越到越好,也就是单位时间得到的分数最多好。源代码:/*ID: supersnow0622PROG: testLANG: C++*/#include原创 2013-08-05 18:00:28 · 1493 阅读 · 0 评论 -
USACO 3.1.1 Agri-Net 最短网络(最小生成树Prime算法)
所谓最小生成树就是给定一个无向图G = (V, E) 中,G是无向图中所有顶点和边的集合,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集且为无循环图,使得 w(T) 最小,则此 T 为 G 的最小生成树。而Prime算法就是在无向图中来寻找这样一颗最小生成树。思想:1 先选取第一个顶点,然后找出第一个顶点到其他顶点的原创 2013-08-22 12:28:04 · 3108 阅读 · 0 评论 -
USACO 3.1.3 Humble Numbers 丑数
分析:根据题目的意思,这个集合中每加入一个新的数字,都必须与前面的每个数字相乘再加入到该集合中,如此循环往复。但是所有的数字的因子一定包含给定的集合中的素数,也就是说所有数字是由给定集合的素数与集合中的其他数字相乘而得。由于题目要求按顺序来,所以再加入数字之前要先比较大小。代码:/*ID: supersnow0622PROG: humbleLANG: C++*/#include原创 2013-08-22 12:42:57 · 1124 阅读 · 0 评论 -
USACO 3.1.5 Contact
分析:1、如何区分0,00,000,0000...等等 2、当出现的次数相同时,字符串的输出顺序(先输出短的在输出长的,一样长时先输出小的,在输出大的)。解决这两个问题最直接的办法就是在字符串前面加一个1,这样就可以根据大小来区分0,00,000,0000等;而短的字符串在前面加1自然没有长的字符串在前面加1数字大,所以也区分开了。源代码:/*ID: supersnow0622P原创 2013-08-22 13:37:41 · 1650 阅读 · 0 评论 -
USACO 3.1.6 Stamps
分析:这个题既不是0/1背包,也不是完全背包,因为硬币不是只能取一次,也不是可以取无数次,而是题目规定了他的次数。但是这个题还是可以用背包的思想来做,只是数组中记录的并不是硬币的钱数总和,而是凑足这些钱最少需要的硬币数目。比如dp【4】=4代表的就是凑足4分钱至少需要4枚硬币。而在判断1分钱的硬币能不能为凑够4分钱做贡献时,还需知道凑够3分钱至少需要多少枚硬币,然后再次基础上+1枚硬币就可以了。这原创 2013-08-22 13:55:01 · 806 阅读 · 0 评论 -
USACO 3.2.1 Factorials
分析:这个题目最主要的问题就是阶乘之后的数字太大,没有哪个类型能放下,但是题目只要求输出最后的非零数字,这样就不必保留全部位的数字了,只需保留第一位非零数字及其前面的3位就可以了。代码:/*ID: supersnow0622PROG: testLANG: C++*/#include #include #include using namespace std;long原创 2013-08-22 14:01:39 · 1036 阅读 · 0 评论 -
回看ACM之路(暑假集训总结)
1、整个集训队的情况 说实话,觉得这个暑假没有去年暑假过的充实,也曾到达过做好的状态(一天A掉5道题),可是想想大多时间却不是这样的。暑假ACM集训正式开始是在7月15日,可是对于我来说却迟到了整整5天,20日下午从家来学校,还好开始劲头够足,大概两天半的时间就把第一次测试的题目解决了。看得出来,我回来之后大家的速度也上来了,心里窃喜(我还是有点作用的)!可是慢慢地随着题目难原创 2013-08-25 17:18:23 · 3268 阅读 · 2 评论 -
USACO 3.3.1Riding the Fences(弗罗莱算法寻找欧拉通路)
源代码:/*ID: supersnow0622PROG: testLANG: C++*/#include #include #include#include using namespace std;int map[501][501],times[501],sqStack[1026],top=0,Min=555,Max=0;void dfs(int start){ f原创 2013-08-28 17:23:43 · 1462 阅读 · 0 评论 -
背包九讲
P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i转载 2013-08-31 10:20:46 · 734 阅读 · 0 评论 -
USACO 2.4.4 Bessie Come Home
思路:这个题直接用Floyed算法计算任意两点的距离,然后输出到'Z'距离最远并且有牛存在的牧区到Z的距离。还有一点就是如何把题目中的数据用邻接矩阵存储下来,可以把字母的ASCII-‘A’作为邻接矩阵的下标。补充Floyed算法Floyd-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。注意单独一条边的路径也不一定原创 2013-08-05 11:35:02 · 978 阅读 · 0 评论 -
USACO 2.4.3 Cow Tours
分析:首先要连在一起修路的这两个牧区,之前是不连通的。其次就是这两个牧区修路之后,相隔最远的两个牧区的距离最小。其实,只要枚举任意不连通的两个牧区在计算这种情况下的最远的距离就好了,然后在这些最远的距离中找到距离最小(题目要求半径最小)的一个就是所求了。关键是在两个不连通的牧区修路之后求牧场的半径呢?假设已将one牧区种的D和two牧区中的F相连,想一下,这个牧场的半径是不是等于与D相距最远的点到原创 2013-08-05 11:20:47 · 1478 阅读 · 0 评论