自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021-02-06

01背包题目链接有 NN 件物品和一个容量是 VV 的背包。每件物品只能使用一次。第 ii 件物品的体积是 vivi,价值是 wiwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品数量和背包容积。接下来有 NN 行,每行两个整数 vi,wivi,wi,用空格隔开,分别表示第 ii 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<

2021-02-06 09:26:39 165

原创 2021-02-05

一般哈希 —— 模拟散列表(1) 拉链法 int h[N], e[N], ne[N], idx; // 向哈希表中插入一个数 void insert(int x) { int k = (x % N + N) % N; e[idx] = x; ne[idx] = h[k]; h[k] = idx ++ ; } // 在哈希表中查询某个数是否存在 bool find(int x) {

2021-02-05 20:49:14 83

原创 2021-02-04

图论最短路朴素dijkstra解决非负权图的单源最短路问题,适合稠密图,用邻接矩阵存储,时间复杂度o(n ^ 2)算法思想算法流程初始时把其他点到起点1的距离赋值为INF,dist[1] = 0;每次找到不在集合s中的点到起点1的最短距离的点t,把t加入到集合s中去用t更新其他不在集合s中的点的距离重复2,3步骤n - 1次代码int g[N][N]; // 存储每条边int dist[N]; // 存储1号点到每个点的最短距离bool st[N]; // 存储每个点的最短

2021-02-04 23:01:52 93

原创 2021-02-03

分解质因数法求组合数当我们需要求出组合数的真实值,而非对某个数的余数时,分解质因数的方式比较好用:1. 筛法求出范围内的所有质数2. 通过 C(a, b) = a! / b! / (a - b)! 这个公式求出每个质因子的次数。 n! 中p的次数是 n / p + n / p^2 + n / p^3 + …3. 用高精度乘法将所有质因子相乘int primes[N], cnt; // 存储所有质数int sum[N]; // 存储每个质数的次数bool st[N]; /

2021-02-03 22:34:40 117

原创 2021-02-02

Nim游戏最普遍的定义:有若干堆石子,每堆石子的数量都是有限的,每次每人进行一次移动。合法的移动要求:“选择一堆石子并拿走若干颗,且不能不拿”。当轮到某个人时所有的石子堆都已经被拿空了,则判为此人负,因为他此刻无法进行任何合法的移动。为了方便阐述,以下列模型为例用(a, b, c)表示这三堆物品各自的数目。(1) 显然(0, 0, 0)是P局势,即为必败态,此时先手无可取的物品,必败。(2) 而对于(n, n, 0)的局势,只要后手拿走和先手一样多的物品,最后必会形成局势(1):(0, 0, 0)

2021-02-02 23:37:57 110

原创 2021-02-01

二叉树建树(按照二叉树的先序遍历创建二叉树)根据先序遍历的规则(根左右),依次创建即可,递归创建比较简单,就写递归版的吧/*递归创建*/void CreatBiTree(bitree& bt)//按先序遍历创建二叉链表{ //根据输入的字符串建立二叉树bt的二叉链表,‘#’表示虚节点 char ch; ch = getchar(); if (ch == '\n') return; if (ch == '#') bt = NULL; else

2021-02-01 21:35:18 67

原创 2021-01-31

巴什博奕只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。题目描述长达数日的春日祭终于告一段落,作为巫女的朝野芳乃在打扫完神社本决定好好享受一下久违的宁静。然而守护了神刀数百年的丛雨难耐寂寞,希望芳乃能陪她一起玩扑克消解愁闷。芳乃并不擅长市井的游戏,所以总是输多赢少。而昨日被芳乃的神乐舞深深吸引,以致一早就前来建实神社希望能再睹芳华的你碰巧听见了此事。尽管不知道为什么美丽的巫女要自言自语地为玩扑克而苦恼,但你毅然决然地毛遂自荐,希望能为芳乃一解眉间愁。芳

2021-01-31 21:23:03 279 1

原创 2021-01-30

堆—— 模板题 AcWing 838. 堆排序, AcWing 839. 模拟堆// h[N]存储堆中的值, h[1]是堆顶,x的左儿子是2x, 右儿子是2x + 1// ph[k]存储第k个插入的点在堆中的位置// hp[k]存储堆中下标是k的点是第几个插入的int h[N], ph[N], hp[N], size;// 交换两个点,及其映射关系void heap_swap(int a, int b){ swap(ph[hp[a]],ph[hp[b]]); swap(hp

2021-01-30 21:19:06 76

原创 2021-01-29

**【模板】并查集**题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入输出格式输入格式:第一行包含两个整数N、M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数Zi、Xi、Yi当Zi=1时,将Xi与Yi所在的集合合并当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N输出格式:如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N输入输出样例输入样例#1: 复制4 72 1 21 1 22 1 21 3

2021-01-29 20:45:03 81

原创 2021-01-28

并查集在一些有N个元素的集合问题中,我们通常是在开始让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。然而可以知道,这样空间时间复杂度极高,无法通过题目的时限,这个时候,就可以用到并查集来解答。并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。初始化初始化很简单,将每个点所在集合初始化为它自己。如有n个点,就将数组fa[i]=ivoid init(){for(int i=1;i<=n;i++){fa[i]

2021-01-28 21:10:28 108

原创 2021-01-27

二叉树的基本实现顺序存储结构/* 二叉树的顺序存储表示 */ #define MAX_TREE_SIZE 100 /* 二叉树的最大节点数 */ typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0号单元存储根节点 */ typedef struct { int level,order; /* 即节点的层(按[满二叉树]计算) */ }position;链式存储结构/* 二叉树的二叉联表存储表示 */ typedef struct Bi

2021-01-27 21:24:03 76

原创 2021-01-26

hash表散列hash散列函数选择 h(x) = x mod k 时拉链法:k一般选择质数较好开放寻址法:散列表长度一般开数据范围的2~3倍,保证查询时不会因表被装满导致死循环开放寻址法#include <iostream>#include <cstring>using namespace std;const int N = 2e5 + 3, null = 0x3f3f3f3f;int h[N], n, x;char op;int find(int x)

2021-01-26 21:07:45 85

原创 2021-01-25

基本数据结构(三)Trie树int son[N][26], cnt[N], idx;string s;void insert(string s) { int p = 0; // 起始位置,不代表任何字符 for (int i = 0; i < s.size(); i ++ ) { int u = s[i] - 'a'; if (!son[p][u]) son[p][u] = ++ idx; // 插入操作中,不存在则创建结点 p

2021-01-25 21:49:03 80

原创 2021-01-24(数构2)

基本数据结构(二)单调栈int a[N], n;stack<int> stk;int main() { int n; cin >> n; for (int i = 0; i < n; i ++ ) cin >> a[i]; for (int i = 0; i < n; i ++ ) { // 先入栈的不小于当前值的元素在之后一定不会被访问到,至少只会访问较小的当前元素 while (stk.si

2021-01-24 20:51:52 86

原创 2021-01-23(数构1)

基本数据结构(一)栈特性:Stack,先进先出的数据结构,一般采用数组模拟。应用:普通栈的模拟(表达式计算、模拟)、单调栈(优化DPDP、模拟)、dfsdfs模拟栈(虚树的构建)等。队列特性:Queue,先进后出的数据结构,一般采用数组模拟。应用:普通队列的模拟(模拟、广搜)、单调队列(优化DPDP、模拟)等。链表与邻接表特性:储存位置不连续,可在任意位置删除或插入元素的数据结构,但只能按顺序访问;一般采用数组模拟。对于邻接表,实质上也是链表,相当于就是把多个链表接到一个数组head上,从h

2021-01-23 20:38:15 99

原创 2021-01-22(set函数)

set函数insert() 插入erase() 删除#include<iostream>#include<vector>#include<set>using namespace std;int main(){ set<int> s; int n[]={1,1,2,7,9,6,6,8,8}; vector<int> v(n,n+9); s.insert(v.begin(),v.

2021-01-22 19:00:12 111

原创 2021-01-21(map函数)

map函数begin() 返回指向map头部的迭代器clear() 删除所有元素count() 返回指定元素出现的次数empty() 如果map为空则返回trueend() 返回指向map末尾的迭代器equal_range() 返回特殊条目的迭代器对erase() 删除一个元素find() 查找一个元素get_allocator() 返回map的配置器insert()

2021-01-21 22:04:34 107

原创 2021-01-20(queue函数)

queue函数头文件:#include<queue>还要加上using namespace std;back() 返回最后一个元素empty() 如果队列空则返回真front() 返回第一个元素pop() 删除第一个元素push() 在末尾加入一个元素size() 返回队列中元素的个数#include<iostream>#include<queue>#include<algorithm>using namespace std;int m

2021-01-20 20:33:51 78

原创 2021-01-19(stack函数)

stack函数头文件:#include<stack>还要加上using namespace std;empty() 堆栈为空则返回真pop() 移除栈顶元素push() 在栈顶增加元素size() 返回栈中元素数目top() 返回栈顶元素Sample Input3olleh !dlrowm’I morf .udhI ekil .mcaSample Outputhello world!I’m from hdu.I like acm.#include<stdio

2021-01-19 22:19:45 318

原创 2021-01-18(vector函数)

vector函数头文件:#include<vector>还要加上using namespace std;1.push_back 在数组的最后添加一个数据2.pop_back 去掉数组的最后一个数据3.at 得到编号位置的数据4.begin 得到数组头的指针5.end 得到数组的最后一个单元+1的指针6.front 得到数组头的引用7.back 得到数组的最后一个

2021-01-18 22:46:41 91

原创 2021-01-17(unique函数)

unique函数unique函数的作用,就是提取非重复值。基础的用法非常简单。比如我们要提取数组中的非重复值,公式如下:unique(a,a+n)头文件:#include <algorithm>

2021-01-17 23:01:24 366

原创 2021-01-16

快速幂取模算法求x的y次幂模z的结果:(x ^ y) % z·x、y、z都是整数·z ≠ 0, y ≥ 0·x、y的绝对值可能很大,比如(1234 ^ 4567) % 30由于x、y的绝对值可能很大,x ^ y的结果可能会溢出。所以先求x ^ y,再对z取模,显然是不现实的。这里要借助模运算的一条运算规则(a * b) % p = ((a % p) * (b % p)) % p以下是我根据学习视频所写的代码#include<stdio.h>int p(long long x,

2021-01-16 19:54:18 61

原创 2021-01-15

桶排序桶排序的思想就是把区间[0,1)划分成n个相同大小的子区间,或称桶,然后将n个输入数分布到各个桶中去。因为输入数均匀分布在[0,1)上,所以一般不会有很多数落在 一个桶中的情况。为得到结果,先对各个桶中的数进行排序,然后按次序把各桶中的元素列 出来即可。  在桶排序算法的代码中,假设输入是个含n个元素的数组A,且每个元素满足0≤ A[i]<1。另外还需要一个辅助数组B[O…n-1]来存放链表实现的桶,并假设可以用某种机制来维护这些表。  桶排序的算法如下(伪代码表示),其中floor(x)

2021-01-15 21:06:41 61

原创 2021-01-14

快速排序算法快速排序是指通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数据变成有序序列。以下是我看视频学习模仿写的代码#include<stdio.h>void sort(int a[],int l,int r);int main(){ int i,a[10]; for(i=0;i<10;i++) scanf("%d",&amp

2021-01-14 21:12:53 154

原创 2021-01-13

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。贪婪算法可解决的问题通常大部分都有如下的特性(看着还可以):⑴ 有一个以最优方式来解决的问题。为了构造问题的解决方案,有一个候选的对象的集合。⑵ 随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考

2021-01-13 22:44:13 124

原创 2021-01-12

(每日心得)今天,早上在哔哩哔哩网站上看数据结构的学习视频,进一步学习数据结构的相关知识;下午在牛客网上进行了刷题训练,其中跳台阶运用到了斐波那契数列:跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。输入1输出1示例2输入4输出5#include<stdio.h>int Fibonacci(int n);int main(){ int n; scanf("%d",&n

2021-01-13 09:57:47 51

原创 2021-01-11

(每日心得)今天,早上在算法冬令营的直播课上学习,对数组有了进一步的了解,尤其是对多维数组有了更进一步的认识,学习到了下面这种简便方法实现对二维数组的输出:for(i=0;i<5*5; ++i) {printf("%3d",((char *)array)[i]);if((i+1)%5 == 0)printf("\n");}下午在做牛客网上的题质数因子时用减少循环次数的方法解决了超时问题质数因子功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因

2021-01-11 22:26:21 116

原创 2021-01-10

(每日心得)今天,早上在哔哩哔哩网站上看数据结构的学习视频,进一步学习数据结构的相关知识;下午在牛客网上进行了刷题训练,晚上做算法冬令营的题目尤其是以下题目的解题方法印象深刻Input4abbaacacbccddaafzzzzzzzzzzOutputabacacbcdafzzzzzz#include<stdio.h>#include<string.h>int main(){char a[100],b[100];int i,n,k,t;scanf(

2021-01-10 23:08:29 89

原创 2021-01-09

(每日心得)今天,早上在算法冬令营的直播课上学习,对内存和指针有了进一步的了解,知道了内存分为栈区、静态区、堆区、代码区等相关知识进一步学习数据结构的相关知识,了解到单链表及其插入删除;下午在洛谷上进行了刷题训练,晚上做算法冬令营的题目从下题解题方法学习到了不用快排也能通过循环解决...

2021-01-09 22:28:35 119

原创 2021-01-08

(每日心得)今天,早上在哔哩哔哩网站上看数据结构的学习视频,进一步学习数据结构的相关知识,了解到单链表及其插入删除;下午在洛谷上进行了刷题训练,晚上做算法冬令营的题目从下题解题方法学习到了不用快排也能通过循环解决sort给你n个整数,请按从大到小的顺序输出其中前m大的数Input每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。Output对每组测试数据按从大到小的顺序输出前m大的数

2021-01-08 23:09:16 183

原创 2021-01-07

(每日心得)今天,早上在哔哩哔哩网站上看数据结构的学习视频,进一步学习数据结构的相关知识,了解到了顺序表的相关概念和知识;下午在洛谷上进行了刷题训练,在做P1296 奶牛的耳语的时候首先运用了冒泡排序加循环检索解题,但是发现在随着数增大的同时运算时间增加的更快导致超时,后来运用快排解决了问题以下是此题算法:#include<bits/stdc++.h>using namespace std;int main() {int n,a[1000001],m,ans;scanf("%d%d"

2021-01-07 21:53:18 93

原创 2021-01-06

(每日心得)今天,早上在哔哩哔哩网站上看数据结构的学习视频,进一步学习数据结构的相关知识,了解到了线性表的相关概念和知识;下午在洛谷上进行了刷题训练,尤其是P1146 硬币翻转的解题思路令我印象深刻以下是此题算法:#include<stdio.h>using namespace std;int n,i,j,k,a[110];int main(){scanf("%d",&n);k=1;printf("%d\n",n);for(i=1;i<=n;i++,k++,pu

2021-01-06 23:06:42 55

原创 2021-01-05

(每日心得)今天,早上在哔哩哔哩网站上看数据结构的学习视频,进一步学习数据结构的相关知识,了解到了算法的时间复杂度和空间复杂度的概念和计算方法;下午在洛谷上进行了刷题训练,在做 P1059 [NOIP2006 普及组] 明明的随机数 这道题时了解到了桶排列,以下是此题算法:#includeusing namespace std;int main(){int n,x;cin>>n;int sum(0),bus[1002]={0};for(int i=1;i<=n;i++){

2021-01-05 22:18:14 81

原创 2021-01-04

每日心得欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入今天,早上通过看网络上数据结构的学习视频对数据结构的概念有了更深层次的认识,下午在洛谷上进行了刷题训练,对高精度数据的处理更加熟练,还有

2021-01-04 22:53:30 124 1

空空如也

空空如也

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

TA关注的人

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