自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 Acwing 343. 排序 题解(flord+sort)

题目传送门思路:这里n比较小从 0 到 26 ,所以用一般的暴力解法都不会出现问题:大致思路就是:用合适的方式存储输入的不等式,设存入的不等式有m个,用循环依次遍历使用公式 1~m ,用flord 进行传递闭包处理,处理后检查双重循环遍历关系矩阵d ,看是否存在违规情况:如果检测期间出现了矛盾情况即,d[i][j]=1 , d[j][i] =1;则立刻退出检查,并输出用前 t 个不等式会出现矛盾。如果检测期间没有出现矛盾情况,但使用完所有共识后仍有一种情况出现:d[ i ] [ j ] =

2021-09-13 08:32:13 190

原创 P1811 最短路 题解(bfs)

题目描述题目链接给定一个包含N个点,M条边的无向图,每条边的边权均为1。再给定K个三元组(A,B,C),表示从A点走到B点后不能往C点走。注意三元组是有序的,如可以从B点走到A点再走到C。现在你要在K个三元组的限制下,找出1号点到N号点的最短路径,并输出任意一条合法路径,会有Check检查你的输出。输入格式输入文件第一行有三个数N,M,K,意义如题目所述。接下来M行每行两个数A,B,表示A,B间有一条边。再下面K行,每行三个数(A,B,C)描述一个三元组。输出格式输出文件共两行数,第一行

2021-09-06 14:00:51 526

原创 codeup 求最长公共子串(字符串hash思想)

问题 A: 求最长公共子串(串)[命题人 : 外部导入]时间限制 : 1.000 sec 内存限制 : 128 MB题目描述求采用顺序结构存储的串s和串t的一个最长公共子串,若没有则输出false,若最长的有多个则输出最先出现的那一串。输入输入两个字符串输出输出公共子串样例输入 Copyabcdefadbcef样例输出 Copybc原题地址#include <iostream>#include <vector>#include <algori

2021-08-26 15:35:52 248

原创 POJ1456 Supermarket(贪心+小顶堆)

链接:POJ1456思路:贪心策略+小顶堆数据结构思路来源于算法进阶指南,我们的目的是在t的时间内获得更多的利润,该问题可以分解成许多子问题,即每天都卖出商品且保证商品的获利最大。首先将所有商品按照过期时间从小到大排序;初始化一个空的小顶堆。然后遍历所有商品1 : 如果当前商品的过期时间大于堆内商品总数,就将该商品直接插入堆内,然后进行调整,(表示着该商品可能在过期时间之前卖出)。2 : 如果当前商品的过期时间等于堆内商品总数,就将该商品与小顶堆堆顶的节点利润进行比较,如果大于堆顶利润则替换,并向

2021-08-20 11:19:07 130

原创 KMP算法总算是搞懂了

KMP算法的两部分字符串匹配的暴力做法:const int maxn=1e6+10;char p[maxn],s[maxn]; //p为原串,s为模板串for(int i=1;i<=m;i++){ bool flag=true; for(int j=1;j<=n;j++){ if(p[i]!=s[j]) flag=false; } if(flag) cout<<i-j+1; //输出匹配成功的串初始位置,p下标为0时不加1,下标1开始时加1;}时间复杂度

2021-08-16 18:18:45 224

原创 LeetCode 1049. 最后一块石头的重量 II脑筋急转弯外表下的 01 背包问题

1049. 最后一块石头的重量 II题目链接:传送门问题分析:在解决问题之前,我们可以想一想类似的问题,一堆石头,我们如何去选使得石头的总重量最大,我们顺其自然的想到用 01 背包问题的解法,得到这个问题的结果,现在你些许会发现 01背包问题和这道题的一些联系了,将这些石头分成两半,一半用 01背包问题的解法,得到这一半石头的重量最大值,最后的结果就是,剩下的石头重量减去得到动态规划得到的重量最大值。因为动态规划的到的重量一定不超过石头重量的一半,所以剩下的石头数量一定大于等于动态规划得到的重量,

2021-04-07 22:21:54 159

原创 双指针算法实现数组去重

双指针实现数组去重但保留k个相同元素题目链接:leetcode传送门原题目是最多保留2个相同的元素,这里我们扩展一下,最多保留k个相同的元素。思路:一直数组是有序的,单调递增我们可以先将前k个元素保留,因为前k个元素不管重不重复这是一定存在的。(数组下标从0开始,保留0~k-1所有元素)然后用 i 从第k个开始向后遍历,用一个变量 j 从第一个元素开始遍历,如果第 i 个与 j 元素不相等,就把第 i 个元素赋值在k的位置,j++ ,i++ , k++,否则 i 继续向后遍历,j 不变Code

2021-04-06 11:41:07 720

原创 Acwing 刷题-递增三元组(经典枚举)-爆int了呜呜

递增三元组给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],请你统计有多少个三元组 (i,j,k) 满足:1≤i,j,k≤NAi<Bj<Ck输入格式第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,…AN。第三行包含 N 个整数 B1,B2,…BN。第四行包含 N 个整数 C1,C2,…CN。输出格式一个整数表示答案。数据范围1≤N≤10^5,0≤Ai,Bi,Ci≤10^5输入样例:31 1 1

2021-03-21 15:50:53 205

原创 01背包问题,多重背包问题-分组背包问题-完全背包问题-总结-内含4种经典背包问题

01背包问题:01背包问题的特点:背包容量有限,物品只有一个,具有确定的体积和价值,我们的目标就是在不超过背包最大体积的情况下装入价值尽可能大的物品,让我们输出最大总价值对于背包问题我们可以采用类似的思考方式:以此为:状态表示 考虑所有不同情况的结果存储方式用集合表示背包问题的所有不同选法 f [ i ][ j ] 表示从0 ~ i 这些物品中选,最大背包容量为 j 的最大价值然后考虑集合选法的条件, 数量 i 小于等于 物品总数 , 体积 j 小于等于 背包最大体积 V至于背包问题的属

2021-03-16 16:17:45 1779

原创 Acwing 1230. K倍区间

1230. K倍区间给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。输出格式输出一个整数,代表 K 倍区间的数目。数据范围1≤N,K≤100000,1≤Ai≤100000输入样例:5 212345输出样例:6难度:中等时/空限制:1s

2021-03-03 19:37:15 273 1

原创 LeetCode 刷题之链表基本操作题目

对链表进行插入排序对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 1:输入: 4->2->1->3输.

2020-11-20 23:42:33 168

原创 刷题踩坑之K好数字

蓝桥杯练习系统K好数试题 算法训练 K好数资源限制时间限制:1.0s 内存限制:256.0MB问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。输入格式输入包含两个正整数,K和L。输出格式输出一个整数,表示答案对1000000007取模后的值。样例输

2020-10-18 10:58:12 162

原创 关于出栈序列合法性的题目理解

问题描述X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。路边有个死胡同,只能容一辆车通过,是临时的检查站,如图所示。在这里插入图片描述X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种?为了方便起见,假设检查站可容纳任意数量的汽车。显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。

2020-10-15 16:32:59 341

原创 Codeup《算法笔记》11.2小节——动态规划专题->最大连续子序列和

Problem A: 最大连续子序列[Creator : Imported]Time Limit : 1.000 sec Memory Limit : 32 MBDescription给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11

2020-10-13 16:44:50 162

原创 Codeup《算法笔记》9.2小节——数据结构专题(2)->二叉树的遍历->Problem D:二叉树的遍历

Problem D: 二叉树遍历[Creator : Imported]Time Limit : 1.000 sec Memory Limit : 32 MBDescription编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。Input输入包括1行字符串,长度不超过100。Output

2020-10-11 15:29:21 212

原创 Codeup《算法笔记》9.2小节——数据结构专题(2)->二叉树的遍历->二叉树

Problem B: 二叉树[Creator : Imported]Time Limit : 1.000 sec Memory Limit : 32 MBDescription如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。I

2020-10-11 15:14:56 586

原创 Codeup日期处理

日期处理:1.计算两个日期的差值:已知给定了两个日期格式是:yyyy-mmmm-dddd,求两个日期的差值思路:(1)可以用循环从小的日期加到大的日期看一共加了多少次,次数就是像个的天数,(2),可以用分而治之的想法,先将小的年份这年每月每月的加日子,如果是闰年而且月份大于2就多家一天,然后直接加一年的天数直到大年份的前一年,然后把大年份每月每月的日子加起来,2.计算日期是星期几:给定一个日子 yyyy-mmmm-dddd,要求得到这天是星期几:现在这里夸一下基姆拉尔森公式,这个公式就是专

2020-10-05 21:03:13 170

原创 Codeup 宽搜入门八数字码问题

Problem C: 【宽搜入门】8数码难题[Creator : Imported]Time Limit : 20.000 sec Memory Limit : 128 MBDescription初始状态的步数就算1,哈哈输入:第一个33的矩阵是原始状态,第二个33的矩阵是目标状态。输出:移动所用最少的步数Input2 8 31 6 47 0 51 2 38 0 47 6 5Output6思路分析:1.首先这个问题是宽搜的典型题目,当然也可以用多种方法做,例如这位大佬的解

2020-10-02 11:22:18 509

原创 矩阵的‘1’块,BFS广度优先搜索思想学习

BFS的思想学习:BFS代码结构:用队列实现层的遍历,用一个isq数组记录结点是否被访问广度优先搜索类似于树的层次遍历过程。它需要借助一个队列来实现。如图2-1-1所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1、v2、v3为第二层,v4、v5为第三层,v6为第四层,再逐个遍历每一层的每个顶点。具体过程如下:1.准备工作:创建一个visited数组,用来记录已被访问过的顶点;创建一个队列,用来存放每一层的顶点;初始化图G。2.从图中的v0开始访问,将的visited[v0]数组

2020-09-25 10:33:51 139

原创 Codeup: 问题 F: 【递归入门】走迷宫

题目描述有一个nm格的迷宫(表示有n行、m列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这nm个数据和起始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号)。现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向。如果一条路都不可行,则输出相应信息(用-l表示无路)。  请统一用 左上右下的顺序拓展,也就是 (0,-1),(-1,0),(0,1),(1,0)输入第一行是两个数n,m( 1 < n , m

2020-09-09 15:12:18 318

原创 C++ 算法常用小工具之 Pair

Pair 概述:pair 就是类似一个小结构体,他将两个元素捆绑在一起成为一个元素,经常用于两个变量 有一定 bond 的情况,例如:x,y坐标;姓名和成绩;性别和身高等等;pair 的声明初始化以及调用:pair的声明 需要添加utility头文件,记不住的话也可以用map头文件pair有两个参数,first 和second 可以是基本的数据类型也可以是容器pair 可以直接用比较运算符比较大小,两个pair 首先比较first的大小,first相等后然后在比较second 的大小#in

2020-09-09 14:34:15 1271

原创 Codeup:1985 任务调度

题目描述读入任务调度序列,输出n个任务适合的一种调度方式。输入输入包含多组测试数据。每组第一行输入一个整数n(n<100000),表示有n个任务。接下来n行,每行第一个表示前序任务,括号中的任务为若干个后序任务,表示只有在前序任务完成的情况下,后序任务才能开始。若后序为NULL则表示无后继任务。输出输出调度方式,输出如果有多种适合的调度方式,请输出字典序最小的一种。样例输入 Copy4Task0(Task1,Task2)Task1(Task3)Task2(NULL)Task3

2020-08-24 17:05:12 446

原创 c++ 数据结构queue应用学习随笔

队列概述:队列是一个先进先出的数据结构,类似食堂打饭排队,需要一个队首指针front指向队列手元素的前一位,一个队末指针rear指向最后一个元素。和栈类似,用数组实现队列时front 和rear 都是int 型的,用链表实现队列时则为int * 型的指针。下面学习对列的常用操作:清空(clear) ,判断元素个数(size), 清空(empty),入队(push) ,出对(pop),取出首元素(get_front),取出尾元素(get_rear);常用操作:void clear(){ fr

2020-08-23 22:02:40 121

原创 C++ map STL映射 简单学习

map 概述:map是一种映射,例如存储int类型数据的数组就是int 类型的下标对值int 的映射,字符数组就是int(称之为键) 对 char 的映射,但是STL 中的map 使得映射的 键 多样化,可以使字符串,浮点型,字符型,string ,等STL 容器 都可以成为map 的键。map 的声明和访问:这里定义了一个string 对 int 的映射,并通过类似数组的下标访问方式,注意键是唯一的,相同的键赋值会导致数据覆盖。#include <iostream>#inclu

2020-08-20 14:06:50 239

原创 c++ stl string概述和常用函数详析

string   概述:string 的定义#include<iostream>#include <string>using namespace std;int main(){ string str="abc123"}string 的访问:#include <iostream>#include <string>using namespace std;int main(){ string str="123456"; f

2020-08-20 10:53:40 140

原创 c++ STL set容器的常见用法和解析

set 的概述set和迭代器的定义:set<typename> name;//typename 可以是数据类型,也可以是STl容器(注意后面两个大于号之间有空格)set<int > st;set<int>::iterator it;//可以通过*it来访问set中的元素了set 常用函数:insert(x) 将x插入到set容器中,并且自动递增排序和去重,时间复杂度为O(logN)N为set容器内元素的个数 ,#include <std

2020-08-18 17:26:53 178

原创 C++标准模板库-----vector

vector 概述:vector可以理解为不定长数组,vector 数组的定义:需要加上vector头文件# include <vector>//vector<typename> arryname;vector <int > myArray;vector<node> myArray2; //node 是结构体;vector<double> myArray3;vector<vector<int> > ar

2020-08-16 19:26:24 145 1

原创 Codeup---- 求组合数

Problem B: 求组合数Description组合数的计算虽说简单但也不乏有些陷阱,这主要是因为语言中的数据类型在表示范围上是有限的。更何况还有中间结果溢出的现象,所以千万要小心。input求组合数的数据都是成对(M与N)出现的,每对整数M和N满足0<m, n≤20,以EOF结束。Output输出该组合数。每个组合数换行。Sample Input Copy5 218 13Sample Output Copy108568code:#include <iostr

2020-08-16 10:55:41 105

原创 组合数计算学习 随笔

组合数的计算:1.一个求n!含有质因子k个数的问题:直接计算法:int myfun(int n,int k){ int count=0; for(int i=2;i<=n;i++) { int temp=i; while(temp%k==0) { count++; temp/=k; } } return count;}公式法:(找规律)这个方法也可以计算n!末尾有多少个0,cal(n,5) ,因子10的个数等于因子5的个数这种方法也可以用

2020-08-16 10:22:06 121

原创 算法笔记 随笔 大整数运算

大整数四则运算的基本概念例如计算A+B ,可能很块就计出了答案,但是对于有1000位的A,B该怎么计算呢,则以吧A,B的每一位数字存储在数组中,然后根据实际中两个数字的相加计算方式进行模拟,实际上并不是很复杂:大整数的存储:用字符串读入一串数字,数字的高位在字符数组的低位,现在要把每一位数字存在一个int 型数组里,低位再低,高位在高#include <stdio.h>#include <math.h>#include <string.h> #inclu

2020-08-13 10:03:55 148

原创 Codeup——592 |Problem D: 约数的个数

Description输入n个整数,依次输出每个数的约数的个数。Input输入的第一行为N,即数组的个数(N<=1000)接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)当N=0时输入结束。Output可能有多组输入数据,对于每组输入数据,输出N行,其中每一行对应上面的一个数的约数的个数。Sample Input Copy61 4 6 8 10 120Sample Output Copy134446code:

2020-08-11 17:19:28 165

原创 Codeup——592 | 问题 E: 完数与盈数

题目描述一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。求出2 到60 之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 …(ei 为完数) G: g1 g2 g3 …(gi 为盈数)输入无输出按描述要求输出(注意EG后面的冒号之后有一个空格)。#include <stdio.h>#include <math.h>int isWan(int a){ int su

2020-08-11 17:15:23 205

原创 Codeup——591 | 问题 C: Goldbachs Conjecture

题目描述Goldbach’s Conjecture: For any even number n greater than or equal to 4, there exists at least one pair of prime numbers p1 and p2 such that n = p1 + p2.This conjecture has not been proved nor refused yet. No one is sure whether this conjecture actua

2020-08-11 09:56:05 100

原创 codeup Prime Number

Prime Number[Creator : Imported]Time Limit : 1.000 sec Memory Limit : 32 MBDescriptionOutput the k-th prime number.Inputk≤10000OutputThe k-th prime number.Sample Input Copy1050Sample Output Copy29229#include <stdio.h>#include <mat

2020-08-10 16:19:07 104

原创 codeup 素数

素数[Creator : Imported]Time Limit : 1.000 sec Memory Limit : 32 MBDescription输入一个整数n(2<=n<=10000),要求输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数,如果没有则输出-1。Input输入有多组数据。每组一行,输入n。Output输出所有从1到这个整数之间(不包括1和这个整数)个位为1的素数(素数之间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。Samp

2020-08-10 16:17:43 101

原创 算法笔记 ----素数 1. 素数的快速判断 2.快速打印素数表

素数的判断:首先理解素数的概念:素数就是除了1和它本身除以任何小于它的数都不会整除的数字,如果可以整除那这个数就是合数,注意: 1既不是素数也不是合数bool isPrime(int a){ if(a<=1) return false; int fin=sqrt(a); for(int i=2;i<=fin;i++) { if(a%i==0) return false; } return true;}打印素数表:一般方法:枚举时间复杂度为O(n^3/2),判

2020-08-10 16:16:07 165

原创 算法笔记随笔:分数的化简,四则运算和输出

#include <stdio.h>#include <math.h>struct Fraction{ int up,down;};int gcd(int a,int b){ return !b?a:gcd(b,a%b);}Fraction myFun(Fraction result)// 分数的化简规范函数 { if(result.down<0) // 负分数 { result.down=-down; result.up=-up; }

2020-08-10 14:41:26 232

原创 codeup 100000589 Least Common Multiple 最大公约数和最小公倍数

求最大公约数和最小公倍数:最大公约数可以利用欧几里得算法(辗转相除法):gcd(a,b) =gcd(b,a%b)这是一个递归条件,现在需要确定递归边界,我们知道0与任何数的大公约数就是这个数本身,所以递归边界就是当b为0时返回a的值,这样gcd函数有两种写法://第一种写法int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}//第二种写法int gcd(int a,int b){ return !b?a:

2020-08-10 10:08:01 202

原创 算法笔记 ---------其他高效算法和技巧学习 随笔

其他高效算法和技巧学习打表:打表就是事先将多种可能的结果预先存储起来,例如找到Q个斐波那契数列的结果,如果计算的话需要执行Q次程序,时间复杂度是O(Q*n),但如果预先将结果存储到数组中,当需要输出结果的时候去数组中找到对应,这样时间复杂度为O(Q+n);活用递推:有些题目直接暴力可能会超时,所以要看测试的数据中是否存在规律,这个规律可能会大大减少程序的时间复杂度,PAT 1040 有几个PAT 就是计算每一位A 之前的P有多少乘以A之后有多少T,来得到最终结果的。随机选择算法:在序列中输

2020-08-08 10:58:43 107

原创 twoPointers 算法思想学习 随笔 排序算法之----------快速排序

twopointers 概述twopointer 是一种算法思想,目的是为了降低时间复杂度,特别是在比较序列中具有某个特性的元素时需要遍历整个序列导致复杂度巨大的情况,利用i与 j 对序列进行(反向,同向扫描)从而降低时间复杂的的思想。下面给出一个经典的问题:从一个序列中找出符合 a[i]+a[j]=m 的 i 和 j;一般思路是用两个循环嵌套 ,遍力序列找出符合条件的情框,但是这样时间复杂度为 O(n^2)当n 大于10的5次方时就无法承受了,int i=0,j=n-1;

2020-08-07 17:57:19 228

Snipaste-1.16.2-x64.zip

快速截屏软件 解压即可使用 Snipaste-1.16.2-x64.zip,

2020-08-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除