自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 ACM总结(各类排序的实现)

各类排序的实现对于排序这个模块,一直想总结一下,但是确实排序的有太多太多,就借数据结构课上所学来总结一下,感觉以后ACM可以用的上。基本排序分类其中最基础的有直接插入排序,简单选择排序与冒泡排序,不用多说了。希尔排序:先将整个待排序记录序列分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。快速排序:其实是起泡排序的一种改进,它解决了起泡排序中只有相邻元素之间才能交换的问题。它首先确定一个轴值(pivot(它是比较的基准)),将待排序记

2021-12-11 18:58:19 722

原创 ACM总结(STL)

ACM总结(STL)今周总结一下STL的有关内容。因为STL在cf上或是在平常一些竞赛中经常可以被找到,一般以第一,二题的形式出现。而且竞赛中很多常用的数据结构、算法在STL中都有熟练地掌握它们可以极大的简化编程,它可以说是竞赛的信心来源因为,掌握它们一般可以快速的ac第一二(水题)道题。Vector(动态数组)头文件:#include <vector>定义:vector<type>s; //type数据类型,如int,char,strings.push_back(k

2021-12-05 21:05:29 771

原创 ACM(高精度算法(+ - *))

acm每周总结今周还是做题做题做题,另外总结了一点高精度算法。还是加油!#include #include #include #include #include using namespace std;struct Maxnum{int len;int num[100001];};Maxnum a,b,w;char c[100001],d[100001];bool negative;void pd(){negative=((strlen©<strlen(d))||((

2021-11-14 22:02:11 744

原创 O(nlogn)求出最长不上升/上升子序列的长度(二分查找法)/Dilworth定理(最少的下降序列个数就等于整个序列最长上升子序列的长度)P020导弹拦截

之前学过最简单求解方法为dp法,规则为:若a[q]>a[w],dp[q]=max(dp[q],dp[w]+1)时间复杂度为O(n的平方): for(int q=0;q<n;q++){ dp[q]=1; for(int w=0;w<q;w++){ if(a[q]>a[w]){dp[q]=max(dp[q],dp[w]+1);} } max=max(max,dp[q]); }有一种时间复杂度为O(nlogn)的算

2022-03-09 00:53:22 394

原创 二分法——寻找第m小的元素

在ACM题中通常会遇到寻找第m小的元素的问题,但是你会发现单纯用排序的方法(sort(),甚至是快排)总是TL超时,下面有一种最快的方法:需要调用快排中的一次划分:ACM总结(各类排序的实现)通过轴值(pivot)的移动,将待排序记录划分成两部分,左侧记录均小于或等于轴值,右侧记录均大于或等于轴值。调用递归:1)若pivot==m,则轴值处即为要要找的值;2)若pivot>m,则说明要寻找的值在pivot的左边(找左边第m小的元素),对数组(1~pivot-1)进行一次划分;3)若piv

2022-03-09 00:21:23 122

原创 高精度算法模板-(结构体重载运算符实现+-*)简便

相比之前通过函数的形式实现,结构体重载运算符显得更简便,尤其是在主函数运算的时候,形式与平时无异。其中mod为数组中每一位的模,若mod=10,则数组中每一个数对应的就是该数的每一位,则数组的长度len就是该数的位数,该模板采用的是四位压缩的方法,每四位存一个数。(mod的的大小决定运算的快慢和输出的方式)模板如下:#include <iostream>#include <algorithm>#include <cmath>#include <vecto

2022-03-08 23:59:48 311

原创 高精度-四位压缩(结构体重载运算符)+DP(洛谷P1005-方格取数)

洛谷P1005方格取数这是一道典型的dp题且根据题意得行与行之间没有任何的联系,只需找到每一行的最优解相加就得出最终答案。设dp数组为f[maxn][maxn],并将每一行的数据储存在数组a[maxn]中,分析题意dp规则为:f[q][w]=max(f[q-1][w]+pow(2,m-(w-q+1))*a[q-1],f[q][w+1]+pow(2,m-(w-q+1))a[w+1]);但是提交后会发现只能通过60%的数据原因就下面:其中1<=n,m<=80,也就意味着要计算2的80

2022-03-08 23:35:44 880 1

原创 最大公约数*(__gcd())

在c++中__gcd(),原理为欧几里得算法(辗转相除)#include<iostream>#include<algorithm>#include<vector>#include<fstream>#include<cstdio>using namespace std;//__gcd(m,n)的原理:欧几里得算法(辗转相除)int gcd(int m,int n){int maxx=max(m,n),minn=min(m,n);i

2022-02-18 16:21:02 273

原创 洛谷题解(四维dp、寻找两条最大权值和且互不相交的路径)

P1006 [NOIP2008 提高组] 传纸条P1006 [NOIP2008 提高组] 传纸条此题为经典的四维dp问题先将各个同学的权值储存到数组a[][]中,分析题意题中说从小渊到小轩,再从小轩到小渊,其实说白了就是从小渊到小轩传两边但是这两边路径不相交,所以总结为:在数组矩阵中寻找两条权值和最大且互不相交的路径。设动态数组为dp[i][j][k][l]dp[i][j][k][l]代表小渊的纸条传到(i,j)、小轩的纸条传到(k,l)时路径权值和的最大值所以该题的动态方程为:dp[i][

2022-02-14 16:16:29 454

原创 ACM总结(二分法)

二分法二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个有序数组中查找某一元素的算法。STL 的二分查找C++ 标准库中实现了查找首个不小于给定值的元素的函数 std::lower_bound 和查找首个大于给定值的元素的函数 std::upper_bound,二者均定义于头文件 <algorithm> 中。在之前博客中有提到。注意:二者均采用二分实现,所以调

2021-12-19 21:42:05 235

原创 ACM每周总结(upper_bound和lower_bound)

acm每周总结(主要是upper_bound和lower_bound)今周做题时遇到一个排序找中位数的题,做了几次都是超时,感觉很新颖,题目如下:题目描述给出一个长度为N的非负整数序列Ai​,对于所有1 ≤ k ≤ (N + 1) / 21≤k≤(N+1)/2,输出A1​,A1​∼A3​,…,A1​∼A2k−1​的中位数。即前1,3,5,…个数的中位数。输入格式第1行为一个正整数NN,表示了序列长度。第2行包含NN个非负整数A_i (A_i ≤ 10^9)Ai​(Ai​≤109)。输出格式共

2021-11-28 22:07:04 818

原创 ACM(prim 算法)

acm每周总结这周学习了图论,做了一些洛谷上的题,哎。难题不会,简单题不熟啊。写一下prim 算法#include using namespace std;const int MaxSize=9999L;int edge[MaxSize][MaxSize];int vertexNum;int MinEdge(int a[],int n){int minn=0x3f3f3f3f;int num;for(int q=0;q<vertexNum;q++){minn=a[q]<

2021-11-21 22:53:16 597

原创 ACM(洛谷做题总结P1004方格取数)

acm每周总结这周以做题为主,刷了些洛谷上的题,想必那些数学思维的题,最令我印象深刻的是p1004的这一道叫方格取数。一道四维数组的dp题,还略有一点点博弈。#include#include#includeusing namespace std;int a[10][10];int dp[10][10][10][10];int main(){memset(a,0,sizeof(a));memset(dp,0,sizeof(dp));int n;cin>>n;for(i

2021-11-07 22:15:06 212

原创 ACM(洛谷p1002bfs搜索+dp)

acm总结这个星期写了几道洛谷上的题,又重新熟悉了一下,dp和贪心就比如在p1002题中。结合了bfs和dp问题。#include #include #include #include using namespace std;int x1,y1,x2,y2;#define Check(x,y)(x>=0&&x<=x1&&y>=0&&y<=y1)int point[8][2]={{-2,-1},{-1,-2},{1,2

2021-11-01 07:41:17 171

原创 2021-10-24

acm总结又到了一周一度的总结时间,这周学习了并查集以及高精度算法的一些内容,并且注册了洛谷的账号,深受打击。以前感觉比较难的bfs和dfs以及二叉树的内容,在洛谷里边算入门的题,就感觉水平已经很差劲了。再加上今天晚上的考试,就做出来一道。再继续加油吧 !...

2021-10-24 20:49:51 64

原创 2021-10-10

10月10日acm本星期总结这几天学习了二叉树的有关内容,对树的这一方面内容有了初步的了解,但是还是云里雾里的,没有完全搞透,但是好在这个学期学习了数据结构对双链表有所了解。首先谈谈我对二叉树的理解,它其实就是一个双链表,通过左右节点(书上说的是左右儿子)来建立数之间的先后(父子)关系。比如先序后序和中序之间的互相转变。其次,巩固了一下有关dp,贪心算法的知识,以后每星期都会看一下这些基本的算法。确实这个星期也没学多少,准备从明天开始做一下洛谷的题。争取通过做题来积累一下经验,巩固一下知识。..

2021-10-10 22:52:52 73

原创 ACM总结(全排列)

9月27号ACM总结这个星期我学习了小黑书上递归全排列,BFS与DFS的有关内容,感觉自己的进度有点慢,希望可以早日结束黑书的内容。在java老师布置的作业中我运用了全排列,因为java中没有next_permutation函数。public static int num=0;public static void swap(int[] p,int x,int y){int temp;temp=p[x];p[x]=p[y];p[y]=temp;}public static void Per

2021-09-26 19:52:08 71

原创 2021-09-26

9月27号acm总结

2021-09-26 19:40:05 52

原创 2021-09-26

9月26号acm学习总结这个星期主要学习了递归全排列以及BFS与DFS的小黑书内容。在java老师布置的作业中运用了递归全排列(因为java中没有next_permutation( ,)),也算是可以熟练的运用了。public static int num=0;public static void swap(int[] p,int x,int y){int temp;temp=p[x];p[x]=p[y];p[y]=temp;}public static void Perm(int [

2021-09-26 19:37:23 59

原创 2021-09-19

Acm学习总结这篇博客其实是我在考完ICPC,这次考试也是受了一些打击,一些牵扯到算法的题,看到时大脑一片空白,而且英语很薄弱的我,有时连翻译这一关都过不了。在暑假的学习中,我学到了像简单全排列与全排列的递归算法,BFS与DFS搜索,还有并查集的一小部分内容,但是并没有通过做题来消化它,以至于不能很好的去应用,总之就是学过的不知道什么时候去用。既然暑假已经过去且被我荒废了,那就着眼于当下和以后,在这一个阶段的学习中将算法的那一本小黑书从头到尾的好好看一遍,然后就是在洛谷上刷大量的题进行巩固,在休息时间

2021-09-19 20:19:01 51

原创 2021-05-23

递归算法递归算法是一种重要的数学算法,核心是寻找相邻数据间的递推关系,写出递推关系式。在上个星期讲的二分法的运用中就有有关递归的运用,像bool find(long long x)

2021-05-23 22:59:42 58

原创 2021-05-16

acm每周总结(背包)本周主要学习了有关背包问题的内容。其实背包问题本身就是动态规划的一种。其动态dp方程主要为:dp[w]=max(dp[w],dp[w-m[q]]+v[q])背包类型主要有:01背包,完全背包,多重背包。01背包根据名称可知,此类背包题表示每种物品只能被选一次,所以称之为01问题(要么选要么不选)。for(int q=1;q<=m;q++) //v为背包容积;{for(int w=v;w>=b[q];w–) (!注意从大到小的循环次序){ d

2021-05-16 15:57:48 50

原创 2021-04-24

acm每周总结这个星期我们学习了区间dp,通过本周学习我总结一下,这种题型的解题思路。1.区间长度定义2.定左端点(通过左端点定右端点)3.在子区间里寻找分界点并考虑区间dp动态方程,说实话(我认为只要把例子中从区间长度为三推到四,基本上就可以大致推出dp动态规划方程)4.base case(这个也很重要,好的初始设置是成功解题的关键,可以省很多事)原始代码base casedp[][]=for(int len=;len<=n;len++){for(int r=1,l=len;l&

2021-04-24 20:23:03 46

原创 2021-04-17

线性规划2本星期学习了线性规划的其他内容,对其又有了新的认识,简单总结一下。明确问题关键1.重叠子问题 2.状态转移方程(最关键) 3.最优子结构解题基本套路1.明确状态2.明确选择3.明确dp函数和数组的定义4.明确base case(最开始的设置)核心:穷举(但是是高级穷举,意为怎么简单怎么来,尽量减少代码运行时间,精简代码)代码框架初始化base case(感觉可最后考虑)dp[0][0][…]=base;进行状态转移for(状态1以及状态1里的所有值)for(状态2以及

2021-04-17 23:58:12 74

原创 ACM(线性动态规划(线性DP))

线性规划(线性DP)线性动态规划明确问题关键1.重叠子问题 2.状态转移方程(最关键) 3.最优子结构解题基本套路1.明确状态2.明确选择3.明确dp函数和数组的定义4.明确base case(最开始的设置)核心:穷举(但是是高级穷举,意为怎么简单怎么来,尽量减少代码运行时间,精简代码)代码框架初始化 base case(感觉可最后考虑)dp[0][0][…]=base;进行状态转移for(状态1以及状态1里的所有值)for(状态2以及状态2里的所有值)for…寻找最值

2021-04-10 20:43:09 189 2

原创 2021-03-27

每周学习总结今周主要讲了贪心算法,以及动态规划的内容。还是通过做题来积累经验,尤其是周五经历了大型的acm比赛,感受了他们的出题形式,以及佩服于真正acm大神平均3,4秒一道题的神速。感觉就是真正的acm比赛题设计的题型是很广的,而平时做的题型基本都是以专题的形式而出的,就比如最近做的有关贪心算法的题专项性很强。所以以后可以自己从codeforces找一些自己不擅长的题型做做。下面步入正轨,讲讲我本周的收获。集合元素最少覆盖区间这个问题其实是上个星期讲的,主要意思是找一个元素个数最少的集合,使得每个

2021-03-27 21:49:45 60

原创 ACM(贪心算法)

每周学习总结贪心算法本周主要学习了贪心算法,所谓贪心算法就是一种寻找最优解的思想。根据本周的学习以及做题,主要分为以下几种:区间问题此类问题变形种类极其丰富基本问题:选课问题贪心思想:将区间按照结束时间排序,在按照开始时间,从小到大把不重复的课挑出来,及为最多的选课数。变形问题:有雷达问题(将区间变形为圆):找寻可覆盖小船最少的雷达数。也是通过每个小船坐标将雷达所能将其覆盖的圆心范围a,按(x-a)(x-a)+yy<=rr算出,及圆心范围为x-sqrt(rr-yy)<=a&

2021-03-20 18:49:16 155

原创 ACM( 初学(万能头文件与快速输入))

本周学习总结万能头文件#include<bits/stdc++.h>using namespace std;int main(){std::ios::sync_with_stdio(false);…}sort函数头文件#includeint num[4]={4,5,8,1};sort(num,num+4) 默认从小到大排序若想从大到小,,可在主函数前加一个bool函数如:bool cmp(int a,int b){ return a>b;}…sort

2021-03-13 16:53:14 262 1

空空如也

空空如也

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

TA关注的人

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