自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二分上下取整

ok | nofor i < j { mid := int(uint(i+j+1) >> 1) if !judge(mid) { j = mid - 1 } else { i = mid; }}no | okfor i < j { mid := int(uint(i+j) >> 1) if !judge(mid) { i = mid + 1; } else { j = mid; }}

2022-01-05 10:00:57 213

原创 深入理解go语言反射机制,看这一篇就够了

golang的反射机制在计算机学中,反射式编程(英语:reflective programming)或反射(英语:reflection),是指计算机程序(runtime)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。一、go语言的类型系统以及接口​ 在go语言中,反射是在类型系统中构建的,类型包括系统内自带的底层类型和自定义类型比方说:type MyInt intvar i intvar j MyInt上述代码中i是系

2021-11-19 14:34:42 2601

原创 非阻塞模型会造成CPU忙等为什么还要使用非阻塞模型

设想一个场景,用socket连接建立后,使用read来读取传来的所有数据直到对方close掉连接描述符,发来FIN包,如果使用非阻塞模型,写法是这样的while( read(fd, buf, n) != EOF ); 这样需要用where循环不断判断是否读完,读完才能推出循环,这虽然是同步非阻塞NIO模型但是不能发挥真实的威力。真正能发挥NIO威力的是使用IO多路复用 + 同步非阻塞IO比如使用一个阻塞的select/poll/epoll来监听read是否有新的数据到来,此时epoll要设置为水

2021-11-09 13:15:15 326

原创 gdb使用小结

break(b) + 行号 ——打断点run® --------运行到断点,start 跟run类似until + 行号,直接运行到那个位置,适合用于跳出循环print A 打印局部变量(栈)中的数据printf *A 用于取地址A中的数据,可以打印堆中的数据bt 查看栈中函数的调用情况how follow-fork-mode child / panrent适合在fork之前使用,确保进入子进程还是父进程info locals查看所有局部变量info threads 查看所有线程thre

2021-10-22 11:46:43 108

原创 select I/O多路复用的一个web server例子

8080,8989端口可以连接多个客户端,然后在本地创建连接套接字,用select监听这些套接字的读写,同时select也监听着来自绑定了8080和8989两个端口的监听套接字,当有连接来了可以处理,用set维护着已连接套接字。#include <sys/select.h>#include <sys/time.h>#include <netinet/in.h>#include <sys/socket.h>#include <stdio.h&gt

2021-10-09 18:36:21 107

原创 分布式系统学习路线(来自一个群友大佬)

NoSQL for mear mortals 看前几章,了解一下通用术语,一下午就看完了。再配合《设计数据密集型应用》(DDIA)看MIT6.824相关课程因为这个课程需要做Lab,需要学GO语言,建议看《Go程序设计语言》,主要官网的材料跟blog,然后是国外那些大牛的博客。...

2021-04-02 21:24:59 190

原创 [每日一题 day4] 42. 接雨水

思路就是用两个数组分别存一下左边最高的和右边最高的。代码:int maxl[30005];int maxr[30005];class Solution {public: int trap(vector<int>& height) { int n = height.size(); memset(maxl, 0, sizeof(maxl)); memset(maxr, 0, sizeof(maxr)); int

2021-03-19 20:00:32 92

原创 [每日一题 day3] 92. 反转链表 II

https://leetcode-cn.com/problems/reverse-linked-list-ii/反转链表的中间一段。struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), ne

2021-03-18 11:51:32 76

原创 [每日一题 day2]115. 不同的子序列

https://leetcode-cn.com/problems/distinct-subsequences/思路:动态规划思路d[i][j] 代表 s[0,i-1]与t[0, j-1]中匹配最多的子序列个数相当于原来问题的子问题特殊情况是t为空匹配s[0, n-1]的结果都为1,然后进行状态转移递推注意的当相等的情况分为进行匹配和不进行匹配两种情况分别对应状态d[i-1][j-1]与d[i-1][j] #include <iostream>#include <cstri

2021-03-17 10:33:02 85

原创 [ 每日一题day1 ] 200. 岛屿数量

题目链接:https://leetcode-cn.com/problems/number-of-islands/求联通块个数有几种方法,dfs方法:class Solution {private: int n, m; int dir[4][2] = { {0,1},{0,-1}, {1, 0}, {-1,0} };public: // dfs void dfs(vector<vector<char>>& grid, int r, i

2021-03-15 16:08:58 93

原创 1397. 找到所有好字符串 (数位dp+KMP)

题目链接:https://leetcode-cn.com/problems/find-all-good-strings/一句话思路:d[i][j]代表以字典序小于等于字符串s[0,i]长度位i的字符串为前缀,并且匹配到evil第j个字符(匹配过程用next数组进行失配转移)剩下满足题意后缀的种类数。typedef long long ll;const ll mod = 1e9 + 7;c...

2020-04-01 12:30:22 328

原创 8086汇编代码存档

assume cs:codecode segment dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987hstart: mov bx, 0 mov ax, 0 mov cx, 8 s:add ax, cs:[bx] add bx, 2 ...

2019-11-11 09:35:33 151

原创 Mediocre String Problem Gym - 101981M (拓展KMP + PAM回文自动机)

题目大意给定两个字符串,s,t然后询问有多少个三元组满足 s[i~j] + t[1, k]并且i到j的长度大于k使得拼接的字符串是个回文字符串。思路 & 代码将s逆序,得到ss,对其和t求扩展KMP得到ss[i…n-1] 和 t[0…m-1]的最长公共前缀。然后其每个前缀的长度 * 以i结尾后缀回文的数量再求个和就ok#include <bits/stdc++.h&gt...

2019-10-28 19:34:15 188

原创 White Lines CodeForces - 1200D (前缀和,思维)

题目大意给定一个n * n的红黑格子,然后你可以选一个点把 以这个点为左上角的k * k的区域都变为白的,问最多多少个一行或一列都为白。思路前缀和思路,预处理出每一行的前缀和cr[i][j],然后对每一行来说,在算一个每个黑格的贡献,贡献就是如果涂白这行j到 j + k - 1的网格这行变为全白,那么这个格子的贡献就为1(c[i][j] == 1) ,每一列同样的预处理,之后求出每个c[i]...

2019-10-16 21:50:21 169

原创 Black and Red vertices of Tree CodeChef - BLREDSET (树型dp套路题,可惜俺之前8会)

题目大意给定一棵N个结点的树,树上有三种颜色,0,1,2分别代表白,黑,红。问题是有多少个联通块都为白色,且删掉这个联通块至少有一个红黑结点不相连。思路树上有一些关键点为白色且至少有两颗子树分别含有红黑两种结点,我们只需统计出这样的结点有哪些,然后求出其至少包含一个关键点的联通图有几种就行了,但是求”至少包含一个“不好求说实话,可以求出所有以r为根的白色联通图个数,减去以r为根不含有关键点...

2019-10-14 10:18:33 232

原创 Pathwalks CodeForces - 960F (主席树,dp)

题目大意给定一个n个点、m条边的有向图,然后要求一个最长链满足其链的顺序是按给定边的顺序的,其次保证其权值是单调递增。思路对于图中每个点我们可以开辟一个权值线段树,然后代表着以这个点结尾的边的权值之前的最长链长度,这样我们加一个新边长度为c,u->v时,就可以查询结点u的线段树,[1, c - 1] 最大值,然后+1更新c的最大值。然后开辣么多权值线段树肯定会爆内存,不如用个主席树...

2019-10-12 20:54:25 129

原创 Matrix Decompressing UVA - 11082 (网络流,输出每条边流量)

题目大意对于一个R行C列的正整数矩阵(1 <= R, C <= 20),设AiA_iAi​为前i行所有元素之和,BiB_iBi​为前i列所有元素之和。已知R,C和数组A和B,找一个满足条件的矩阵。矩阵中的元素必须是1~20之间的正整数。思路建图方法,设一个超级源点S与超级汇点TO,然后S连每一行容量为这一行的和-1,然后每一列连TO的容量为这一列的和-1,然后每一行连每一列容量...

2019-10-12 16:51:19 159

原创 Tree HDU - 6394(树上分块,倍增)

题目大意给定一个树,每个节点有个能量值代表可以往上跳的节点的个数。然后两种操作一个是查询结点跳出树的步数,一个是修改能量值思路可以对树进行分块。详细看代码注释#include <map>#include <set>#include <cmath>#include <vector>#include <cstdio>#inc...

2019-10-12 15:59:19 158

原创 Marbles CodeForces - 1215E (状压dp)

题目大意给定一个长度为n的序列,每个数的大小为1~20,然后问可以相邻的两个数两两交换,问最小交换多少次可以使得相同的数都聚集在一块。思路可以用一个状态0 <= S <= (1<<20-1) 代表集合中的数都摆放好d(S)代表最小移动次数然后我们有一个状态转移策略,每次往S中丢一个新元素,且每次都把他放到前面,所需的步数可以算出来,cnt[i][j]就是预处理的假...

2019-10-12 15:20:17 157

原创 Relief grain HDU - 5029 (万人皆知的套路题,树链剖分 + 线段树)

题目大意:给定一棵树,然后每次修改是对u -> v路径上的点,增加一个新的权值,然后查询每个节点的权值数量最多的权值,如果有相同最大的,取权值小的。思路为啥说这是道万人皆知的题目呢?因为这是一个十足的套路,如果简化模型,把树换成一个segment,那么对一个区间[L, R]增加一个权值X,那可以用差分打标记的策略,先在L处打一个X的标记,可以用vector存一下,然后在R + 1存一个...

2019-09-24 11:48:02 167

原创 Substring 上海网络赛2019

#include <bits/stdc++.h>using namespace std;typedef unsigned long long ll;const ll p0 = 509;const ll p1 = 521;ll P[35];const int MAXN = 1e5 + 10;char s[MAXN];char t[MAXN];int n;int m;...

2019-09-22 23:24:45 90

原创 关于王爽《汇编语言》第三章实验的一个疑惑

今天刚自学到第三章实验,中有关3.19的一些疑惑,为什么2000:0 f 的值发生改变问题前面说在修改SS的值的时候会引发中断机制,然后也是在这执行完修改ss语句后2000:0 f的值发生改变mov ax, 2000mov ss, ax – > 发生中断,然后,会保护现场mov sp, 10mov ax,3123中断发生时下一条指令的CS:IP中的值就是需要记录值,我们...

2019-09-19 20:30:07 617 2

原创 Linux下安装Dos环境学习汇编

sudo apt-get install dosemu执行上述命令后执行dosemu即可

2019-09-18 15:36:05 296

原创 KMP总结

问题引入长度为n的字符串T,长度为m的模式串P,要从T中找到所有的匹配点i,使得T[i~i+m-1] = P[0~m-1]解决方法朴素的方法一个一个位置检查,每个位置都需要O(m)的复杂度,可能的匹配点可能有O(n-m)个所以复杂度基本上约等于O(nm)KMP方法O(m) 的时间对模式串P进行预处理,然后用O(n)的时间进行匹配。所以时间负载度是O(m + n)。KMP实现要理...

2019-07-23 20:56:12 136

原创 # ACM算法汇总系列 —— 串

Hash 字典树 KMP AC自动机 manacher 后缀数组 EX_KMP SAM(后缀自动机) 回文串自动机

2019-07-23 19:54:21 107

原创 Colorful Tree HDU - 6035(树上的联通分量计数)

题目大意给定一颗树,然后每个结点有一种颜色,然后求所有路径中不同颜色的个数之和。思路可以这样想,先假设所有路径中都包含所有的n种颜色,则可以得出ans = n * n * (n - 1) / 2然后,减去路径中不存在某个颜色的路径条数,可以想象一下一棵树中某个联通分量中没有某个颜色,然后这个联通分量点的个数为cnt那么就需要在ans中减cnt * (cnt - 1) / 2代码#inc...

2019-07-21 16:32:13 157

原创 初识树链剖分

2019-07-13 09:59:27 84

原创 C - DZY Loves Colors(线段树区间修改好题)

http://codeforces.com/contest/444/problem/C#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 100;int n, m;struct Tree { int l, r; ll sum, col, lz;...

2019-06-04 15:02:34 214

原创 A and B and Lecture Rooms CodeForces - 519E(LCA倍增,思维)

题目大意给定一棵树,然后q个询问,距离两个点距离相等点的个数。思路先用LCA求出两个点的最近公共祖先,然后判断距离,如果说两个点距离lca的距离和为奇数那么不存在距离相等的点,如果说距离为偶数,那么又可以分出两种情况,第一种情况是距离相等那么就是所有的点数量去掉包lca包含a,b子树的节点数。距离不相等,那么就是中点位置的子树节点数减去其包含深度大的那个结点子树。代码#include &...

2019-05-15 11:47:16 320

原创 Delivery Bears CodeForces - 653D(二分 + 网络流)

#include <bits/stdc++.h>#include <iomanip>using namespace std;typedef long long ll;const ll maxn = 1020; // 点的数量 const ll inf = 0x3f3f3f3f; ll n, m, x; struct Dinic { st...

2019-05-10 16:07:09 150

原创 消费者生产者阻塞模式C++简略代码

#include <iostream>#include <thread>using namespace std;const int buffer_size = 100;int in = 0, out = 0;int cur = 0;int buffer[buffer_size];void Producer(){ while((in + 1) %...

2019-05-06 16:03:19 236

原创 算法作业——集装箱装载问题(回溯)

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e4 + 10;int n;int c1, c2;int w[maxn];vector<bool> ans;int bestw;int r;void dfs(int cur, int...

2019-04-29 09:40:29 4207

原创 算法作业——Huffman编码

#include <bits/stdc++.h>using namespace std;const int maxn = 1e4 + 10;map<string, string> code; // Huffman 数的结点struct Node { int key; // 权值 string c; // 哪个字符 ...

2019-04-25 17:46:16 255

原创 Reverse It HDU - 6513(组合数学)

https://vjudge.net/problem/HDU-6513题目大意:01矩阵,可以选1个或两个子矩阵进行翻转,问一共可以产生多少种矩阵。思路:容斥原理重复2,1, 3, 4#include <bits/stdc++.h>using namespace std;typedef long long ll;ll n,m;ll C(ll n, ll m...

2019-04-24 09:51:31 253

原创 Monitor HDU - 6514(二维差分,二维前缀和)

https://vjudge.net/problem/HDU-6514#二维差分:// x1,y1是左上角,x2,y2是右下角sum[x1][y1]+=d;sum[x1][y2+1]-=d;sum[x2+1][y1]-=d;sum[x2+1][y2+1]+=d;求前缀和: for(int i = 1; i <= n; i++) for(int j = 1;...

2019-04-23 23:09:34 226

原创 冰水挑战 HDU - 6495(贪心 + DP)

https://vjudge.net/problem/HDU-6495思路:用d[i][j]表示前i个挑战做j个体力值的最大值,类似于一种贪心策略,就是让体力值尽可能的大,这样就保证了会有更多的可能去完成更多的挑战。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int ma...

2019-04-19 08:55:46 184

原创 Another Easy problem(有趣的DP)

链接:https://ac.nowcoder.com/acm/contest/560/J题意:给定长度为n的正整数序列,问最少拿走多少个数可以使得这个序列可以分成和相等的两组。思路:先看数据量,n最大为100,每个数最大为50,其实很容易猜到这是一道DP,but怎么DP?首先我们的目标是相等的两组,在某种递推过程中可以由不相等的转移,所以可以明确的是一个状态转移是两组数的差值,所以我们可...

2019-04-18 00:14:33 140

原创 Investigation LightOJ - 1068(数位DP)

题目大意:找到[L, R] 这个区间每位之和%k==0,并且这个数%k==0的数的个数。思路:数位dp,基本上就是板子题啦,d[pos][digit_mod][all_mod],记录结果,然后,记忆化搜索。代码#include <bits/stdc++.h>using namespace std;int d[11][99][99], a[11];int mod;i...

2019-04-16 21:36:02 140

原创 分块入门——优雅的暴力

分块可以干什么???区间修改,区间求值,还可以求一些线段树不容易达成的目标,比方说是区间大于K的数有多少个。代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6 + 10;int n, m, block, belong[maxn], _left...

2019-04-13 14:08:27 126

原创 Flood Fill(区间DP)CF div2

https://codeforces.com/contest/1114/problem/D题目大意给出一个序列,连续相同的数为一个联通块,一开始选择一个联通块为起始点,然后每次向左或向右把颜色变换成相邻的联通块,最后问通过几次操作可以变成一块连通块。思路先缩点84 5 2 2 1 3 5 5可以缩成64 5 2 1 3 5然后想状态转移(L,R)可以由(L+1, R-1)(L...

2019-04-13 10:35:55 212

空空如也

空空如也

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

TA关注的人

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