自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ioctl操作

《Unix网络编程》十七章,关于网络接口消息获取的函数,该文章摘录了此函数。

2023-01-03 23:28:28 151

转载 C++中检查对象是否存在某个函数

https://blog.csdn.net/freeelinux/article/details/53429009使用C++模板的SFINAE技术

2022-05-09 11:29:12 496

原创 liunx学习笔记

2020年8月22日,开始学习liunx系统的一天,liunx系统的内容有很多,大致可以分为五个阶段:第一个阶段:熟练使用 Linux 命令行第二个阶段:通过系统调用或者 glibc,学会自己进行程序设计第三个阶段:了解 Linux 内核机制第四个阶段:阅读 Linux 内核代码,聚焦核心逻辑和场景第五个阶段:实验定制化 Linux 组件目录第一个阶段:熟练使用 Linux 命令行第二个阶段:通过系统调用或者 glibc,学会自己进行程序设计第三个阶段:了解 Linux 内核机制第四个阶段:阅读

2020-08-22 13:39:30 996

转载 变进制数

全排列哈希我们熟知的数一般都是常进制数,所谓常进制数就是该数的每一位都是常数进制:k进制数上的每一位都逢k进一, 第i位的位权是kik^iki这里要介绍一种变进制数,用来表示字符串的排列状态这种数的第i位逢i进一,第i位的位权是i!i!i!用d[i]来表示一个变进制数第i位上的数字一个n位变进制数的值就为∑i=0n−1d[i]×i!\sum\limits^{n - 1}_{i=0}d[i]×i!i=0∑n−1​d[i]×i!这是一个最大的9位变进制数876543210它对应的十进制

2020-08-17 14:03:16 550 2

原创 差分序列

存在一个序列:A = {a1,a2,a3,…,an};这个序列的差分序列 B = {a1,a2 - a1, a3 - a2,…,an - a(n - 1)}; B[i] = A[i] - A[i - 1];差分序列的第i项等于原序列的第i项 减去 第i-1项。 并且原序列为差分序列的前缀和序列。差分序列的一个最大好处: 当原序列的区间减去或加上一个值后, 差分序列只需O(1)的时间维护这个改变。A 序列在[L,R]这个区间中的元素减少了 K, 那么 B[L] -= K; B[R + 1]

2020-08-02 11:04:35 2089

原创 对顶堆 随笔

对顶推用二个堆实现,能够在nlog(n)的时间复杂度内找出,数组中第 K 小的元素。把堆中的大根堆想成一个上宽下窄的三角形,把小根堆想成一个上窄下宽的三角形,那么对顶堆就可以具体地被想象成一个“陀螺”或者一个“沙漏”,通过这两个堆的上下组合,我们可以把一组数据分别加入到对顶堆中的大根堆和小根堆,以维护我们不同的需要。priority_queue<int,vector<int>, less<int>> up; //大根堆priority_queue<int,

2020-07-28 10:45:18 126

原创 RMQ算法(静态区间查找算法)

含义:RMQ(Range Minimum/Maximum Query),即区间最值查询,对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。RMQ 算法: 静态的线段树, 不支持修改, 只支持查询。算法思想:将数组分为一个一个的静态区间,将这些静态区间的最大值找出来,并保存。设方程f(v,j): 数组第v位开始往后的2^j个位置的最大值。状态转移方程:f(v,j) = max{f(v,j

2020-07-27 21:53:19 216

原创 双指针(leetcode 344、leetcode 345、 leetcode 125、 leetcode 11、 leetcode 141、 leetcode 879)

双指针的基本思想: 使用两个指针, 以不同的方向或不同的速度移动, 尤其在数组类题目中常见, 它也是优化的算法的一种方案。可为了: 对撞双指针、快慢双指针。对撞双指针:一个指针指向头, 一个指针指向尾, 两个指针都向中间移动,相遇就停止。快慢双指针: 一个指针走的快,在前面找符合条件的元素, 一个指针走的慢, 用于将符合条件的元素换到前面来, 通常 [0 ~ 慢指针]的所有元素都是满足条件的元素值。双指针对撞双指针LeetCode - 344. Reverse String(反转字符串)Le

2020-07-19 15:10:37 216

原创 滑动窗口(leetcode 76、567、438、3、1438、239)

字符串类的滑动窗口:一般的题目: 有一个子串与一个主串, 找到这个串的起始地址、这个串是否存在、子串在主串是否存在并找出最小的串。滑动窗口的思路:维护一个窗口,不断滑动,然后更新答案么,那么如何向窗口中添加新元素,如何缩小窗口,在窗口滑动的哪个阶段更新结果呢? 细节问题很烦人; 首先初始化左右窗口的值都是零(窗口就是双指针的另外一种表现形式),根据需要进行窗口的更新;leetcode 76: 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。输入

2020-07-17 13:50:26 196

原创 数据结构——二分图(leetcode 785)

二分图的判断:leetcode 785(AC代码在下面)二分图的定义:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。二分图的判断(该图是否为二分图):链接矩阵表示的图的判断:[染色法 ] :选定图中的某一节点,将此节点染成黑色,将他的邻接点都染成红色;算法结束后,图中任意一节点(已经被染色)

2020-07-16 14:51:17 539

原创 力扣打卡,单词接龙Ⅱ(构图 + BFS + DFS)

原题连接思路: 首先建图,建一个无向图; 将字典里的每一个单词看作一个点,如果两个单词只差一个字母,那么就将这两个节点之间加一条边;使用广度优先搜索,再遍历过程中同时记录可达节点的父节点,便于之后回溯枚举所有的答案。当活结点进行扩展时,要满足一个条件才能成为父节点: 当前距离 + 1 <= 扩展的结点的已有距离(距离是指:扩展的层数)扩展结点加入队列,要满足二个条件:其一,需要满足上面的条件。 其二,这个结点之前没有被访问过;//bfs: 确定最短路径; 找到所有最短路径(永远只压入

2020-06-07 22:52:34 188

原创 最长上升子序列(Longest Increasing Subsequence,LIS)的一种变形,求最长上升子序列有几个

int getLis(){ int a,b[10000]; int cnt = 0; b[0] = 0; for (int i = 0; i < n; i++) { scanf("%d", &a);//一个一个的输入序列 if (b[cnt] <= a) { cnt++; b[cnt] = a; } else { int pos = lower_pound(b, b + cnt, a) - b; b[p

2020-05-29 15:23:05 135

原创 uva 1603 如何生成所有正方形,详细题解;

uva 1603:坑: memset()是以字节为单位进行初始化, 不可以初始化1;#include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<set>#include<bitset>#include<sstream>using namespace std;in

2020-05-22 17:05:30 183

原创 公共子序列

本文内容参考如下:【1】 https://blog.csdn.net/lyy289065406/article/details/78702485;【2】《算法导论》第3版 15.4节最长公共子序列(longest common sequence):即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。和最长公共子串(longest common substring):给定串中任意个连续的字符组成的子序列称为该串的子串。、给一个图再解释一下:2.动态规划求解LCS问题,

2020-05-19 17:59:30 3422

原创 笛卡尔坐标变换: UVA1602

笛卡尔坐标变换的基本知识:坐标标准化:找到最小的x,y值,然后让所有坐标点减去该最小值,得到标准化的坐标平移:将所有坐标标准化之后,就无需再判断平移翻转:关于x轴的翻转(x,y)-> (x,-y); 关于y轴的翻转(x,y) ->(-x,y); 关于y的翻转是x轴翻转后旋转270度得到,反之亦然。旋转:顺时针旋转 90度(x,y) -> (y,-x); 逆时针旋转就是顺时针的补角;模板: 标准化笛卡尔坐标; 判重; 操作(平移,翻转,旋转); 再次标准化笛卡尔坐标;

2020-05-17 22:46:27 1676

原创 UVA 1374,迭代加深搜索模板

用已经有的元素进行加、减搜索,进行定位; 先加、后减;并且总是用“刚刚得到”的那个数,进入下一层: for(int i = d; i >= 0; i--) { a[d + 1] = a[d] + a[i]; //先加,d是刚刚得到数字的下标 if(dfs(d + 1, maxd)) return true; a[d + 1] = a[d] - a[i]; //后加。d是刚刚得到数字的下标 if(dfs(d + 1, ma

2020-05-09 16:49:39 216

原创 uva 1343(bfs+hash+打表)

按照《算法竞赛入门经典》书的思路写的代码, 但很却很遗憾,最终还是WA了, 可以用IDA*写这题, 思路清晰且代码清晰易懂。dfs算法:#include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<set>#include<bitset>using namespace std;st

2020-05-08 22:20:31 183

原创 最大不相交子集 POJ1328

先解释一下最大不相交子集: 设有许多集合[Ai,Bi];最大不相交子集: 所有集合相交,产生的子集,这些产生的子集中的任意两个子集相交都为空集,产生的子集一定是最大的。算法框架:for (int i ;i < n ;i++) { if (子集i的左边 > 子集j的右边 (i > j) ) { 最大不相交子集个数加一; 将j变为i; ...

2020-05-06 16:36:09 2390

原创 埃及分数 + IDA*算法

以下的所有观点并不完全正确,只是个人的主观理解,请读者谨慎阅读:IDA算法:该算法为dfs算法的变种。首先设置一个深度上界maxH,设当前深度h(x),估界函数为g(x),当且仅当 h(x) + g(x) > maxH时表示该分支不可能有解应该剪掉该分支回溯回去。 如果在当前深度上界不能得到解,则增加深度上界的值,直到得到解。为何? 该算法得到解为最优解呢? 我个人观点:IDA算法...

2020-04-20 11:42:04 460

原创 POJ 1101(优先队列)

心得·:bfs设置状态时: 在该节点变为死结点时设置状态。即在出队列的时候设置状态位,不是在入队列的时候设置状态位输入数据有空格:可以使用getline(), 但在使用getline之前有使用cin的话, 需要把输入中间的回车清空:例如:while(cin >> c >> r && r){ string str; ...

2020-04-14 21:20:15 599

原创 POJ 3278 (不要数据结构实现,用双队列实现每层的交替)

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<sstream>#include<queue>using namespace std;int left_,right_; //左边界,右边界int minutes...

2020-04-07 16:53:29 132

原创 POJ 1691 (0MS AC)喷漆机器人问题

/* 心得:1.有多个环境变量要维护是可以用一个容器存储起来, 方便恢复 2.dfs遍历的总体框架是不变的,准确找出每一层之间的练习。*/#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <v...

2020-04-05 13:13:03 282

原创 POJ 3009(简单的dfs回溯遍历搜索)

!!!注意行 与 列 的输入时反过来的然后就是障碍物被撞后会消失;但当回来时要恢复被撞的障碍物。只用了一个简单的剪枝: 当局部最优值大于当前最优值则剪枝#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector&g...

2020-03-30 15:41:39 160

原创 POJ1011 dfs + 花式剪枝 (假设结果成立,反向证明最小值)

#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <cstring>#include <sstream>#incl...

2020-03-26 20:50:16 124

原创 回溯法 0-1背包问题

回溯法的减枝思路:1.找出解空间, 写出解空间的逻辑结构(排列数,子集树)2.通过解空间的逻辑结构,分别考虑每一个分支的剪枝操作。#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include...

2020-03-20 16:54:45 139

原创 大数乘法 未完成

#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <cstring>#include <sstream>#incl...

2020-03-20 15:07:53 66

原创 求平面内最近的点

#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <cstring>#include <sstream>#inc...

2020-03-12 17:36:37 127

原创 POJ 2083

#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <cstring>#include <sstream>#incl...

2020-03-11 13:49:11 235

原创 循环赛日程表

利用分治递归解决。题目:设有n=2^k个运动员,要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表(1)每个选手必须与其他n-1个选手各赛一场(2)每个选手一天只能赛一次(3)循环赛一共进行n-1天#include <cstdio>#include <iostream>#include <algorithm>#include <cma...

2020-03-11 11:29:23 174

原创 棋盘覆盖

#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <cstring>#include <sstream>#incl...

2020-03-10 15:53:51 227

原创 UVA 540 团队队列

队列练习题用多个队列来实现; 一个队列为队号队列(将队伍的编号入队列), 一个队列数组为各个队的队列。//// 不知道为什么在poj上提交就超时, 在uva上就不会超时。#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include &l...

2020-03-09 14:11:29 73

原创 旅行商问题,bfs + 优先队列

全班睡觉的人数是否严格大于清醒的人数?当需要判断 大于人数的一半时, 千万不用除法, 用减法。sleeps > total - sleeps;awakes >= total - awakes;格式控制尽量用 printf();#include <iostream>#include <cstring>#include <stdio.h>...

2020-03-04 22:20:50 546

原创 UVA 1590 IP workNets

没有完全写对, 没考虑一个ip时的情况, 还有许多细节上的错误。但下面的数据可以过。3194.85.160.177194.85.160.183194.85.160.178#include <iostream>#include <cstring>#include <stdio.h>#include <string>#includ...

2020-03-03 12:21:47 62

原创 UVA 1588

很简单的字符串模式匹配, 只需注意一点就是放在下面的可以移动, 放在上面的也可以移动。Sample Input2112112112221211212121212212121212211221122 21212Sample Output10815#include <iostream>#include <cstring>#include <c...

2020-02-26 11:02:01 72

原创 7-14 喊山

思路: 用bfs搜索, 一层一层搜索。因为没有路径,可以看作路径为一, 所以在队列结束的前一层是最远距离,只需记录下最小的编号就好了。#include <iostream>#include <queue>#include <cstring>#include <algorithm>#include <functional>#in...

2020-02-13 19:47:33 384

原创 SPFA

SPFA算法;思想: 逼近 + 松弛 + bfs;用途: 点对点的(现在还不清楚),图中可以有负环路。1,将源点压入队列2,取出队头元素,对该元素的各邻接边进行松弛操作。如果该点没有在队列中,就压入队列3,重复步骤 1.判断是否有负环: 如果任意一点的入队次数超过了顶点数,则说明有负环。int SPFA(int sour, int g[][501]) // sour 源点 ; ...

2020-02-13 18:56:58 1301

原创 7-10 排座位 PTA

思想: 运用并查集与一个二维数组。// 朋友的朋友就是我的朋友,敌人的朋友不一定是我的敌人 这两个点是可以用并查集的。因为在找两个人的关系时,在一个集合类的肯定是朋友,否则就是没关系或敌人, 是否为敌人只需看二维数组是否为-1, -1表示敌人, 0 表示没关系。#include <iostream>#include <cstring>#include <a...

2020-02-12 13:14:24 403

原创 输出GPLT

注意: getpos()的返回值有五种情况,第五种情况我们可能不管。arr[5];arr[getpos()]++;

2020-02-11 17:05:25 140

空空如也

空空如也

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

TA关注的人

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