- 博客(47)
- 收藏
- 关注
原创 routeDone with a webviewId 12 that is not the current page(env: Windows,mp,1.06.2301040; lib: 2.30.0
小程序开发错误
2023-02-24 16:30:24
2083
原创 LeetCode剑指offer——Day1
LeetCode剑指offer——Day1用两个栈实现队列包含min函数的栈用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]]输出:[null,null,3,-1]
2021-09-14 19:53:43
178
原创 leetcode(力扣)刷题1——贪心算法
分发饼干leetcode455假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1] 输出: 1 解释: 你有三个孩子和两块
2021-09-14 18:34:28
281
原创 字符串匹配问题
字符串匹配问题KMP算法BM算法KMP算法KMP算法通常需要一个部分匹配表(Partial Match Table)。用next数组保存部分匹配值,也就是前 i 个字符所组成的子串的真前缀与真后缀相同的最大长度。当发生不匹配时,直接从next数组保存的索引开始匹配,忽略不必要的匹配操作。真前缀真前缀,指字符串首部开始的除了最后一个字符的所有子串。例如"abcde"的真前缀有[a,ab,abc,abcd]真后缀真后缀,指字符串尾部开始的除了第一个字符的所有子串。例如"abcde"的真后缀有[b
2021-09-13 20:41:22
254
原创 DP问题
DP问题主要思路:将大问题分解为小问题,并循环求解。特点:①计数型②求最值③求存在性步骤:①确定状态:最后一步子问题②转移方程③初始条件和边界情况④计算顺序
2021-04-11 15:11:56
64
原创 Educational Codeforces Round 103 (Rated for Div. 2)
题目链接 用到抽屉原理:视频链接题解:#include<bits/stdc++.h>using namespace std;int t,n,k;int main(){ cin >> t; while(t--){ cin >> n >> k; if(k<n) k*= n/k+bool(n%k); int cnt = k/n; cout << cnt + bool(k%n) << endl;
2021-02-08 00:00:25
68
原创 利用费马小定理和快速幂——求组合数取模
快速幂比用power()函数计算所用的时间复杂度低。inline ll qpow(ll a , ll b , ll modd){ //快速幂 (位运算) ll ans = 1 ; while(b){ if(b & 1) ans = ans * a % modd ; a = a * a % modd ; b >>= 1 ; } return ans ;}费马小定理计算组合数,其中p是所取模。ll primeC(ll n, ll m, ll p) {
2021-01-29 18:11:43
142
原创 Codeforces Round #697 (Div. 3)
Codeforces Round #697 (Div. 3)题目链接:https://codeforces.com/contest/1475A题就是个水题。B题判断数n是否能由a个2020和b个2021组成,刚开始没绕过弯,wa了两次,然后突然灵机一现,int c = n/2020;int d = n%2020;只要c>=d,则输出yes,代码:#include<bits/stdc++.h>using namespace std;int t,n;int ma
2021-01-28 23:42:24
86
原创 关于tarjan算法的各种题型
tarjan算法求强连通分量求双连通分量求割点求割边求缩点求强连通分量强连通的定义是:有向图 G 强连通是指,G 中任意两个结点连通。强连通分量(Strongly Connected Components,SCC)的定义是:极大的强连通子图。题目链接:https://www.luogu.com.cn/problem/P2863题解:#include<iostream>#include<cstdio>#include<algorithm>using nam
2021-01-28 21:39:20
115
原创 图的反向建边
P3916 图的遍历思路:这个题目主要就是反向建边。题解://dfs+反向建边 #include<bits/stdc++.h>using namespace std;#define N 100005int m,n,u,v,A[N];vector<int>G[N];//二维数组存储反向边 void dfs(int x,int d){ if(A[x]) return;//被访问过 A[x] = d; for(int i=0;i<G[x].size()
2021-01-27 22:26:58
429
原创 1.24 ——Codeforces Round #611 (Div. 3)
Codeforces Round #611 (Div. 3)题目链接A. Minutes Before the New Year一道水题,主要是拼手速,尽可能简化代码。题解#include<bits/stdc++.h>using namespace std;int main(){ int t; cin >> t; while(t--){ int m,n; cin >> m >> n; cout << (23-m)*
2021-01-26 00:11:46
85
原创 2020吉林省ICPC
The 14th Jilin Provincial Collegiate Programming Contest题目连接:https://codeforces.com/gym/102800Problem A. Chord思路:这个题其实不难,就是把琴键都存入到一个二维数组中,根据输入的琴键,查找其所在位置(即下标),最后计算差值即可。题解#include<bits/stdc++.h>using namespace std;char a[12][5] = {{"C"},{"C#
2021-01-25 23:37:19
667
原创 P6867 [COCI2019-2020#5] Politicari——模拟+找规律
P6867 [COCI2019-2020#5] Politicari题目描述有 n 个人互相批评。另提供矩阵 A。规则如下:第一次,第 1 个人批评第 2 个人。如果第 i−1次为第 u个人批评第 v 个人,那么第 iii 次为第 v 个人批评第 Av,u 个人。求第 kkk 次是谁进行批评(注意:不是被批评)。输入格式第一行:两个正整数,n 和k。以下 n 行:矩阵 A。矩阵的主对角线(就是从左上到右下的那条对角线)全是 0,其他部分由从 1到 n的正整数组成。输出格式
2021-01-22 23:42:39
398
原创 ICPC冬令营(1.20)——数学问题
**A - Birthday Cake —— 直线分割 **思路:通过枚举法,找到合适的解。题解#include<bits/stdc++.h>using namespace std;#define N 205struct Piont{ int x,y;}a[N];int n,sum1,sum2;int main(){ while(~scanf("%d",&n)&&n){ for(int i=1;i<=2*n;i++)
2021-01-21 23:34:01
167
2
原创 ICPC冬令营(1.19)
A - Maya Calendar代码:#include<bits/stdc++.h>using namespace std;char s1[20][10]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};char s2[20][10]={"imix","ik","akbal
2021-01-19 23:52:14
167
原创 ICPC冬令营(1.18)
A - Specialized Four-Digit Numbers题目描述Find and list all four-digit numbers in decimal notation that have theproperty that the sum of its four digits equals the sum of its digitswhen represented in hexadecimal (base 16) notation and also equals thesum
2021-01-18 23:50:27
1127
2
原创 强连通分量
一、定义有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。弱连通图将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。二、算法①Tarjan算法int dfn[N], low[N], dfnc
2021-01-16 23:24:57
230
原创 差分约束系统
差分约束系统一、定义如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v] [1] 。因此,以每个变量xi为结点,对于约束条件xj-xi<=bk,连
2021-01-16 16:54:14
241
原创 二分图匹配——匈牙利算法
匈牙利算法它是二分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。这篇文章讲无权二分图(unweightedbipartite graph)的最大匹配(maximum matching)和完美匹配( perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm)相关知识介绍:二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,即没有边连接组内的点,则这就是一个二分图。准确地说:把一个图的顶
2021-01-14 23:03:21
168
原创 最小生成树与最短路径的区别
区别:①最小生成树能够保证首先是树(对于n个顶点的图只有n-1条边),其次保证任意两个顶点之间都可达,再次保证这棵树的边权值之和为最小,但不能保证任意两点之间是最短路径;最短路径保证从源点S到目地点D的路径最小(有向图中不要求终点能到起点),不保证任意两个顶点都可达;② 一个图如果有负权环…路径长可以无穷小 ,因为可以不断的走这个环降低权值,而最小生成树是有限的,它不是你怎么走的问题,而是生成一个两两都可达的最小权值和的树的问题。③ 最小生成树是用最小代价遍历整个图中所有顶点,所有的权值和最小。而最
2021-01-14 22:02:41
4556
1
原创 最小生成树
最小生成树1、定义①树——每个顶点都在树上;没有闭环。②最小——边上的权值和最小若有n个顶点,则有n-1条边。2、实现算法:①Kruskal(克鲁斯卡尔)算法——直接选择权值最小的边首先,将边的权值由小到大排序;再遍历边的集合,若该边加入后构成环,则继续遍历;否则,将该边加入到最短边的集合中,直到选中n-1条边。 最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示
2021-01-14 16:19:38
162
原创 最短路径问题
最短路径问题系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录最短路径问题系列文章目录1.最短路径介绍最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:①确定起点的最短路径问题即已知起始结点,求最短路径的问题。②确定终点的最短路径问题与确定起点的问题相反,
2021-01-12 20:37:24
4277
原创 P1106 删数问题
P1106 删数问题题目描述键盘输入一个高精度的正整数 N(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的N和 k,寻找一种方案使得剩下的数字组成的新数最小。输入格式n(高精度的正整数 )。k(需要删除的数字个数 )。输出格式最后剩下的最小数。 输入输出样例输入175438 4输出13此题先看看思路:这并不是仅仅删除最大的数这么简单,而需要尽可能删除高位上的数使这个数整体最小,如果这个数从左往右每一
2021-01-11 22:09:30
2221
原创 贪心算法详解
贪心算法1、概念:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。也就是说,不从整体最优上加以考虑,做出的只是在某种意义上的局部最优解 。2、算法思路贪心算法一般按如下步骤进行:①建立数学模型来描述问题 。②把求解的问题分成若干个子问题 。③对每个子问题求解,得到子问题的局部最优解 。④把子问题的解局部最优解合成原
2021-01-10 22:53:10
4897
原创 nth_element()函数用法
STL中的nth_element()函数用法详解一、原函数nth_element(first, nth, last, compare)求[first, last]这个区间中第n大小的元素,如果参数加入了compare函数,就按compare函数的方式比较。二、头文件#include<algorithm>三、作用nth_element仅排序第n个元素(从0开始索引),即将位置n(从0开始)的元素放在第n大的位置,处理完之后,默认排在它前面的元素都不比它大,排在它后面的元素都不比它小
2021-01-09 22:47:48
460
原创 桶排序
桶排序1、桶排序简介桶排序,简单来说就是将待排序序列,按照序列值的大小划分成几个桶,分别对每组进行排序,排完序之后再按照一定的顺序合并所有的桶,即排序完成。2、桶排序的步骤首先,根据待排序序列的大小,设定一个桶值,即划分为多少个桶。遍历待排序序列,将每个元素,按照桶的范围,分别放入不同的桶中。在向桶中添加元素的时候,使用插入排序或者其他排序方法,对该桶中的元素进行排序。当所有元素都放入各自所属的桶中的之后,按照桶的顺序合并所有的桶,排序完成。示例:假定给定的待排序序列为首先,根据待排
2021-01-09 22:31:29
191
原创 堆排序和优先队列
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i
2021-01-09 22:06:18
432
原创 分治算法
分治算法分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。分治法解题的一般步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单的方法解决;(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。应用场景运用分治策略解决的问题一般来说具有以下特点:1、原问题可以分解为多个子问题这些子问题与原
2021-01-09 18:44:30
363
原创 简单实现快速排序
快排1.快排的实现逻辑:先从数列中取出一个数作为基准数(通常取第一个数)。分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。再对左右区间重复第二步,直到各区间只有一个数。2、动态演示快速排序动态演示3、C++代码实现 //双向快速排序 #include<iostream>using namespace std;int n,a[1000001];void qsort(int l,int r)//应用二分思想{ int
2021-01-08 23:25:19
76
原创 vector介绍
vector介绍向量(Vector)是一个封装了动态大小数组的顺序容器(Sequencecontainer)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。常用的用法:1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针6.front 得到数组头的引用7.back 得到数组的最后一个单
2021-01-08 23:04:48
220
转载 拓扑排序
https://blog.csdn.net/qq_40693171/article/details/100536278?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161009566816780262577224%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161009566816780262577224&biz_id=0&
2021-01-08 21:51:37
46
原创 二分答案
二分答案二分答案,就是用二分的方法,在可能的答案区间里找出问题的答案,大多数情况下用于求解满足某种条件下的最大(小)值,前提是答案具有单调性,同时也可以理解为是一种倒推方法(先找答案在判断答案是否可行、有没有更优解)。二分答案的主要思想• 在答案的可能范围(区间)内二分枚举• 并检查所穷举的答案是否符合题意• 将最优性问题(直接求解相对较难)• 转化为可行性问题(答案是否符合题意相对容易)二分答案有两种情况:下图中L,R为当前答案区间,M为中心点,根据二分思想判断M是否符合条件,再移动L或R
2021-01-07 12:02:38
323
原创 memset()用法
memset()函数的用法**void memset(void str, int c, size_t n)复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。参数str – 指向要填充的内存块。c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。n – 要被设置为该值的字符数。返回值该值返回一个指向存储区 str 的指针。这个函数多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffe
2021-01-06 22:16:14
291
转载 最长上升子序列 (LIS)
最长上升子序列 (LIS)1、定义:最长上升子序列(Longest Increasing Subsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。子串和子序列的概念,我们以字符子串和字符子序列为例,理解字符的子串和子序列:(1)字符子串指的是字符串中连续的n个字符,如abcdefg中,ab,cde,fg等都属于它的字串。(2)字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序。如ab
2021-01-06 21:27:51
410
原创 二分查找 + 贪心
SP3943 MDOLLS - Nested Dolls题意翻译迪沃斯是世界上最著名的俄罗斯套娃收藏家:你知道吗?他真的有成千上万的套娃!不同大小的空心木娃娃,最小的娃娃装在第二大的娃娃里,而这个娃娃又装在下一个娃娃里,等等。有一天,他想知道是否有另一种方式来嵌套它们,这样他就能减少套套玩偶的数量?毕竟,那会使他的收藏更加华丽!他打开每个嵌套的娃娃,测量每个娃娃的宽度和高度。当且仅当w1 < w2且h1 < h2时,宽度为w1且高度为h1的娃娃才能与另一个宽度为w2且高度为h的娃娃相匹配。你
2021-01-06 21:06:09
364
原创 sort()函数详解
1、形式:sort(first_pointer,first_pointer+n,cmp)参数解释:第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。第二个参数相对较好理解,即首地址加上数组的长度n(代表尾地址的下一地址)。最后一个参数是比较函数的名称(自定义函数cmp),这个比较函数可以不写,即第三个参数可以缺省,这样sort会默认按数组升序排序。其中,自定义函数cmp:bool cmp(int a,int b){return a<b; //升序排列,如果改为
2021-01-06 20:14:57
2024
原创 map + 思维
P1102 A-B 数对给出一串数以及一个数字 C,要求计算出所有 A−B=C的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格式输入共两行。第一行,两个整数 N,C。第二行,N 个整数,作为要求处理的那串数。输出格式一行,表示该串数中包含的满足 A−B=C的数对的个数。输入输出样例输入4 11 1 2 3输出3思路①将A-B=C转换成A-C=B②将A数组每个元素出现的次数统计起来,用map映射,③最后将A数组每次减一个C,再将A数组扫一遍,将所有映射的次数和加起
2021-01-05 23:16:57
85
原创 字符串find()函数
P1628 合并序列题目描述有 N个单词和字符串 T,按字典序输出以字符串 T 为前缀的所有单词。输入格式输入文件第一行包含一个正整数 N;接下来 N行,每行一个单词,长度不超过 100;最后一行包含字符串 T。输出格式按字典序升序输出答案。输入输出样例输入6nanokikikakuk输出kakikiku题解#include<bits/stdc++.h>using namespace std;#define N 10000
2021-01-05 22:27:55
446
原创 二分查找
二分查找基本框架int binarySearch(int[] nums, int target) { int left = 0, right = ...; while(...) { int mid = (left + right) / 2;//小细节 if (nums[mid] == target) { ... } else if (nums[mid] < target) { left
2021-01-05 21:44:17
153
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人