算法
Apache-Wang
学习不是灌输,而是点燃
展开
-
UVa 489 Hangman Judge
本题还是利用字符串匹配,根据题目意思如果匹配的字符错误次数超过7次,就会输。所以本题可以利用变量计算统计共出现错误的次数即可。#include <stdio.h>#include <string.h>#define maxn 100int left, chance;char s[maxn], s2[maxn];int win, lose;//flag数组void guess(char ch原创 2016-05-24 07:51:39 · 441 阅读 · 0 评论 -
树状数组
引用别人的,写的很好:http://blog.csdn.net/int64ago/article/details/7429868转载 2016-07-11 09:53:31 · 262 阅读 · 0 评论 -
求解逆序数
http://blog.csdn.net/dlengong/article/details/7594919转载 2016-07-11 10:09:07 · 685 阅读 · 0 评论 -
数据结构——图的简介及概念
简介 众所周知图是数据结构中非常重要的一种结构,而且也是比较复杂的。因为在图形结构中,节点间的关系可以是任意的,近几年来图在许多行业迅速发展,所以总的来说掌握图是很重要的。 图的定义和基本操作 顶点(Vertex)——图的数据元素弧(Arc)——图的边(其中在有向图中有弧头(Head)和弧尾(Tail)即一条边的起点和终点)无向图——图中的边没有方向的指向有向图——图中的边有方向完全图——有1/原创 2016-11-28 18:56:13 · 2925 阅读 · 1 评论 -
图的遍历
基本概念从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。如果给定图是连通的无向图或者是强连通的有向图,则遍历过程一次就能完成,并可按访问的先后顺序得到由该图所有顶点组成的一个序列。根据搜索方法的不同,图的遍历方法有两种:一种叫做深度优先搜索法(DFS);另一种叫做广度优先搜索法(BFS)。 深度优先搜索深度优先搜原创 2016-12-01 10:03:37 · 880 阅读 · 0 评论 -
全排列算法问题
ACM经典算法题目输入n,输出1~n的全排列如输入:3输出:123132……如图:关于这个问题要如何实现呢:大家可以自己先思考一下,下面我说一下答案。这其实是一道简单的深度优先搜索的题目代码:#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;#def原创 2016-12-05 15:00:11 · 1100 阅读 · 0 评论 -
图的邻接表表示法
通常我们对于图论的实现是用邻接矩阵实现的,虽然很方便,结果也很直观,但如果数据量比较大,耗费的资源就非常多了。所以我们会用邻接表来对图中的信息,虽然读取相关信息时比邻接矩阵复杂,但存储的容量小,只需要O(|V|+|E|)的内存空间。如用c++实现的邻接表的存储:#include <iostream>#include <queue>#include <cmath>#include <cstdio原创 2017-07-16 20:44:00 · 364254 阅读 · 0 评论 -
线性表
线性表什么是线性表线性表是一种最简单的线性结构。什么是线性结构?简单地说,线性结构是一个数据元素的有序(次序)集合。它有四个基本特征: 在数据元素的非空有限集中,①存在惟一的一个被称做”第一个”的数据元素;②存在惟一的一个被称做”最后一个”的数据元素;③除第一个之外,集合中的每个数据元素均只有一个前驱;④除最后一个之外,集合中的每个数据元素均只有一个后继。这里的”有序”仅指在数据元素之间原创 2017-07-17 09:49:13 · 40267 阅读 · 1 评论 -
AARC'98 帕金森病acm问题
介绍我在学习的时候写了这段代码。我正在测试ACM考试,并解决了一些问题。前段时间我解决了这些问题,代码不完美,但是解决了这个问题。背景该ACM是依赖于算法的技能一个大问题来解决它。它需要C,C ++或Java来解决实际问题,有些IO接收输入并产生输出。问题陈述ParkinsonSource file : parkinson.{c|cpp}Input file: parkinson.inOutp原创 2017-11-20 08:45:04 · 381 阅读 · 0 评论 -
382. 三角形计数
三角形计数题目地址:http://www.lintcode.com/zh-cn/problem/triangle-count/题目给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?样例例如,给定数组 S = {3,4,6,7},返回 3其中我们可以找到的三个三角形为:{3,4,6}{3,6,7}{4,6,7}给定数组 S原创 2017-11-20 20:37:00 · 624 阅读 · 0 评论 -
快速和改进的二维凸包算法及其在O(n log h)中的实现(理论部分)
在国外某知名网站上浏览信息时发现了一篇非常好的论文,因为是英文的,自己翻译、整理了一下,如果想看原始的可以去以下链接:https://www.codeproject.com/Articles/1210225/Fast-and-improved-D-Convex-Hull-algorithm-and-its介绍这篇文章是关于一个相对较新和未知的凸包算法及其实现。这个新的算法有很好的性能,本文给出了翻译 2017-11-21 08:42:25 · 2218 阅读 · 0 评论 -
快速和改进的二维凸包算法及其在O(n log h)中的实现(实现部分)
此篇接上一篇博客http://blog.csdn.net/firstchange/article/details/78588669实施选择数组与列表“List”类是一个C#集合,它使用一个数组作为其底层容器。使用“列表”而不是数组应该有类似的性能。测试证实,直接管理阵列的性能提升很小。这个差别太小,很难用一个数组来证明丢失的清晰度。这两个集合已被用于不同的实现,可以一起比较。数组与树所有的Oue翻译 2017-11-21 09:04:18 · 584 阅读 · 0 评论 -
算法在计算中的作用
算法在计算中的作用文章目录算法在计算中的作用1.1 算法数据结构NP完全问题并行性1.2 作为一种技术的算法效率算法与其他技术小结在决定学习算法导论之前,需要首先明确几个问题:什么是算法?为什么算法值得研究?在计算机领域算法对于其他技术的作用是什么?先问问自己是否清楚这些问题,是否对这些问题有求知欲,是否想深入研究,如果是请继续往下看,或许你能从中找到答案!1.1 算法非正式地...原创 2018-11-28 12:45:18 · 3696 阅读 · 0 评论 -
算法基础(一)插入排序
文章目录插入排序小结算法导论在本章为我们展开了算法的画卷,介绍了几种基础的算法,并深化了其中的思想,让我们一起来看看。插入排序首先来看问题的描述:我在代码大全里介绍过隐喻,现在在把它拿来再合适不过了。我们可以把插入排序看着是扑克牌,ok这样就好理解多了。假设桌子上有几张牌{ 3, 9, 6, 10, K, J, 5}(我们忽略花色),现在我们要打牌,我们需要将牌进行排序,我们会这样做:...原创 2018-11-28 13:35:19 · 191 阅读 · 0 评论 -
分析算法
文章目录RAM模型插入排序算法的分析小结分析算法的意义就是为了预测算法所需要的资源,更通常的说法是为了计算时间复杂度和空间复杂度。RAM模型在分析一个算法之前,我们必须有一个要使用的实现技术的模型,包括描述所用资源及其代价的模型。在算法导论中假定了一种通用的单处理器模型——随机访问模型(RAM)。RAM模型包含真实计算机中常见的指令:算术指令(如加减乘除、取余、上取整、下取整)、数据移动指...原创 2018-11-28 15:49:27 · 825 阅读 · 0 评论 -
KMP算法的解答(转别人的留着以后看)
http://www.cnblogs.com/c-cloud/p/3224788.html翻译 2016-06-12 11:04:05 · 358 阅读 · 0 评论 -
UVa 455 Periodic Strings
本题是在ACM比赛中经常出现的一类题目,找出最小子串的问题,可用多种方法求解,在这里列举几种一、直接暴力枚举法#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std; char str[104]; int main() { int n原创 2016-05-23 18:51:26 · 334 阅读 · 0 评论 -
UVa 133 The Dole Queue
本题有点类似约瑟夫环问题,但从复杂性来讲,是在约瑟夫环的基础上增加了一层,可以说是前后两次的约瑟夫问题。主要的思路就是用一个标记数组表示哪些元素已经被选出来了,再将他们输出。本题最巧妙的一部分就是运用+/-1将两个操作统一起来了。#include <stdio.h>#define maxn 25int n, k, m, a[maxn];int go(int p, int d, int t){原创 2016-05-24 12:12:39 · 450 阅读 · 0 评论 -
UVa 213 Message Decoding
#include <stdio.h>#include <string.h>int readchar()//如没有遇到'\r'或'\n'时,返回ch{ for(;;) { int ch = getchar(); if(ch != '\n' && ch != '\r') return ch; }}int readint翻译 2016-05-24 15:14:03 · 362 阅读 · 0 评论 -
UVa 512 Spreadsheet Tracking
#include <stdio.h>#include <string.h>#define maxd 100#define BIG 10000int r, c, n, d[maxd][maxd], d2[maxd][maxd], ans[maxd][maxd], cols[maxd];void copy(char type, int p, int q){ if(type == 'R'翻译 2016-05-24 15:56:15 · 353 阅读 · 0 评论 -
UVa 1589 Xiangqi
本题看起来是比较复杂的一类问题,要模拟实际生活中象棋的走法,但其实并不是很复杂,根据题目意思需要分成四类情况进行讨论:1、对将 2、车 3、炮 4、马。其中复杂度也是按照这个顺序排的,最复杂的是马的情况,根据以上的推断写出如下程序:#include <bits/stdc++.h>//可以包含所有c++的头文件,但使用要慎重,不是每个oj都能通过的using namespace std;转载 2016-05-24 17:22:52 · 385 阅读 · 0 评论 -
poj 1852 Ants
题目:http://poj.org/problem?id=1852本题如果从常规的思想出发去解决问题是比较复杂的,而且时间复杂度会比较高,极有可能超时,但本书给出了一个非常巧妙的解法,程序简单易懂,所以我们在平时训练的过程中不能一味的最求速度,而要想清楚具体的思路或者是巧妙的方法。一般考虑当两只蚂蚁在杠上运动时,蚂蚁相互间碰到后的运动情况,这个思路直接用“穿过去”的思想,非常巧妙 附上AC代码:/原创 2016-05-24 19:34:26 · 6687 阅读 · 0 评论 -
二分搜索与一般搜索
我们一般采用的搜索方式是通过简单的for循环对数组或其他的存储结构进行遍历查找,对于数据量较小时,在时间上还是可以的,但数据量大了之后就不行了,所以我们在比赛中采用的搜索方式主要是以二分搜索为主的。但需要记住一条,对于二分搜索的前提条件是所搜索的对象必须是有序的。这里简单介绍一下二分搜索基本定义: 二分法又称分半法,是一种方程式根的近似值求法。 基本思想: 分而治之。将一个规模为n的问题分解为原创 2016-05-24 19:49:01 · 7273 阅读 · 0 评论 -
UVa 201 Squares
边用Hij 和 Vij 表示,分别代表(i,j)-(i,j+1)和(i,j)-(i+1,j)原题中的样例:SampleInput 4 16 H 1 1 H 1 3 H 2 1 H 2 2 H 2 3 H 3 2 H 4 2 H 4 3 V 1 1 V 2 1 V 2 2 V 2 3 V 3 2 V 4 1 V 4 2 V 4 3 2 3 H 1 1 H 2转载 2016-05-24 17:56:26 · 6357 阅读 · 0 评论 -
UVA 10474 Where is the Marble
这是一道较为简单的匹配问题,先用sort函数对输入的数组进行排序,在通过查找元素,找到目标元素所在位置并输出#include <cstdio>#include <algorithm>using namespace std;const int maxn = 10000;int main(){ int n, q, x, a[maxn], kase = 0; while(scanf("原创 2016-05-25 18:31:12 · 334 阅读 · 0 评论 -
uva 101 The Blocks Problem
#include <cstdio>#include <string>#include <vector>#include <iostream>using namespace std;const int maxn = 30;int n;vector<int> pile[maxn]; //每个pile[i]是一个vector//找木块a所在的pile 和height,以引用的形式返回调用者翻译 2016-05-26 18:13:50 · 280 阅读 · 0 评论 -
UVa 1585 Score
本题是较为简单的字符串匹配问题,在匹配过程中遇到’O’则累加,遇到’X’则重置0,以下是代码部分 #include <algorithm> #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; char str[81]; //输入的目标转载 2016-05-21 09:18:48 · 351 阅读 · 0 评论 -
UVa 1225 Digit Counting
本题是一道简单的字符串匹配问题,定义一个存储数组、一个计数数组,将存储数组的元素-‘0’就好,代码如下:#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int main(){ char str[1000]; memset(str, 0, sizeof(str));原创 2016-05-21 09:45:47 · 289 阅读 · 0 评论 -
UVa 1586 Molar Mass
本题主要是考察字符串匹配问题,思路就是先匹配字符,找到相应的原子量,再与后面的数字进行乘法运算,在求和。需要注意的有两个方面:第一、数字可能不止一位所以考虑匹配时要考虑清楚,第二、在化学分子式中有些较为复杂的基,如本题中-OH,以下是别人的代码。#include <stdio.h>#include <string.h>#include <ctype.h>#define MAXN 100char转载 2016-05-21 09:11:42 · 465 阅读 · 0 评论 -
UVA 227
将空格字符定位,再将其做相应的移动 #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; char转载 2016-06-05 09:22:42 · 403 阅读 · 0 评论 -
个人计划
文章目录概述计划想法书籍概述本人想要完成坚持每日以博客的形式发表自己的学习内容和过程。其一希望借此来激励自己,其二也希望能和大家分享与交流。计划计算了一下每天的时间,早上6点-9点,晚上19点-22点,共6个小时。其中21点之前是学习时间,21点之后是复习时间,会将自己一天所学知识记录并总结成博客,完成更新。想法我认为读书并不是简单地获取知识的过程,而是能够从中提升自己的思维模式,更好...原创 2019-04-21 20:46:25 · 206 阅读 · 0 评论