
-----基础算法-----
基础算法
浪漫些许潦草
这个作者很懒,什么都没留下…
展开
-
MT2145 上楼梯2(DP)
先处理前k阶,对于前ik时,每次可以走1,2,…,k-1,k阶,因此dp[i]=dp[i-1]+dp[i-2]+…原创 2024-07-28 12:47:53 · 248 阅读 · 0 评论 -
MT2140 供水管线(最小生成树Kruskal)
思路:Kruskal模板题。原创 2024-07-28 12:38:59 · 277 阅读 · 0 评论 -
MT2143 线断树(线断树)
线断树模版题(带延迟更新lazy),注意sum要用long long。原创 2024-07-27 11:17:24 · 276 阅读 · 0 评论 -
MT2141 快排变形(树状数组)
刚开始想的时候完全没思路,后来看了题解说是通过树状数组来计算逆序对,但是要先将原数组离散化。通过树状数组来计算逆序对(也可以用归并排序来计算逆序对)。原创 2024-07-24 21:36:48 · 234 阅读 · 0 评论 -
MT3049 区间按位与(ST表)
这里先说一下我首先想到的思路,对区间进行操作,又是区间查询,所以我首先想到了线段树,于是一段回忆猛敲(copy),结果线段树是能做,但是数据量大了之后会TTL。个人理解,ST表就是预先打表,但是对于区间来说,打表过程优化了,类似于二分打表,查询过程也是优化的,最多查询两段,但是整体上必须要求数据中途不会被修改。然后看到这题的提示是ST表,没学过,于是记录一波。原创 2024-06-05 10:17:46 · 213 阅读 · 0 评论 -
常见排序算法学习
由于面试的时候排序算法是基础中的基础,所以特来总结一波排序算法的知识。冒泡排序思想:一开始交换的区间为 0n-1,从0位置开始前后两个数比较,大的放在后面,这样依次交换下去,最大的数会最终放在数组的最后。然后范围变为0n-2,从0位置开始比较交换,这样最终第二大的数会放在数组的倒数第二个位置。… 然后依次进行这样的交换过程,当区间只剩下一个数的时候,整个数组就变得有序了。代码:#include<bits/stdc++.h>using namespace std;const in原创 2021-08-25 22:29:57 · 314 阅读 · 0 评论 -
stack栈
stack栈的应用栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中转载 2016-11-18 16:58:40 · 443 阅读 · 0 评论 -
栈和队列
栈和队列博客转载自:http://www.cnblogs.com/yushuo1990/p/5995051.html再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习。首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个阶段再去探究具体的实现,以及对基本结构的改造!C++标准库中的转载 2016-12-02 10:56:33 · 854 阅读 · 0 评论 -
蓝桥杯 表达式计算(栈)
表达式计算问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。输入格式 输入一行,包含一个表达式。输出格式 输出这个表达式的值。样例输入1-2+3*(4-5)样例输出-4数据规模和约定 表达式长度不超过100,表达式运算合法且运算过程都在int内进行。原创 2017-03-20 17:25:21 · 1211 阅读 · 0 评论 -
nyoj 35 表达式求值(栈)
表达式求值描述ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)输入第一行输入一个整数n,共有n组测试数据(n每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运原创 2017-03-20 19:49:02 · 609 阅读 · 0 评论 -
hdu 4857 逃生(拓扑排序)
逃生Problem Description 糟糕的事情发生啦,现在大家都忙着逃命。但是逃命的通道很窄,大家只能排成一行。现在有n个人,从1标号到n。同时有一些奇怪的约束条件,每个都形如:a必须在b之前。 同时,社会是不平等的,这些人有的穷有的富。1号最富,2号第二富,以此类推。有钱人就贿赂负责人,所以他们有一些好处。负责人现在可以安排大家排队的顺序,由于收了好处,所以他要让1号尽量靠前,如果此时原创 2017-07-18 10:51:09 · 465 阅读 · 0 评论 -
hdu 2647 Reward(拓扑排序)
RewardProblem Description Dandelion’s uncle is a boss of a factory. As the spring festival is coming , he wants to distribute rewards to his workers. Now he has a trouble about how to distribute the r原创 2017-07-20 10:14:53 · 491 阅读 · 0 评论 -
RMQ (Range Minimum/Maximum Query)算法(转)
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,下面介绍一下解决这两种问题的比较高效的算法。当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里转载 2017-04-26 20:30:20 · 434 阅读 · 0 评论 -
Codeforces Round #395 (Div. 2) C. Timofey and a tree(树的基础应用)
Timofey and a treeEach New Year Timofey and his friends cut down a tree of n vertices and bring it home. After that they paint all the n its vertices, so that the i-th vertex gets color ci原创 2017-02-16 16:56:18 · 411 阅读 · 0 评论 -
hdu 1358 Period(KMP之next数组)
PeriodProblem Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic strin原创 2017-07-10 10:58:38 · 414 阅读 · 0 评论 -
nyoj 2340 最小循环节(KMP之next数组的应用)
最小循环节题目描述 给定一个字符串S求该字符串的最小循环节长度及最小循环节。 输入 多组输入数据,每组数据输入一个字符串,直到文件结束。 输出 输出一个整数代表这个字符串的最小循环节的长度,输出一串字符串代表最短循环节,中间用空格隔开。样例输入 aaa 样例输出 1 a 提示 题目数据:长度小于1e6.原题链接:最小循环节首先得知道什么是最小循环节 kmp的next数组里存的是原创 2017-07-10 10:35:43 · 536 阅读 · 0 评论 -
快速幂取模
快速幂取模int pow(int a,int b,int c){ int ans=1; a=a%c; while(b!=0) { if(b&1) ans=(ans*a)%c; a=(a*a)%c; b>>=1; } return ans;}快速求幂int原创 2016-11-05 12:29:36 · 315 阅读 · 0 评论 -
hdu 6055 Regular polygon(判断正方形)(2017 Multi-University Training Contest - Team 2)
Regular polygonProblem DescriptionOn a two-dimensional plane, give you n integer points. Your task is to figure out how many different regular polygon these points can make.InputThe input file consists原创 2017-07-28 08:21:59 · 808 阅读 · 0 评论 -
poj 3461 Oulipo(KMP)
DescriptionThe French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter ‘e’. He was a member of the Oulipo group. A quote from the book:Tout avait Pair normal, mais原创 2017-05-22 20:32:39 · 439 阅读 · 0 评论 -
hdu 6152 Friend-Graph(拉姆齐定理)
Friend-Graph题目链接:Friend-Graph题意:给出n个人的关系,如果其中有三个人(或三个以上)相互认识或相互不认识,就输出Bad Team!,否则输出Great Team!思路:拉姆齐定理 对于n≥6的情况,直接输出Bad Team! n<6,直接暴力判断即可代码:#include<bits/stdc++.h>using namespace std;const int max原创 2017-09-06 09:28:01 · 712 阅读 · 0 评论 -
hdu 6112 今夕何夕(日期计算——蔡勒公式)
今夕何夕Problem Description今天是2017年8月6日,农历闰六月十五。小度独自凭栏,望着一轮圆月,发出了“今夕何夕,见此良人”的寂寞感慨。为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。小贴士:在公历中,能被4整除但不能被100整除,或能被400整除的年份即为闰年。I原创 2017-08-14 09:44:39 · 635 阅读 · 0 评论 -
nyoj 737 石子合并(一)(区间DP)
石子合并(一)描述有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。输入有多组测试数据,输入到文件结束。每组测试数据第一行有一个整数n,表示有n堆石子。接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开输出输出总代价的原创 2017-07-24 18:53:03 · 559 阅读 · 0 评论 -
hdu 6114 Chess(组合数取模)(Lucas定理)
Chess题目链接:Chess思路:设长边为n,短边为m,则题意为最多摆放m个車有多少种方案。 即从1~n中选m个数,也就是C(n,m)代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int maxn=1e3+10;const int mod=1e9+7;LL qmod(LL a,LL n,LL原创 2017-08-18 16:32:22 · 462 阅读 · 0 评论 -
hdu 2665 Kth number(主席树)
Kth numberProblem Description Give you a sequence and ask you the kth big number of a inteval.Input The first line is the number of the test cases. For each test case, the first line contain two in原创 2017-07-24 21:54:34 · 600 阅读 · 0 评论 -
nyoj 1278 Prototypes analyze(平衡二叉树)
Prototypes analyze描述 ALpha Ceiling Manufacturers (ACM) is analyzing the properties of its new series of Incredibly Collapse-Proof Ceilings (ICPCs). An ICPC consists of n layers of material, each with原创 2017-04-17 15:48:01 · 547 阅读 · 1 评论 -
ZOJ 2339 Hyperhuffman(Huffman编码)
HyperhuffmanYou might have heard about Huffman encoding - that is the coding system that minimizes the expected length of the text if the codes for characters are required to consist of an integral num原创 2017-04-20 17:28:04 · 598 阅读 · 0 评论 -
同余模定理
同余模定理定义:• 所谓的同余,顾名思义,就是许多的数被一个数d去除,有相同的余数。d数学上的称谓为模。如a=6,b=1,d=5,则我们说a和b是模d同余的。因为他们都有相同的余数1。• 数学上的记法为:• a≡ b(mod d)• 可以看出当n• (1) a和b是模d同余的.•转载 2016-12-24 21:31:38 · 803 阅读 · 0 评论 -
博弈论
博弈论博客转载自:http://www.cppblog.com/MiYu/archive/2010/08/25/124649.html有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。转载 2016-12-27 10:44:11 · 499 阅读 · 0 评论 -
并查集
并查集先来个容易理解的并查集,特别容易理解http://blog.youkuaiyun.com/dellaserss/article/details/7724401/总结一下:并查集其实就是维护了几个动态的集合,集合中的每一个元素都标记了一个父节点,同一个集合的父节点是相同的。当一个元素的父节点就是它本身时,它就是这个集合的代表。并查集有三种操作:123这里用数组实现,原创 2016-12-14 11:43:57 · 421 阅读 · 0 评论 -
前缀、中缀、后缀表达式
前缀、中缀、后缀表达式博客转载自:http://blog.youkuaiyun.com/antineutrino/article/details/6763722/关键字:概念, 前缀表达式, 前缀记法, 中缀表达式, 中缀记法, 波兰式, 后缀表达式, 后缀记法, 逆波兰式它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的转载 2016-12-06 17:16:15 · 425 阅读 · 0 评论 -
动态规划之完全背包
借鉴他人的总结:完全背包:完全背包(CompletePack): 有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。完全背包按其思路仍然可以用一个二维数组来写出:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0原创 2016-11-21 12:50:17 · 658 阅读 · 0 评论 -
vector容器
vector容器vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。 vector的扩充机制:转载 2016-11-22 09:53:06 · 943 阅读 · 0 评论 -
C++中substr()函数用法
博客转载自:http://blog.youkuaiyun.com/glp_hit/article/details/8112888C++中substr()函数用法substr(起始位置,长度);#include #include using namespace std; main() { string s("12345asdf"); string a=s.subs转载 2016-11-28 17:37:15 · 2191 阅读 · 0 评论 -
标准c++中string类函数介绍
标准c++中string类函数介绍博客转载自:http://www.jb51.net/article/41725.htm注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可转载 2016-11-28 21:13:14 · 718 阅读 · 0 评论 -
动态规划之01背包问题
01背包01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。Pi表示第i件物品的价值。决策:为了背包中物品总价值最大化,第 i件物品应该放入背包中吗 ?题目描述:有编号分别为a,b,c,d,原创 2016-11-19 14:42:47 · 799 阅读 · 0 评论 -
C++ int转string
C++ int转string第一种方式#include #include using namespace std;int main(){ int n = 65535; char t[256]; string s; sprintf(t, "%d", n); s = t; cout << s << endl; ret转载 2016-11-18 17:01:26 · 425 阅读 · 0 评论 -
树状数组
基本概念:假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构,支持随时修改某个元素的值,复杂度也为log级别。来观察这个图:令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的值的总和,那么容易发现:C1 = A1C2 = A1 + A2C3 = A3C4 = A1 + A2原创 2016-11-15 08:13:24 · 434 阅读 · 0 评论 -
STL算法 unique
uniqueSTL中unique的作用是去除相邻重复元素(其实并没有去除,只是把他们都放到了后面),其返回值为相邻元素不重复序列末尾的下一个地址例:#include #include #include using namespace std;int main(){ int a[10] = {7,4,1,7,4,1,7,4,1,0}; sort(a,a+原创 2017-03-06 19:34:03 · 400 阅读 · 0 评论 -
STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有转载 2017-03-18 18:27:25 · 488 阅读 · 0 评论 -
nyoj 1272 表达式求值
表达式求值 表达式求值基础:表达式求值基础题 ps:对Smax预处理一下,转换成普通的表达式就行了代码:#include<stdio.h>#include<math.h>#include<string.h>#include<stack>#include<algorithm>using namespace std;#define max(a,b) (a>b?a:b)stack<char原创 2017-04-17 08:55:31 · 623 阅读 · 0 评论