- 博客(86)
- 收藏
- 关注
原创 分治法
分治法不是一种特特定的算法,是一种算法思想。人们在遇到一些直接解决难以解决的大问题时,会将其分解为多个规模较小的子问题,各个解决,分而治之。最常见的分治法算法就是快速排序和归并排序。能用到分治法的题目需要符合两个特征:1. 有重复子问题 即可将一个问题分为两个相同的子问题。 比如二分法。2. 独立子问题 每个子问题之间相互独立互不干扰。 (动态...
2020-01-05 15:38:58
1398
原创 排序(二):归并排序
目录1.什么是归并排序?2. 和选择排序,冒泡排序等的暴力排序的区别在哪里,为什么快?3. 代码实现归并排序了解其他常用算法点这里 >>https://blog.csdn.net/GD_ONE/article/details/104061907归并排序是分治法思想的实例,学习完归并排序后会更加理解分治法思想和递归思想。什么是归并排序? 和选择排序,冒泡排序...
2020-01-05 15:03:36
3268
2
原创 JAVA基础语法:java编程规范和常用数据类型
目录摘要面向java编程常用数据类型数组定义初始化数组的拷贝StringString 的创建(注意是大写S!):String类型的比较: 1.==, != : 2. str1.equals(String str2);String对象的遍历:摘要本文主要介绍了最基本的java程序规则,和常用数据类型,其中侧重说了数组的一些...
2020-01-05 13:02:48
10648
11
原创 JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite)
JAVA基础知识和常用算法合集:https://blog.csdn.net/GD_ONE/article/details/104061907目录1.主类的命名必须是Main2.输入输出:2.1输入:(1)使用Scanner类进行输入(2) hasNext()方法2.2输出3快速输入输出3.1使用StreamTokenizer 和 PrintW...
2019-12-10 22:56:48
28018
26
原创 欧拉函数的应用-RSA加密算法
若p和q互质,令n = p*q 则ola(n) = (p-1)*(q-1)我们知道p和q的值能轻易知道(p-1)*(q-1)的值也就是ola函数的值,但是仅仅知道n是多少,却非常难得到p和q是多少,因为当n很大时,例如有几百位时,它就有非常多的质因数,要暴力穷举很长时间。所以这就保证了RSA加密算法的可靠性。RSA加密是非对称加密,密钥 由公钥和私钥组成。公式为:(明文)^e % ...
2019-12-09 20:42:02
2645
原创 Codeforces Round #579 (Div. 3) 题解
好多贪心啊。A. Circle of Students题目大意:一群学生围成一个圈跳舞,每个学生都有一个编号,如果n个学生围成一个圈后,无论顺时针或者逆时针,总能依次从 1号到n号。则输出"YES",否则输出"NO"第一种做法:直接模拟一下就行了,找出1号的位置,然后看2号在其顺时针方向还是逆时针方向,依次遍历,如果不符合条件,输出,跳出循环。#include <...
2019-11-15 23:54:36
790
原创 排序(一):快速排序
快速排序推荐去看个视频:https://www.bilibili.com/video/av38482542虽然java和c++有现成的sort函数,java用Arrays.sort,C++用sort,但是,我们也要了解其原理,要能熟练的写出模板。快排和归并排序一样都是分治法思想。快速排序的主要思想:从序列中取一个基准值,然后将序列分为左右两部分, 使得左边的数都比基准值小,右......
2019-11-10 00:02:31
4601
1
原创 C语言基础部分:数组
什么是数组?数组怎么定义(创建)?1.通俗来说,数组就是相同数据元素的集合。2. 一维数组的定义格式: 类型名 + 数组名[数组长度] 形如: int arr1[10]; 即定义了一个含有10个整型元素的一维数组 int arr2[50]; 即定义了一个含有50个整型元素的一维数组 float ar...
2019-11-06 18:07:03
701
原创 2017 - ICPC 北京赛区 F SecretPoem 找规律 or 模拟
题目链接:https://hihocoder.com/problemset/problem/1632The Yongzheng Emperor (13 December 1678 – 8 October 1735), was the fifth emperor of the Qing dynasty of China. He was a very hard-working ruler. ...
2019-10-12 20:13:34
614
原创 JAVA基础:类和对象
类是具有共同特征的对象的集合,对象是类的实例。比如 人是一个类 张三是其中一个对象。类中包含方法和属性,方法可以理解为人的行为方式,属性可以理解为人的状态。方法操作对象内部状态的改变,对象之间的相互调用也通过方法来完成。以人为例创建一个类,并直接创建张三对象,构造方法则为其行为,name则是其属性:public class Person{ String name;...
2019-10-08 17:18:31
608
2
原创 Codeforces Round #587 (Div. 3) 题解(A~F)
A.Prefixes 暴力给出一个偶数长度的字符串,只包含a和b, 要求每个偶数长度的前缀都包含相同数量的a和b每两位判断一次,如果a和b数量不相同,就将a变为b 或者将b变为a#include <stdio.h>#include <iostream>using namespace std;char s[2*100005],c;int main...
2019-09-22 22:26:18
829
原创 CF #582 Div.3 E - two small string (构造字符串,找规律,分析)
给出 n个 a,b,c; 构造一个字符串,其子串不包含题目给出的两个长度为2,只包含a, b ,c的字符串,假设目标字符串中不能出现ab ba 则目标字符串中a和b不能相邻, 所以在目标字符串中所有的a和b只能出现在左右两端。形如 aaaaccccbbbb假设目标字符串中不能出现ac ca 则目标字符串中a和c不能相邻, 所以在目标字符串中所有的a和c只能出现在左右两...
2019-09-22 18:02:24
568
原创 单调队列
单调队列可以用于优化多重背包。可以在O(n)的时间复杂度内求解某一区间内的最值。比如, 给出 n 个数, 求出数组中任何一个长度为m的区间中的最大值 和 最小值暴力的算法是, 两个循环,内层循环对 m 进行遍历,求出最值。 但这样重复遍历了很多元素。如何省去重复的步骤呢?单调队列的思想是 队列里元素大小一定是单调递增或者单调递减的,且保存的是所有含有这个最值的区间的最值。这样...
2019-09-19 20:04:30
403
原创 并查集 Wireless Network POJ - 2236.
并查集裸题#include <iostream>#include <set> #include <math.h>using namespace std;struct node{ int x,y; node(int x = 0, int y = 0):x(x),y(y){}}A[1100];int p[1100];set <int&g...
2019-09-19 19:31:41
340
原创 堆排序裸模板
#include <stdio.h>#include <iostream>using namespace std;const int N = 1000;int tree[N];void heapify(int tree[], int n, int i){ // 当两个子节点都是堆时, 可以直接递归形成堆。 if(i > n){ return...
2019-09-19 19:13:22
333
原创 CF #582 Div.3 B - Bad Prices (思维,暴力)
给出 n 个数,对于其中一个来说, 如果在其后出现比它小的数, 则该数为 Bad Prices ,问一共有几个Bad Princes既然是在它后面比它小, 那只要从最后面找到一个最小的数, 如果 前面的数大于这个最小的数,则这个数就是一个 Bad girl :)所以 倒着搜索, 最后一个数一定不是Bad Prices,不断更新一个最小值,有比它大的就加一#include <s...
2019-09-18 23:10:56
438
原创 CF #582 Div.3 A - Chips Moving (暴力)
给出 n 个数, 可以对任何一个数进行 加一 减一 加二 减二 四种操作,操作次数不限, 后两种不花费代价, 前两钟花费 1 代价。 问 让 n 个数相同的最小代价. 直接暴力枚举 将所有数变为 第 i 个数所需要的操作,然后更新最小值.#include<stdio.h>#include<iostream>#include<math.h>usin...
2019-09-18 23:02:47
397
1
原创 CF #582 Div.3 D - Equalizing by Division (暴力 枚举)
给出n个数, 你可以对任意一个数进行数次 除以 2 的操作直到为0, 给出一个整数m, 求 要使 n 个数中 有 m 个数相同, 至少操作几次。好暴力,, 枚举出n个数中每个数除以2直到为0的所有数, 找出一个数 t 使n个数中的m个数变为t所需操作数最少。最大值为 2*1e5 所以开一个这么大的vector就够了.然后为了得到 某个 数 n 变为 t 所需的最少操作步骤,...
2019-09-18 22:51:47
276
原创 CF #582 Div.3 C - Book reading (思维题,简单预处理)
题目要求输出 从 1 ~ n 中 所有 m 的倍数的个位数之和。n很大, 暴力肯定不行,而但凡是数,都有一定的规律性,一个数的倍数又有什么规律呢?以 3 为例,1倍就是一个3, 两倍就是 两个3相加, 三倍就是 三个 3 相加,直到十倍, 以十倍为一个循环,十一倍时又是一个新的循环的开始,3 6 9 12 15 18 21 24 2730 | 33 36...
2019-09-18 18:19:02
369
原创 递归入门之汉诺塔问题
递归最重要的是找出递归式之间的关系,虽然有时侯道理很容易想通,但代码不好实现,所以考虑某个问题的时候尽量画出函数的每一层调用,手动模拟一下递归。以汉诺塔的例子来说,设有 A, B , C 三个圆柱, A 上有 n 个圆盘,圆盘由1~n逐渐增大,移动时大圆盘不能放在小圆盘上,则要使 n个圆盘由 A ----> C,我们需要先移动前 n - 1 个。而移动 前 n ...
2019-09-17 22:56:51
405
原创 kuangbin专题简单搜索:
1:棋盘问题在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。本题要注意任意两个棋子都不能放在棋盘中的同一列或者同一行,通过这句话我们可以将问题转化为从第一行开始,每行只放一个,并且与上面的棋子不在同一列,那么我们只要按照行或列每次遍历一...
2019-09-14 21:35:29
1304
原创 多组输入输出
首先说一下OJ平台的判题机制,OJ判题是黑盒测试,它并不关心程序的内容,只用程序的输出结果来判断是否正确。OJ后台有两个文件,一个是输入文件,一个是输出文件。你将代码提交上去后,OJ会运行你的代码,并将输入文件中的数据输入,如果你的代码的运行结果和输出文件完全一致,那么该代码通过,AC。以 多组输入输出中 a + b 为例。如果你的代码每组数据运行的结果和1.out完全一致...
2019-09-10 15:38:44
2679
3
原创 2018焦作网络预选赛B- Mathematical Curse DP问题
题目链接https://nanti.jisuanke.com/t/A2012题目大意是 有 n 个整数,m 个 运算符 , 运算符只包含有 + ,- ,*, / 这四种,然后给你一个初始值 K ,你要依次用这m个运算符对n个数中的m个数进行运算,选择数时只能从前到后,不能回头,但可以越过。也就是说从 n 个整数中选出 m个数, 然后依次对 给出的运算符序列进行相应的运算,使得到的值最大...
2019-08-12 15:35:49
222
原创 计算几何基础模板 例 POJ - 1269 Intersecting Lines 求两直线位置关系
叉积是计算几何中运用最多的运算,所以简单说一下叉积。设 向量 A =(x1,y1) B = (x2, y2)则A和B的叉积为:A和B的叉积在数值上等于 A和B围成的平行四边行的面积, 用X代表叉积 若 A X B >0 则 B X A < 0 , 这是因为如果当A X 时B, A在B的不超过180度的顺时针方向,则AXB>0 换成 B X A 则...
2019-08-06 23:43:50
224
原创 模板-根据先序遍历和中序遍历建立二叉树- HDU-1710-Binary Tree Traversals
#include <stdio.h>#include <string>#include <iostream>#include <algorithm>using namespace std;int t1[1000],t2[1000],count1=1;typedef struct Tree_node{ int data; struct...
2019-08-03 10:42:28
260
原创 POJ 2406 (KMP,next数组)
这道题求的是字符串由几个相同子串构成,正好可以利用kmp算法中的next数组。next数组标记的是字符串中0 -> i-1 和 1 -> i 的最长公共长度, 设 s = t t t t t t, next[len] = 5, 这表示 s[0-4]和s[1-5] 的最长公共部分是 5 ,len = 6; 6 - 5 = 1 ,表示 s 的最小相同子串长度 是 1;则 le...
2019-07-29 10:09:22
299
原创 扩展欧几里德算法详解 以及模线性方程最小整数解 例: POJ -1061青蛙的约会
要彻底理解扩展欧几里德算法(递归实现)需要知道以下几个知识点: 欧几里德算法的原理 递归的回溯 贝祖等式 1.欧几里得算法的证明: 欧几里德算法是用来求两个数的最大公因数,其根本思想是gcd(a,b) = gcd(b,a%b),文字表达就是 a 和 b 的最大公因数 等于 b 和 a%b 的最大公因数相等,这样我们就可以递归求解到当a%b==0时,那么最大...
2019-07-25 16:56:40
762
原创 HDU 1002 :简单的大数相加
利用字符串模拟大数相加;#include <stdio.h> #include <iostream>#include <string>#include <algorithm>using namespace std;int main(){ int T,j=0; string a1, a2, a3, a4; cin>>...
2019-07-13 00:08:56
298
原创 数据结构7:单链表的代码实现
#include<stdio.h>#include<iostream>#include<string>#include<algorithm>using namespace std;typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;void Cre...
2019-06-03 19:26:11
444
原创 数据结构6:二叉树的代码实现
以二叉链表存储二叉树,以 ‘#‘ 表示无后继结点。#include<stdio.h>#include<iostream>#include<string.h>#include<string>#include<algorithm>#include<stack>#include<queue>usin...
2019-06-03 19:23:12
400
原创 数据结构5:KMP算法详解
KMP算法优于BF算法的地方是指针不回溯,利用已经比较过的部分,将模式串向右移动尽可能远的距离,在继续比较。KMP算法的核心就是构建一个next[]数组,以这个数组来决定移动的距离。在此之前先引入 公共前缀后缀这个定义:以”ABCDABD”为例,进行介绍:- ”A”的前缀和后缀都为空集,共有元素的长度为0;- ”AB”的前缀为[A],后缀为[B],共有元素的长度为0;- ”ABC...
2019-05-10 00:27:46
512
原创 数据结构4:Tire树入门
以下来源于百度百科:在计算机科学中,Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。特点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。核心思想:空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率。例如:如给出字符串"abc","ab...
2019-04-25 21:09:23
2662
3
原创 数据结构3:栈和队列
栈和队列是限制了存取点的线性结构。计算机采用调用栈来调用函数。以下摘自《算法详解》:栈就是一个先进后出的结构,就像装羽毛球的球筒,第一个放进去的羽毛球,总是最后一个出来。栈只能在栈顶进行插入删除。图示:队列:和栈相反,队列是一个先进先出的结构,从字面意思上理解,就和去买东西时排的队一样,先去的人在前面,先买到。队列只能在队头进行删除,队尾插入。...
2019-04-25 11:17:36
527
原创 数据结构2:线性表
线性结构的特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,每个数据元素都有一个前驱和后继。可以想象一下糖葫芦。线性表的顺序存储(顺序表)的基本定义:#include<stdio.h>#include<iostream>using namespace std;#define MAXSIZE 100 //一般元素个数不超过100,所以最大值定义为...
2019-04-25 10:28:42
283
原创 数据结构1: 基础定义
程序=数据结构+算法数据结构:基于C语言来说,C只给出了一些基本的数据类型,如int,char等, 但处理复杂问题时,只用这些基本的数据类型很难设计出高效的算法去解决问题,比如 设计一个学生信息管理系统,一个学生的信息包括 学号,姓名,性别,籍贯,专业,等等,学号是数字,其他的是字符,如果一个一个定义会十分麻烦,但他们都有抽象意义的联系,所以如果能够定义一个包含这些所有信息的数据,那么就会...
2019-04-25 00:48:02
251
原创 图论——路径寻找问题(弗洛伊德算法和Dijkstra算法)
路径寻找问题可以归结为隐式图的遍历,它的任务是找到一条从初始状态到终止状态的最优路径,而不是像回溯法那样找到一个符合某些要求的解。图的存储方式:邻接矩阵、邻接表、十字链表、邻接多重表等。这里介绍邻接矩阵。参见百度百科:邻接矩阵是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个有向图,其逻辑结构分为两部分,V和E集合。因为我们可以用一个二维数组存放顶点与顶点的权值,数组下标表示顶点...
2019-04-16 21:06:23
3290
原创 POJ 1979 (DFS、BFS入门 、递归回溯 )
DFS(深度优先搜索)和BFS(广度优先搜索)是两种搜索策略,属于基础的常用算法。DFS顾名思义 先优先搜索深处的,可比喻为 一条路一直往下走,走到不能走的时候,原路返回,返回到有路可走,在继续走,如此循环。看下图DFS:由此图我们可知,DFS一次走一条路,直到无路可走,并且,不走已经走过的路,那么我们如何让计算机知道这条路已经走过呢? 一般用二维数组,将走过的位置标记为 1,...
2019-04-10 23:16:05
606
原创 POJ 3253 (贪心算法+优先队列的基本用法)
参考https://www.jianshu.com/p/50f1d4e0555c贪心算法:1.动态规划的一种特殊情况。 2.通过求局部最优解来获得整体最优解。 3.使用贪心算法的前提是该问题具有最优子结构。 4.通过可循环执行的语句实现。 5.一般都为逆序思维常用于:1.一般背包问题 2.活动安排问题 3.最小生成树 4.找零钱问题 5.均分纸牌问题 6.最大整数...
2019-04-08 21:06:44
1486
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅