——练习
文章平均质量分 59
张今天
这个作者很懒,什么都没留下…
展开
-
数据结构--队列(FIFO)
c++中的STL是非常好用的。这里使用数组的形式或结构体的形式加深理解。首先,介绍数组的形式,,将“6 3 1 7 5 8 9 2 4”这 9个数分别写在 9张便签上模拟这样的规则,规则是这样的:首先将第 1个数删除,紧接着将第 2个数放到 这串数的末尾,再将第 3个数删除并将第 4个数放到这串数的末尾,再将第 5个数删除…… 直到剩下后一个数,将后一个数也删除。引入两个整型变量 head 和原创 2018-01-05 20:45:39 · 2965 阅读 · 0 评论 -
HUD-1002(大位数加法)
思想: 运用字符串和整数的转换关系,然后模拟手写运算从后往前依次计算;详细参考【 大数加减乘除】AC代码; #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <algorithm> #include <sstream> #include <cctype> #include <原创 2017-09-02 17:34:06 · 569 阅读 · 0 评论 -
HDU-1004(基础题)
思想;用一个数组保存每个字符串出现的次数;其中为了能够用 该时数组与前边数组比较,设置一个结构数组能够寸字符串就 ok了; AC代码; #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <algorithm> #include <sstream> #in原创 2017-09-02 17:45:41 · 414 阅读 · 0 评论 -
HDU-1005(基础题)
思想: 写题时一直出现超时,没想到是有规律的;哗~~! #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <algorithm> #include <sstream> #include <set> #include <string> #include <stack> #i原创 2017-09-02 17:54:55 · 368 阅读 · 0 评论 -
HDU-1008(基础题)
思想; 经过数学计算可以得出 0 - 47 开始循环; 代码: #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <algorithm> #include <sstream> #include <set> #include <string> #include <sta原创 2017-09-02 18:34:49 · 498 阅读 · 0 评论 -
Uva 3n+1 问题
3n+1 问题:Problems in Computer Science are often classified as belonging to a certain class of problems (e.g.,NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm原创 2017-07-21 13:49:40 · 339 阅读 · 0 评论 -
QWb与电阻
题目链接:点击这里题目描述:qwb闲着无聊,就开始拆自己的电脑,他发现主板上某个元件可以视作如图所示无限长的电路。已知该电路由三种不同的电阻r1,r2,r3构成,他想要计算ab之间的电阻。 输入描述: 第一行输入一个整数T,表示数据组数, 接下来T行,每行三个整数r1,r2,r3。输出描述: 每组数据输出一行,保留两位小数。示例:输入: 2 1 1 1 1 2 3原创 2017-12-26 14:36:04 · 313 阅读 · 0 评论 -
QWB的骚扰
题目链接:点击这里题目描述: 自从学姐拒绝了qwb之后,qwb开始了疯狂的骚扰。qwb来到了一个公共电话亭,他摸摸口袋只有n元钱。 已知该公用电话的规则是,前3分钟一共收费x元(不到3分钟也要收x元),超过3分钟每分钟收费y元(不到1分钟也要收y元)。(先扣钱再打电话。) 那么问题来了,qwb最多骚扰学姐几分钟?(假设学姐不会挂qwb电话)输入描述: 第一行输入原创 2017-12-26 14:24:41 · 409 阅读 · 0 评论 -
取数游戏
题目描述: 给定两个长度为n的整数列A和B,每次你可以从A数列的左端或右端取走一个数。假设第i次取走的数为ax,则第i次取走的数的价值vi=bi⋅ax,现在希望你求出∑vi的最大值。输入描述: 第一行一个数T,表示有T组数据。 对于每组数据,第一行一个整数n, 接下来两行分别给出A数列与B数列。输出描述: 每一组数据输出一行,最大的∑vi。示例: 输入 2 2原创 2017-12-26 14:13:31 · 549 阅读 · 0 评论 -
用malloc申请一个二维数组
方法一:利用二级指针申请一个二维数组。#include<stdio.h> #include<stdlib.h>int main(){ int **a; //用二级指针动态申请二维数组 int i,j; int m,n; printf("请输入行数\n"); scanf("%d",&m); printf("请输入列数\n"); scan转载 2017-10-29 15:16:10 · 431 阅读 · 0 评论 -
HDU-1001 (基础题)
Sum ProblemTime Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 486843 Accepted Submission(s): 123616Problem Description Hey, welcome to HDOJ(Hangzh原创 2017-09-02 17:18:40 · 678 阅读 · 0 评论 -
HDU-1000(基础题)
A + B ProblemTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 681838 Accepted Submission(s): 211991Problem Description Calculate A + B. Input E原创 2017-09-02 16:40:39 · 435 阅读 · 0 评论 -
数据结构--栈(FILO)
使用的是数组,c++中的STL是非常好用的,关于栈,生活中也有很多这样的例子,最典型的是摞盘子。使用回文字符串探究栈的作用,“aha”和“ahaha”均是回 文,但“ahah”不是回文。通过栈这个数据结构我们将很容易判断一个字符串是否为回文。通过读取字符串借助栈来解决这个问题。代码: #include #include #includeusing namespace std;in原创 2018-01-05 20:59:22 · 8771 阅读 · 0 评论 -
数据结构--栈(FILO)和队列(FIFO)的应用
纸牌游戏:游戏的规则 是这样的:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人 手中的牌全部出完时,游戏结束,对手获胜。 假如游戏开始时,小哼手中有原创 2018-01-05 21:09:26 · 7927 阅读 · 0 评论 -
数据结构--链表
存储一大波数的时候,我们通常使用的是数组,但有时候数组显得不够灵活,比如下 面这个例子。 有一串已经从小到大排好序的数 2 3 5 8 9 10 18 26 32。现需要往这串数中插入 6使其得 到的新序列仍符合从小到大排列。如我们使用数组来实现这一操作,则需要将 8和 8后面的 数都依次往后挪一位。上面的操作显然很耽误时间,如果使用链表则会快很多。链表的插入: 定义每个结点:。左边的部分原创 2018-01-05 21:20:26 · 202 阅读 · 0 评论 -
数的全排列--深度优先搜索
例如:12的全排列是12、21,123的全排列是123、132、213、231、312、321。依次类推:1234的全排列是……… 在123 的全排列中,我们使用3个盒子存放即将放进的数字,每当走到一个盒子前就把手中的数字放进去,手中的数字没了之后,再次返回,把盒子中的数字拿走,再次进行排列。如此复杂的排列,如何使用程序解决呢?首先应该使用一个数组book来标记哪些牌已经使用了。原创 2018-01-06 20:57:42 · 425 阅读 · 0 评论 -
迷宫--深度优先搜索
在迷宫中,有许多路障,如何在最快的时间,也就是路程最短啦,去解救一个人呢? 使用一个二维数组来存储这个迷宫,刚开始的时候,小明处于迷宫的入口(1,1)。迷路的瞎子在(p,q)。同时每次在一个位置都需要对所在的位置对四个方向进行顺序尝试,解决方法是使用一个方向数组next,如下:int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};然后使用方向数组,原创 2018-01-06 21:31:18 · 446 阅读 · 0 评论 -
迷宫--广度优先搜索
对于上一个迷宫的问题也可使用广度优先搜索(Breadth First Search,BFS),也称作宽度优先搜索。深度优先搜索的方法是一直搜索下去,直到走不通,再回到原地。而广度优先搜索是是“一层一层”的扩展进行搜索。最开始假设还是(1,1)处,一步可以到达的点有(1,2)和(2,1) 但是还没有找到目标,继续通过这两个(1,2)、(2,1)点往下走。之后,他能走到哪个点呢?(2,2),通过原创 2018-01-06 21:56:14 · 410 阅读 · 0 评论 -
桶排序
期末考试完了老师要将同 学们的分数按照从高到低排序。小哼的班上只有 5个同学,这 5个同学分别考了 5分、3分、 5分、2分和 8分,哎考得真是惨不忍睹(满分是 10分)。接下来将分数进行从大到小排序, 排序后是 8 5 5 3 2。我们这里只需借助一个一维数组就可以解决这个问题。请确定你真的仔细想过再往下 看哦。 首先我们需要申请一个大小为 11 的数组 int a[11]。OK,现在你已经有原创 2018-01-05 19:43:06 · 178 阅读 · 0 评论 -
冒泡排序
桶排序,它是非常浪费空间的,例如需要排序数的范围是0-210000000000之间,则需要申请210000000000个变量,也就是要写成int a[210000000000].这是非常占用空间的。这次介绍冒泡排序:其思想是每次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。就如同一个个气泡进行“翻滚”。例如我们需要将 12 35 99 18 76这 5个数进行从大到小的排序。既然是从原创 2018-01-05 19:50:13 · 180 阅读 · 0 评论 -
快速排序--最常用的排序
冒泡排序解决了桶排序浪费 空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了 O(N2)。假如我 们的计算机每秒钟可以运行 10亿次,那么对 1亿个数进行排序,桶排序只需要 0.1秒,而冒 泡排序则需要 1千万秒,达到 115 天之久。所以这里介绍下一个—快速排序其实快速排序是基于一 种叫做“二分”的思想。它的平均时间复杂度为 O(NlogN)O (NlogN)。假设我们现在对原创 2018-01-05 20:08:28 · 317 阅读 · 0 评论 -
详解--邻接表的数组实现【转载】
邻接表的数组实现 之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。 4 5 1 4 9 4 3 8 1 2 5 2 4 6 1 3 7 第一行两个整数n m。n表示顶点个数(顶点编号为1~n),m表示边转载 2017-07-31 17:00:00 · 330 阅读 · 0 评论 -
模板--任意进制转换
#include #include using namespace std; //任意进制之间的转换 /** * s1 转换之前的数 * s2 转换之后的数 * d1 原进制数 * d2 需要转到的进制数 * 高于9的位数用大写'A'~'Z'表示,2~16位进制通过验证 */ void conversion(string s1,string &s2,lon原创 2017-07-31 14:42:58 · 590 阅读 · 0 评论 -
【转载】--同余定理
运算及其基本性质 100除以7的余数是2,意思就是说把100个东西七个七个分成一组的话最后还剩2个。余数有一个严格的定义:假如被除数是a,除数是b(假设它们均为正整数),那么我们总能够找到一个小于b的自然数r和一个整数m,使得a=bm+r。这个r就是a除以b的余数,m被称作商。我们经常用mod来表示取余,a除以b余r就写成a mod b = r。 如果两个数a和b之差能被m整除,那原创 2017-08-18 22:47:40 · 401 阅读 · 0 评论 -
详解--前向量【转载】
我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置.那么对于下图:我们输入边的顺序为:1 22 3转载 2017-07-31 14:27:41 · 530 阅读 · 0 评论 -
模板--二分查找
#include<stdio.h> #include<stdlib.h>int a[]={10,22,42,51,56,63,78,99,102,118};int binary_search(int low, int high, int key) { if(low > high) return -1; int mid = low + (high - low) /原创 2017-07-31 14:33:24 · 244 阅读 · 0 评论 -
模板--Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法
Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法汇总最短路Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input输入包括多组数据。每组数据第一行是两个整数原创 2017-07-30 17:14:27 · 1396 阅读 · 0 评论 -
模板--大位数加减乘除
自认为算法比较渣,最近经常遇到一些大数问题,虽然原理大家都懂。就是把大数转换成字符串或者数组,一位一位的进行计算。但是实际写起代码来,还是Bug满天飞。还是自己用代码实现一遍比较靠谱,顺便加深一下理解。代码全扔下面了。注释应该还比较详细。/*这里专门就算法中的大数问题进行一个统一归纳*/#include<iostream>#include<string>#include<using na原创 2017-07-30 13:41:49 · 565 阅读 · 0 评论 -
C - ACboy needs your help again!
ACboy was kidnapped!!he miss his mother very much and is very scare now.You can't image how dark the room he was put into is, so poor :(. As a smart ACMer, you want to get ACboy out of the monster's l原创 2017-07-22 18:30:41 · 388 阅读 · 0 评论 -
模板--最小生成树【prim】
问题描述: 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。 输入: 输入包含多组数据,格式如下。 第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n <= 100, m <=10000) 剩下m行每行3个正整数a b c,代表城市a原创 2017-07-26 22:13:26 · 288 阅读 · 0 评论 -
模板--并查集
问题描述: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the better it will be. Of course there are certain requirements.Mr Wang selected原创 2017-07-30 13:10:49 · 238 阅读 · 0 评论 -
模板--bfs和dfs
[cpp] view plain copy print? #include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int maxn=100; bool vst[maxn][maxn]; // 访问标记 int dir[4][2]=转载 2017-07-30 11:41:01 · 166 阅读 · 0 评论 -
模板--二叉搜索树
问题描述: A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways i原创 2017-07-30 12:05:10 · 223 阅读 · 0 评论 -
详解--背包九讲
背包问题是典型的动态规划问题,满足当前状态的值只跟前一状态有关,所以我们用动态规划的思想对下面所出现的背包问题分析求解。1: 0-1背包0-1背包是最基础的背包问题,就是给出一个容量v的背包和n个价值为 w[ i ] 和数量为c [ i ]的物品,问你怎么装才能使得背包的价值最大。假设我们使用dp [ i ][ v ] 表示前 i 件物品放入 容量 v 的背包中的最大价值;根据dp的思想,回原创 2017-07-30 13:47:14 · 586 阅读 · 0 评论 -
详解--bellmanford【转载】
转自:http://www.wutianqi.com/?p=1912Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。这时候,就需要使用其他的算法来求解最短路径,Bellman-Ford算法就是其中最常用的一个。该算法由美国数学家理查德•贝尔曼(Richard Bellman, 动态规划转载 2017-07-31 22:52:28 · 236 阅读 · 0 评论 -
poj-青蛙的约会
在暑假前,已经做好了留校的准备,有幸能进如ACM集训队培训是我最开心的事,满怀着对未知的期待,为暑假作准备。同时又在迷茫自己毕业之后到底干什么,所以顺便了解一下自己想学的东西,对于大数据来说,对此认识并不是很多,但通过一个学长的介绍,逐渐了解了一下。随着时间的推移,暑期的集训到了,第一天就吓傻了,学长出的题一道没写出来,顿时感觉很迷茫,不知所措,随后几天也基本是这样, 毕竟,其他同学都是学了几个月的原创 2017-08-13 23:16:57 · 482 阅读 · 0 评论 -
详解--康托展开
是什么?定义:X=an*(n-1)!+an-1*(n-2)!+…+ai*(i-1)!+…+a2*1!+a1*0!ai为整数,并且0<=ai<i(1<=i<=n)简单点说就是,判断这个数在其各个数字全排列中从小到大排第几位。比如 132,在1、2、3的全排列中排第2位。康托展开有啥用呢?维基:n位(0~n-1)全排列后,其康托展开唯一且最大约为n!,因此可以由更小的空间来储存这些排列原创 2017-08-18 21:50:46 · 281 阅读 · 0 评论 -
详解--最大连续子序列
最大连续子序列和问题 给定k个整数的序列{N1,N2,…,Nk },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= k。最大连续子序列是所有连续子序中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{11,-4,13},最大连续子序列和即为20。注:为方便起见,如果所有整数均为转载 2017-08-04 20:30:06 · 9954 阅读 · 1 评论 -
转载--时间与空间复杂度总结
算法的时间复杂度和空间复杂度-总结 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间转载 2017-08-04 20:01:22 · 315 阅读 · 0 评论 -
详解--欧几里德算法
扩展欧几里德算法 谁是欧几里德?自己百度去 先介绍什么叫做欧几里德算法 有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b 很大的时候,枚举显得那么的naïve ,那怎么做? 欧几里德有个十分又用的定理: gcd(a, b) = gcd(b , a%b) ,这样,我们就可以在几乎是 log 的时间复杂度里求解出来 a 和转载 2017-08-02 16:20:24 · 540 阅读 · 0 评论