自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DIL Voterank

这也是一篇对于voterank的改编,属于改进算法,功能是识别复杂网络中的一系列最有影响的点。本篇论文主要在应用在无向,无权值的图。同时对于有向的或者有权值的图,我们可以使用WVoterank,或者Voterank Plus这在之前也实现过了,再次就不多提了。下面叙述一下我对本篇论文的思考以及疑问。首先,必须先提一下经典voterank,主要认为有三个方面的不合理。1.将所有节点的能力视为相同的,没有区分不同节点能力不同的问题。

2023-08-26 14:33:14 311

原创 PAT (Advanced Level) 甲级 1009 Product of Polynomials

计算两个多项式相乘后的结果。

2023-08-15 19:51:22 137

原创 PAT (Advanced Level) 甲级 1008 Elevator

一个模拟题,上楼,下楼,停留都需要时间,求出花费的总时间。

2023-08-15 19:49:03 139

原创 PAT (Advanced Level) 甲级 1007 Maximum Subsequence Sum

这题求解的是最大连续子序列问题,在动态规划中比较常见,但是在这里,我没有使用动态规划,用的是在线处理这个方法,每次只要是大于0的,那就说明可以继续变大,然后最大值就会在每次的叠加中产生,然后找到最大值后,需要记录那个下标。里面也有好几个易错点。比如他要求首尾的序列要尽可能小,而且输出的是值,并不是坐标,这个就比较坑,如果没看出来,样例都看不懂。同时假如全为0,和0与负数相结合这两种情况还是有区别的,也要着重处理。

2023-08-15 19:45:15 148

原创 PAT (Advanced Level) 甲级 1006 Sign In and Sign Out

简单的结构体排序,算出最早的那个时间和最晚的那个时间。刚开始想的是将所有的时间存储下来,然后排序找到首尾,但是后来发现完全没必要,那样只会徒增时间复杂度和空间复杂度。

2023-08-15 19:37:24 137

原创 PAT (Advanced Level) 甲级 1005 Spell It Right

简单模拟,将给定的字符串的各个位置相加,用字符串的方式输出和。

2023-08-15 19:33:30 89

原创 PAT (Advanced Level) 甲级 1004 Counting Leaves

这个作为一个30的题,感觉也是很简单的。题目大意就是给出每个非叶子节点的所有孩子,然后求出该树的每一层的叶子节点。我处理的思路为先存下每个节点的孩子。然后遍历的时候,寻找出每一层的节点,如果该节点没有孩子了,就说明为叶子节点。这样循环遍历就能求出所有的节点。

2023-08-15 19:30:50 367

原创 PAT (Advanced Level) 甲级 1003 Emergency

对于路径个数的话,我采用的是乘法原则,就是求出到达每个节点的最短路径个数,然后将这些进行相乘,也就是每次找到相同最短的,就加上一遍,具体是用droad实现的。这题是个很经典的问题,求出从C1到C2的最短路,并且要保证,每次经过每一个节点的值总和要最大,并且求出最短路径的个数。比较经典的迪杰斯特拉的变形吧。

2023-08-15 19:25:12 63

原创 PAT (Advanced Level) 甲级 1002 A+B for Polynomials

题目大意就是给两组数据,代表两个多项式,求出多项式相加后的结果。然后需要注意的是输出保留一位小数,数组也只需要开一个就可以了。

2023-08-15 19:17:21 85

原创 PAT (Advanced Level) 甲级1001 A+B Format

本题的题意就是给定两个数字,求出他们相加后的和,并且按照给定的模式进行输出,每隔三个就要输出一个逗号。有一个易错点就是第一个字符或者负号后面不应该是逗号,模拟一下就好。

2023-08-15 19:12:05 70

原创 PTA甲级总合集

PTA甲级题单 题号 标题(题解) 相关算法 做题时间 易错点 1001 A+B Format (20分) 字符串处理 23.8.14 第一个字符不能是逗号 1002 A+B for Polynomials (25分) 字符串中等模拟 23.8.14 输出保留一位有效数字 1003 Emergency (25 分) Dij图最短路 23.8.14 最短路的条数问题 1004 Countin

2023-08-15 18:58:48 184

原创 每日训练2023-8-14

今天训练的是PTA甲级的第一套,也就是最前面的四个题,用时一个半小时,要是正式也能这么顺就好了。第一题是简单控制字符串的输出,第二题也是字符串的控制,第三题是迪杰斯特拉求最短路问题,第四题求的是树的遍历和搜索。整体比较简单,下面就写出自己的写题心得。

2023-08-14 18:45:36 24

原创 BFS打印路径

在BFS或者Dijkstra等算法中,更新pre数组的时机是在队列中插入一个新的节点的时候,记录该节点是从哪个节点转移过来的。在DFS等算法中,更新pre数组的时机是在访问一个新的节点的时候,记录该节点是从哪个节点转移过来的。具体来说,pre数组的定义如下:假设搜索的起点为s,终点为t,pre[i]表示从起点s到i的最短路径中i的前一个节点。具体做法是从终点t开始,依次将pre数组中每个节点的前一个节点入栈,直到回溯到起点s为止,最后依次弹出栈中的元素,即可得到从起点到终点的最短路径。

2023-04-07 17:40:58 135

原创 区间信息维护与查询(ST表)

题目大意为给出一个容量为N的数组,查询Q次,每次打印出给定区间的最大值与最小值之间的差值。第一次写的时候,一直没有过去,出现的问题在于k的取值,因为有的编译器没有log2,而且不支持万能头,导致k的取值出现错误。因为任意两个区间不可能正巧是2的整数幂次,所以可以通过将一个大区间平分成两个小区间,再取最大值,这样虽然中间也有重叠,但是查询两次仍是O1。所以可以通过倍增的思想,只考虑2的整数次幂的位置,快速缩小数据范围。需要理解的是数组的含义,F[i][j]的含义为从i开始,长度为2^j,此区间内最大值。

2023-02-03 10:45:45 218

原创 图的搜索算法 BFS

题目的意思是一个人带着鱼可以走r1步数,猫可以闻r2的步数,现在把他们放在一张图下面,询问猫是否存在有吃到鱼的可能,如果有算出他们最小的步数和。然后看到数据范围比较小,因此,就产生这样一种思路,BFS遍历人,将人所有可能去的地方都给找出来,对于这些地点判断是否能被猫闻到,如果满足上面两个条件,就有可能成为一个合理的答案,在这所有的答案中寻找一个最小的就是答案了。最近在牛客做了几道BFS的题目,应该是重回经典了,相比之前,也有了一些不一样的感悟,现在写下来记下以往的思考经历。

2022-11-19 12:10:30 406

原创 Codeforces Round #829 (Div. 2)

就是我先判断所有的数字总和,假如和为0,那我不需要操作任何数字,每一个数字都是单独的区间,这样就可以满足条件。C1题的意思就是给定一串长度为n的-1,1串,再给定一个规则划分区间,使得区间里面的数字+ -交换操作,得到区间的和,然后所有区间的和是否可以等于0。其实进行简单分析一下就可以得出,假如数字的个数是奇数,那无论怎么配对都不可能成功,直接输出-1,假如个数为偶数,则一定会成功,具体的推理的话,可以分成两两一队,而这一对只有四种可能1 1,1 -1 ,-1 -1 ,-1 1.整体的思路像栈的操作一样。

2022-10-24 11:06:00 503

原创 完美数列 PAT B1030

这也合情合理,毕竟这个有很多的重复计算,然后我就考虑记忆化搜索,首先建立一个一维数组,以n为索引记录每一个值,但是遗憾的是,这样也不对。首先就是那个for循环里面j的初始值,是先假设加上当前得出的最大数组长度,然后里面if的处理,我第一次是写错的,是2,5监测点,我猜测是因为有可能有重复数据的影响。而且n的范围是1e5,跑n^2竟然稍微处理一下也可以过去,而且加上一个排序,下面就写一下自己做题的思路,以及收获的成果。首先,我感觉这题就是一个很简单的dp,动态规划,但是有一个点超时了。...

2022-07-28 18:46:14 1330

原创 STL map的用法

map就是映射,可以将任意基本类型映射到其他任意基本类型。map的几个特性,里面的键值是唯一的,如果有重复就会覆盖前一个。而且如果遍历访问的话,容器里面会自动实现从小到大的排序的。map mp;前面为建key,后面为值value。(1).通过下标,将key作为下标。(2).通过迭代器 map::iterator it;这样就可以得到迭代器it.然后使用it->first 访问键,it->second 访问值。(1......

2022-06-18 11:15:27 704 1

原创 7-8 拯救007

#include<stdio.h>//这个不就是dfs深搜嘛 而且只要四个方向即可 感觉比较简单的//但是他这个每个鳄鱼都可以作为一个落脚点 怎么遍历所有//只有鳄鱼的位置才是起点 那之后呢 没有想的那样简单int N,D;int mp[106][106];//存储位置 将坐标系移动int vis[106][106];//中点变成了50 50int flag = 0;int dp[106][106];//果然加一个记忆化搜索就肯定可以过去 爽 看看快了...

2022-05-16 19:28:13 258

原创 7-7 汉密尔顿回路

#include <stdio.h>//只要有连接就算呗int mp[206][206];int main(){ int N,M; scanf ("%d%d",&N,&M); while(M--) { int a,b; scanf("%d%d",&a,&b); mp[a][b] = 1; mp[b][a] = 1; } int K; s.

2022-05-15 20:44:22 256

原创 Kruskal 算法 最小生成树

#include<bits/stdc++.h>using namespace std;//kruskal算法 int F[1000];int N,M;int Find(int x)//找到x的父节点 { if (x == F[x]) return x;//直接找到就返回 就一个等于号的问题 else {//没找到 就递归的找 而且找的时候 还要不断的赋值 这样下次就方便了 int f = Find(F[x]); F[x] = f; return f; .

2022-05-15 20:02:19 220

原创 最短路 Floyd算法 7-4 哈利·波特的考试

#include<stdio.h>#define INF 0x3fffffffint mp[108][108];int N,M;void Floyd(){ for (int k = 1;k<=N;k++) for (int i = 1;i<=N;i++) for (int j = 1;j<=N;j++) { if(mp[i][j]>mp[i][k]+m.

2022-05-15 16:57:09 307

原创 7-3 旅游规划

一个变化的最短路径,每条路都有两个参数,长度和收费,要求先求出最短的路,如果都是最短,就求出花费最少的路径。再增加一个数组,然后在下面的优化里面稍微修改一下就可以了,大体还是没变的。#include<stdio.h>#define INF 0x3ffffffint N,M,S,D;int mp[505][505];int cost[505][505];int vis[505];int d[505];//距离最短 int c[505];//距离最短的前提下最便宜v...

2022-05-15 14:30:49 535

原创 7-17 笛卡尔树

#include<stdio.h>//这道题不就是建两个树 然后顺带判断一下嘛 而树的结构是固定的//因此只要在结构体里面下功夫就好了typedef struct node{ int k1; int k2; int left; int right;}node;node pon[1008];int K1[1008];int kk = 0;int flag;void inorder(int root)//k1 搜索树{ if(root.

2022-05-14 20:53:23 161

原创 图 最短路 Dijkstra 迪杰斯特拉算法

这个算法适合于解决单源最短路径问题,即规定了一个起点,然后求这个起点到各个点的最短路,感觉和动态规划有点像,而且他这个数组设置的也很有特色,和动态规划也有异曲同工之妙。设置d[i] 表示从起点到i这个位置所花费的最小路程。#include <bits/stdc++.h>using namespace std;#define MAXN 0x3fffffff int mp[500][500];int main(){ int N,M; cin >> N >&g

2022-05-14 15:57:17 626

原创 PTA 列出连通集

很简单的把联通集用DFS,BFS输出,没有什么难度,一遍过,都是基础操作。//不就是DFS BFS 遍历嘛 邻接矩阵存一下 简简单单#include<stdio.h>int mp[20][20];int B[20];int D[20];int N,E;void DFS(int v)//处理当前位置{ if(!D[v]) { printf(" %d",v); D[v]=1; }else return; for (i

2022-05-12 19:28:53 401 1

原创 PTA 7-2 地下迷宫探索

#include<stdio.h>int mp[1009][1009];int vis[1009];int N,M,S;int cnt = 0;int flag =0;void dfs(int s){ if (cnt!=0) printf (" "); cnt=1; printf ("%d",s); for (int i = 1;i<=N;i++) { if (mp[s][i] && !vi...

2022-05-12 19:26:01 854 1

原创 7-1 哥尼斯堡的“七桥问题”

//有几个限制条件 就是一笔画问题//而且起点和终点必须要在同一点 还必须是连通图 这分别用两个数组来解决#include <stdio.h>#include <stdlib.h>int mp[1006][1006];//存储图int vis[1006];int N,M;void dfs(int v)//从v开始遍历{ vis[v]=0; for (int i = 1;i<=N;i++) { if (mp[v][i] .

2022-05-12 15:46:58 315

原创 图 广度优先遍历

int Q[20];int front = -1;int rear = -1;void push(int x){ Q[++rear] = x;}int pop ()//出队且释放{ return Q[++front];}//首先放一个元素 然后把那个元素的所有的邻接也放进去 然后出队首 再放进去队首的所有元素//每个元素只能放队列一次 需要标记void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ){ .

2022-05-12 15:11:53 185

原创 图 邻接矩阵的深度优先遍历

void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ){ //访问当前位置 然后递归寻找 //当前访问的是V这个结点 if (!Visited[V])//判断当前的 { Visit(V); Visited[V] = true; }else return;//不合适就直接退出了 //下面要根据递增顺序 寻找可以遍历的下一个结点 //因.

2022-05-12 13:48:13 370

原创 【163小孩】

#include<bits/stdc++.h>using namespace std ;int main(){ int result=0 ; for(int a=0;a<5;++a) for(int b=0;b<5;++b) for(int c=0;c<5;++c) for(int d=0;d<5;++d) for(int e=0;e<5;++e) for(int f=0;f<5;++f) for(int g=0;g<5;++...

2022-05-08 19:42:16 45

原创 【疫苗小孩】

相当于选择三个数字,然后间隔k的话,会得到最大值,如果小于k,会有损失,求出得到的最大的和,三个数的话,显然遍历中间的数比较好,然后左右肯定是间隔k天最好,再不济也与k的差值尽量小,所以就生成了两个函数,从而问题就好解决了。#include<bits/stdc++.h>using namespace std;long long n,k,w,q;long long su(long long beg,long long now){ return w-abs(abs(beg...

2022-05-08 19:38:49 76

原创 【数位小孩】DFS 爆搜

题目要求很简单,清晰,但是看题目介绍是数位DP,实际上自己没学过,但是听课后,可以不用DP去写,可以一点一点的加,然后其中夹杂着判断,关键就是dfs这个思想,我在一个什么样的基础上面,我要怎么去做,怎么去选择,怎样会结束搜索过程,开始是什么样的,想清楚后,写就会简单多了,dfs里面三个形参,分别表示当前的数字,当前数字的末尾数字,以及当前是否有1,这样dfs就出来了。 #include<bits/stdc++.h>using namespace std;long long ...

2022-05-08 16:57:26 46

原创 【牛客月赛49:禅】dp 思维

比赛的时候不敢写,实际上,这题比较简单,为什么打一个小白月赛还有畏惧呢,就是一个非常简单的一维dp,做题首先要先不要怕,去仔细琢磨,每次都躲避,何时才能出头。#include<bits/stdc++.h>using namespace std;int main(){ long long T;cin >> T; long long a[100005]; long long dp[100005];//从该位置到公主需要的最小战斗力 whi...

2022-05-07 11:15:55 112

原创 【链表的基础操作】

#include <bits/stdc++.h>using namespace std;//链表的一些操作//1.链表的概念 struct node { int data; node *next;}; // 2.链表的分配空间 及其释放 //c语言需要用malloc函数 头文件 stdlib.hint *p = (int *)malloc (sizeof (int));//需要释放内存 free(p);//p本身没有消失,但是他指向了空地址// 3.创建链表n.

2022-05-05 13:58:00 582

原创 【并查集】【PTA,部落】

关键思路就是并查集,是一种维护集合的数据结构,分别由Union,Find组成。int Find(int x)//查找父亲结点 { if (F[x]==x) return x;//找到根结点 并返回 else//未找到 合并 { int f = Find(F[x]); F[x]=f; return f; } }上面就是一个查找函数,而且在查找的过程中增加了剪枝的操作,如果是根节点,就返回,如果不是根节点,就合并当前的结点到根结点。不是单单的搜索操作。下面就是合...

2022-05-05 11:12:04 494

原创 贝伦卡斯泰露 【牛客网】【易错样例分析,通过80%】

#include <bits/stdc++.h>using namespace std;int A[50],B[50],C[50];//前半 后半 和原数列int n;int flag;void dfs(int a,int b,int c)//当前 a,b,c,的数组下标{ if (a>n/2 || b>n/2 || c>n) return;//超范围 if (c==n) {// for (int i ...

2022-05-04 16:25:18 136

原创 动态规划 只需一题让你彻底理解精髓

动态规划又名为记忆化搜索,就是空间换时间,可以让代码更加高效的运行,换句话说就是,可以暴力解出来的东西,都可以用动态规划来简化运算,下面的代码与讲解就默认为你们对动态规划有一定的了解,对深搜DFS,也有运用经验,只是进阶一下,让你更好的理解。关于动态规划的题型,有以下几类适用:1.坐标类 20%2.序列类 20%3.划分类 20%4.区间类 15%5.背包类 10%6.最长序列类 5%7.博弈类 5%8.综合类 5%而动态规划的基本就是无非1.计数(有多少种策略,

2022-04-28 18:32:14 595

原创 快饿死的XzzF[牛客网] 动态规划&&暴力DFS

#include <bits/stdc++.h>using namespace std;int w[50];int i = 1;int ans = 0;//Process exited after 1.564 seconds with return value 0 动态规划 40 的时间 //Process exited after 3.752 seconds with return value 0 暴力dfs //结果都是一致的 void dfs(int x)//放...

2022-04-28 14:41:32 125

原创 整数分解为因子 初级

#include<bits/stdc++.h>using namespace std;int num[120],pp=0;bool b[120];int n,cnt = 0;//3=1+1+1//3=1+2//3=2+1//3=3void gen(int index){ cout << "begin "<<"index = " << index <<endl; if(cnt==n)//总和等于要求的数字 输出.

2022-03-13 10:43:37 43

空空如也

空空如也

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

TA关注的人

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