ACM算法
千寻~
这个作者很懒,什么都没留下…
展开
-
牛牛打响指--大数做除法
链接:https://www.nowcoder.com/questionTerminal/442cbe24e08447729543510c2eb47082来源:牛客网牛牛在地上捡到了一个手套,他带上手套发现眼前出现了很多个小人,当他打一下响指,这些小人的数量就会发生以下变化:如果小人原本的数量是偶数那么数量就会变成一半,如果小人原本的数量是奇数那么数量就会加一。现在牛牛想考考你,他要打多少次响...原创 2018-06-15 15:32:58 · 857 阅读 · 0 评论 -
hdoj2111 Saving HDU --贪心
分析:题不难,直接贴代码吧!#include <iostream>#include <algorithm>#include <map>#include <string> #没有这行会报错using namespace std;struct treasure { int pi; //单价 int pm; //体积...转载 2018-03-28 16:57:50 · 265 阅读 · 0 评论 -
hdoj2043 密码 字符串题--水题
分析:注意题目中应该满足的两个条件,第一个条件容易丢失。(1).密码长度大于等于8,且不要超过16。(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。#include <iostream>#include <algorithm>#include <map>#include <string> #没有这行会报错using...原创 2018-03-28 15:44:29 · 401 阅读 · 0 评论 -
hdoj2565 放大的X 字符串题
分析:在遇到这样的题时,应该细心,应该分成三部分去考虑。找出各行规律。在看其他人代码时,有直接在一个int a[][] 数组中赋值为" ",然后直接规律位置赋值X。这也是个不错的方法。#include <iostream>#include <algorithm>#include <map>#include <string> #没有这...原创 2018-03-28 15:03:19 · 386 阅读 · 0 评论 -
hdoj2017 字符串统计 字符串统计--大水题
#include <iostream>#include <algorithm>#include <map>#include <string> #没有这行会报错using namespace std;int main() { int n; string a; int count; int len;...原创 2018-03-28 12:52:39 · 373 阅读 · 0 评论 -
hdoj 1256 画8 字符串格式化输出
分析:1、首先题目中说 “竖线随着总高度每增长6而增加1个字符宽”,即竖着的笔画的宽度随着给出的高度每增加 6 而增加一,也就是 shunxian =(height/6)+1;2、下圈高度不小于上圈的高度,并且应尽量接近上圈的高度,也就是 shangquan =(height-3)/2 , 减 3 是因为最后一行,第一行以及中间一行横着写的行先去掉,如果(height-3)%2 为 0,则说明...原创 2018-03-28 12:40:30 · 301 阅读 · 0 评论 -
牛客网-牛牛找工作
链接:https://www.nowcoder.com/questionTerminal/46e837a4ea9144f5ad2021658cb54c4d时间限制:2秒空间限制:65536K为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自...原创 2018-04-09 22:59:52 · 981 阅读 · 1 评论 -
hodj 1008 Elevator (模拟题)
个人写的代码不够简洁,而且在处理这种多循环的代码时,每次循环时变量没有重新赋值为0,造成了调试了好几次代码才通过,这是不应该的。在这次代码中,time和current都没有重新赋值为0,下回应该注意。还要网友在代码中对题目的中时间常量进行了赋值,这一点很好,要学习。代码如下:#include <iostream>#include <algorithm>#inc...原创 2018-03-21 10:19:37 · 166 阅读 · 0 评论 -
poj1163 The Triangle--动态规划入门(动态规划和贪心的去区别)
代码如下:#include<iostream>#include<algorithm>using namespace std;int D[101][101];int n;int maxSum[101][101];int main(){ int i,j; cin >> n; for(i=0;i<n;i++) ...原创 2018-03-14 00:40:08 · 453 阅读 · 0 评论 -
hdoj 1216 Assistance Required --链表模拟
原理,先删除2的倍数的所有数,然后删除3的倍数的所有的数,这里有个问题(在删除3倍数的数时,指的是删除和3间隔为3的数),然后删除和5间隔为5的数......例如:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19删除2的倍数 3 5 7 9 11 13 15 17 19删除3的间隔 5 7 11 13 17 19为什么有这个规律...转载 2018-03-28 22:02:02 · 270 阅读 · 0 评论 -
归并排序的实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plain copy//将有序数组a[]和b[]合并...转载 2018-04-17 16:00:15 · 294 阅读 · 1 评论 -
二叉树的性质
二叉树:树中每个节点至多有两个子节点二叉搜索树:对于树中任何节点,如果其左子节点不为空,那么该节点的value值永远 >= 其左子节点;如果其右子节点不为空,那么该节点的value值永远 <= 其右子节点(左子节点<value<右子节点)满二叉树:树中除了叶子节点,每个节点都有两个子节点完全二叉树:在满足满二叉树的性质后,最后一层的叶子节点均需在最左边完美二叉树:满足完全二...原创 2018-06-13 21:28:59 · 1737 阅读 · 1 评论 -
二叉搜索树的定义、查找、插入和删除
二叉搜索树的定义二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3. 任意节点的左、右子树也分别为二叉查找树。4. 没有键值相等的节点。二叉搜索树的删除:具体实现过程解析:二叉搜索树的结构实现:[cpp] view pla...转载 2018-04-13 21:13:17 · 2698 阅读 · 0 评论 -
hdoj1312 Red and Black--深度优先搜索
分析:深度优先搜索#include<stdio.h>#include<string.h>#include<limits.h>int map[22][22]; //存储int w,h,max=INT_MIN;int dx[]={0,1,0,-1},dy[]={-1,0,1,0};//定义方向,(-1,0)左移动,(1,0)右移动,(0,-1)上移动,(...转载 2018-04-06 23:21:35 · 226 阅读 · 0 评论 -
hdoj-2544 最短路【最短路径--dijkstra&&spfa&&floyd】
分析:纯最短路径问题。#include<cstdio>#include<cstring>#define max 1010#define INF 0x3f3f3f //表示无穷大int map[max][max],n;//map中存储长度,即是花费的时间void dijkstra(int start,int end){ int dis[max], v...转载 2018-04-06 18:00:27 · 235 阅读 · 0 评论 -
HDOJ 3790 最短路径问题(dijkstra算法)
分析:参考博客 https://blog.csdn.net/u011630575/article/details/79833900#include<cstdio>#include<cstring>#define max 1010#define INF 0x3f3f3f //表示无穷大int map[max][max],map_cost[max][max],n;/...转载 2018-04-06 17:45:11 · 249 阅读 · 0 评论 -
最短路径问题---Dijkstra算法详解
1、最短路径问题介绍问题解释: 从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径解决问题的算法:迪杰斯特拉算法(Dijkstra算法)弗洛伊德算法(Floyd算法)SPFA算法这篇博客,我们就对Dijkstra算法来做一个详细的介绍2、Dijkstra算法介绍思路一、其思想为,我们首先纪录下每个点到原点的距离,这个距离会在每一轮遍历的过程中刷新。每一个结点到原点...转载 2018-04-06 15:29:13 · 3500 阅读 · 0 评论 -
数据结构--最小生成树详解与实现
1、什么是最小生成树 现在假设有一个很实际的问题:我们要在n个城市中建立一个通信网络,则连通这n个城市需要布置n-1一条通信线路,这个时候我们需要考虑如何在成本最低的情况下建立这个通信网? 于是我们就可以引入连通图来解决我们遇到的问题,n个城市就是图上的n个顶点,然后,边表示两个城市的通信线路,每条边上的权重就是我们搭建这条线路所需要的成本,所以现在我们有n个顶点的连通网可以建立不...转载 2018-04-06 15:09:06 · 2041 阅读 · 0 评论 -
KMP算法解读
说明KMP算法看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂。 KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 如下面两个字符串:char *str = "bacbababadababacambabacaddababacasdsd";char *ptr = ...转载 2018-04-05 22:09:56 · 246 阅读 · 0 评论 -
四则运算表达式分解,前中后缀表达式(栈的应用)
前/中/后缀表达式的转换(首先需要明白三者之间的转换) 自然表达式转换为前/中/后缀表达式,其实是很简单的。首先将自然表达式按照优先级顺序,构造出与表达式相对应的二叉树,然后对二叉树进行前/中/后缀遍历,即得到前/中/后缀表达式。 举例说明将自然表达式转换成二叉树: a×(b+c)-d ① 根据表达式的优先级顺序,首先计算(b+c),形成二叉树 ②然后是...转载 2018-04-05 20:18:01 · 1340 阅读 · 0 评论 -
hdoj 1002 A + B Problem II 大整数相加
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ int n; scanf("%d",&n); char a[1001]; char b[1001]; int jishu=1; while(n--){ scanf("%s %s",&a , ...原创 2018-03-13 22:19:55 · 272 阅读 · 0 评论 -
01背包,完全背包,多重背包的个人总结
https://blog.csdn.net/tinyguyyy/article/details/51203935没看懂,01背包的空间优化也没懂,完全背包,和多重背包。太渣!!!!转载 2018-03-23 15:47:16 · 230 阅读 · 0 评论 -
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
前言 自己的研究兴趣从最初的编程、面试、数据结构、算法,转移到最近的数据挖掘、机器学习之上,而自己在本blog上也着实花费了巨大的时间和精力,写的东西可能也够几本书的内容了。然不管怎样,希望我能真真正正的为读者提供实实在在的价值与帮助。 下面,敬请观赏。有任何问题,欢迎随时不吝指正(同时,若你也能帮助回复blog内留言的任何朋友的问题,欢迎你随时不吝分享&回复,我们一起讨论,互转载 2017-03-01 23:40:11 · 598 阅读 · 0 评论 -
NP理论(P、NP、NPC和NP-hard)
P问题:可以在以多项式表达的时间内求出确切解的问题,也就是说它的计算复杂度是一个多项式。我们通常用的O(n),O(logn),O(n^2)等等类似的都是这类问题。NP问题:英文是non-deterministic polynomial,是多项式时间可以验证的问题。最初是在非确定图灵机上,如果一个问题存在一个解,那么就先猜它,一定可以在多项式时间内猜到这个解。(关键是就是不判定这转载 2017-02-13 17:03:10 · 7054 阅读 · 1 评论 -
分治算法
一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关...转载 2017-02-16 20:36:52 · 372 阅读 · 0 评论 -
八大排序算法
原文:http://blog.csdn.net/hguisu/article/details/7776068概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序...转载 2017-02-13 17:20:19 · 388 阅读 · 0 评论 -
拉斯维加斯算法和N皇后问题
拉斯维加斯算法的一个显著特征是它所作的随机性决策有可能导致算法找不到所需的解。因此通常用一个bool型函数表示拉斯维加斯算法。void Obstinate(InputType x, OutputType &y){ // 反复调用拉斯维加斯算法LV(x, y),直到找到问题的一个解 bool success= false; while (!success)原创 2016-12-21 22:47:06 · 8014 阅读 · 3 评论 -
B树、B-树、B+树、B*树 ---浅层次讲解
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关转载 2017-03-01 23:45:56 · 781 阅读 · 0 评论 -
从B 树、B+ 树、B* 树谈到R 树 ---从磁盘读取考虑
第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自转载 2017-03-02 00:29:05 · 4860 阅读 · 2 评论 -
B-树和B+树的应用:数据搜索和数据库索引
B-树 1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,转载 2017-03-03 09:51:07 · 593 阅读 · 0 评论 -
算法学习汇总
一、十大排序算法总结: https://www.cnblogs.com/onepixel/articles/7674659.html二、数据结构-栈和队列: http://blog.csdn.net/u011630575/article/details/55271510三、动态规划: (1)通过POJ1163 The Triangle讲解动态规划(建议先看第一篇,然后看第二篇) h...原创 2018-03-06 17:07:31 · 488 阅读 · 0 评论 -
01背包问题----(动态规划算法)
0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?分析一波:面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。解决办法:声明一个 大小为 m[n][c](表示当前总价值) 的二维数组,m[ i ][ j ] 表示 在面对第 i ...转载 2018-03-23 10:54:01 · 1185 阅读 · 0 评论 -
hdoj 1052 Tian Ji -- The Horse Racing 贪心算法
这道题就是解决选择策略问题。思路一:先将田忌跟齐王的马的速度数组进行一次冒泡排序1、如果田忌最慢的马比齐王最慢的马快,则比慢马2、如果田忌最慢的马比齐王最慢的马慢,则用田最慢的马跟齐最快的马比 //消耗齐的快马这是贪心的第一步3、如果田忌最慢的马的速度与齐威王最慢的马速度相等 3.1、如果田忌最快马的比齐威王最快的快,则比快马 ...原创 2018-03-22 20:07:47 · 350 阅读 · 0 评论 -
hdoj 1005 Number Sequence
刚开始这题看起来比较容易,因为直接用递归的话很容易搞定。但是提交的时候总是不AC,仔细一看有很多格式限制,比如内存,运行时间,堆栈大小等的限制。所以递归是行不通的。 AC不通过的递归代码如下:#include <iostream>#include <algorithm>#include <string>#include <map>...原创 2018-03-18 18:08:42 · 297 阅读 · 0 评论 -
hodj 1009 FatMouse' Trade--贪心算法
整体思路:整体思路就是以 JavaBean/CatFood比为基准,比值大的房间优先。使用结构体排序,结构体排序。#include <iostream>#include <algorithm>#include <string>#include <map>#include <stdio.h>using namespace...原创 2018-03-22 15:44:55 · 264 阅读 · 0 评论 -
C++ map的基本操作和使用
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数: map<string, int>mapstring; map<int, string>mapint; map<sring, char>mapstring; ...转载 2018-03-16 09:56:43 · 562 阅读 · 0 评论 -
hdoj 1003 Max Sum---动态规划,最大子序列求和
初来乍到,动态规划不会呀,刚开始用暴力法,超时了!超时代码如下:思路:大致是选中一个数当做结尾,然后加和。例如在6 -1 5 8 -7选中5作为结尾大致有如下序列6 -1 5 -1 5 5就这样遍历所以的结尾,结果超时。代码如下:#include<iostream>#include<algorithm>using namespace s...原创 2018-03-15 16:33:14 · 548 阅读 · 0 评论 -
从 poj 1163( The Triangle )教你彻底学会动态规划——入门篇
动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面...转载 2018-03-14 22:58:43 · 517 阅读 · 0 评论 -
数据结构---双向链表实现队列与循环链表
一、双向链表(double linked list)如图26.5,是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。双向链表的基本操作与单链表基本一样,除了插入和删除的时候需要更改两个指针变量,需要注意的是修改的顺序很重要,插入如图3-14-5,删除如图3-14-6。链表的delete操作需要首先找到要摘除的节点的前趋,而在单链表中找某个节点的前转载 2017-05-04 14:35:34 · 1405 阅读 · 0 评论 -
教你初步了解红黑树
教你初步了解红黑树 作者:July、saturnman 2010年12月29日本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。推荐阅读:Left-Leaning Red-Black Trees, Dagstuhl Workshop on Data Structures, Wadern, Germany, Fe转载 2017-03-03 10:05:42 · 385 阅读 · 0 评论