自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(169)
  • 资源 (1)
  • 收藏
  • 关注

原创 一个简单的socket项目

首先就是有这么一个需求,把程序生成的数据文件内容加密,并且有一个解密程序,解密程序要把加密的数据上传到服务器,并且保存在服务器数据库和服务器磁盘里,在得到服务器验证之后要把数据在本地解密。加解密用的是AES算法。之前用过gRPC实现客户端和服务器的通信,但是加密需要用C++,C++在Windows上写gRPC客户端不太好搞,于是就想到了HTTP协议,在网上找了个开源的http webserver叫mongoose,用它做客户端,服务器用的是python的socket,理由是python比较好操作数据库,但

2021-11-24 22:01:38 1231

原创 侯捷C++设计模式总结

面向对象设计原则依赖倒置原则开放封闭原则单一职责原则里氏替换原则接口隔离原则优先使用对象组合,而不是类继承封装变化点针对接口编程,而不是针对实现编程剩下的以后再补充...

2021-11-19 15:25:37 872

原创 gRPC的最简单使用方法

GRPC欢迎使用Markdown编辑器RPC(Remote procedure call)GRPC配置如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Ma

2021-10-05 11:14:23 575

原创 [图论]树上启发式合并

https://codeforces.com/contest/600/problem/E#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 10, mod = 1e9 + 7; vector<int> g[maxn];int n,ma,a[maxn],cnt[maxn],fa[maxn],dep[maxn],sz[maxn],son[maxn],to

2021-01-14 12:38:02 105

原创 [图论]点分治

洛谷 – P4178 – Treehttps://www.luogu.org/problem/P4178给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int, int> pii;const int maxn = 4e4 + 10, mod = 1e9 + 7, inf = 0x3f3f3

2021-01-14 12:37:05 98

原创 洛谷 – P3379 -【模板】最近公共祖先(树链剖分)

https://www.luogu.org/problem/P3379这次我是用树剖写的LCA,写的比倍增简单而且还快一点。树剖一般指的是重链剖分,首先把所有节点的子节点中最大的标出来,称为重子节点,从节点到重子节点的边叫重边,一段连续的重边称为重链,其他的轻子节点叫轻链,然后把整棵树dfs一下,dfs的时候优先dfs重儿子,这样可以保证同一条重链上的点时间戳连续。这样就把一棵树剖分成了很多条链,那么就可以用数据结构维护这些链,优化时间复杂度。如果询问两个点的LCA,先判断是不是在一条链上,如果不是那

2021-01-14 12:36:27 90

原创 洛谷NOIP提高组训练吊打记录(动态规划)

没错,是我被吊打。洛谷 – P1970 – 花匠(递推dp)https://www.luogu.org/fe/problem/P1970被NOIP普及难度的dp吊打?我咋那么菜?int a[maxn], dp[maxn], dp2[maxn];//dp:波峰,dp2:波谷int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for (int i = 1; i <= n;

2021-01-14 12:34:48 162

原创 HDU – 1087 – Super Jumping! Jumping! Jumping!(最大上升子序列)

https://cn.vjudge.net/contest/310994#problem/E这个dp就很经典了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e3 + 5, mod = 1e9 + 7;int a[maxn], dp[maxn];//dp[i]表示以i结尾的最大值int main(){ ios::sync_with_stdio(0); ci

2021-01-14 12:33:39 105

原创 ABC132 – F – Small Products(dp)

https://atcoder.jp/contests/abc132/tasks/abc132_f这道题还是有点想不清楚,以后再来看。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 5, mod = 1e9 + 7;//dp[i][j]:假设第i位的数是x,则dp[i][j]表示所有使得n / x <= sr[j]的x的答案之和//j的取值的个数是s

2021-01-14 12:33:09 372 1

原创 Comet OJ – Contest #6 – B – 双倍快乐(多进程dp)

https://www.cometoj.com/contest/48/problem/B?problem_id=2278同时进行两个互不干涉的dp并将两个dp的结果合并起来,可以解决很多经典的dp问题。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 5e2 + 5, inf = 0x3f3f3f3f;int a[maxn], dp[maxn][maxn];//dp[i

2021-01-14 12:31:39 78

原创 [图论]分层图最短路

ABC132 – E – Hopscotch Addicthttps://atcoder.jp/contests/abc132/tasks/abc132_e分层图的思想很重要。这题算比较简单的,因为每次都要走三步,我们假设每次只走一步,那么每个点就有三种状态:起点(终点)、走一步到达的点、走两步到达的点,那么我们把图分成三层,每走一步相当于往下一层图走,只有每三步到达的点才是最终停下来的点,连边的时候就连到下一层对应的点,这个方法同时也能很好的处理环的情况,建完图bfs一下就好了。#include&

2021-01-14 12:30:57 111

原创 NOWCODER – 小G砍树(组合数学 + 换根dp)

https://ac.nowcoder.com/acm/problem/22732终于把这题补了。。首先是组合数学的部分,设dp[i]表示以i为根的树的答案(合法排列数),对于根节点为x的树来说,这棵树的所有子节点可以形成((size_x – 1)!)种排列,假设节点y与节点x直接相连,则节点y能形成(size_y!)种排列,但是其中只有dp[y]种是合法的,所以((size_x – 1)!)需要先除掉(size_y!),再乘上dp[y],才是以y为根的子树对dp[x]的真正贡献。dp[i]更新方向为自

2021-01-14 12:29:15 74

原创 [计算几何]极角排序

Amphiphilic Carbon Moleculeshttp://fastvj.rainng.com/contest/304637#problem/A保存个极角排序的板子。极角排序有两种。一种是atan2,速度快,但是有精度误差。另一种是叉积,速度慢但是只用进行整数运算。注意用叉积极角排序的时候,要把上半区和下半区分开来排,而且每个点所在的半区要唯一。struct point{ int x, y, c; double rad;//atan2(y, x) bool ope

2021-01-14 12:28:27 139

原创 [动态规划]高维前缀和

求x二进制下的超集或子集的所有状态之和怎么办?那么就要用到高位前缀和了。它通过类似状压dp的方法,通过从低位到高位依次枚举求出所有包含这个位的状态之和,然后向高位转移。枚举超集:for(int j = 0; j < n; ++j){ for (int i = 0; i < (1 << n); ++i){ if (!(i & (1 << j))) f[i] += f[i | (1 << j)]; }}枚举超集

2021-01-13 21:19:11 327

原创 [字符串]z函数(扩展KMP)

z[i]是s和从i开始的s的后缀的最长公共前缀vector<int> z_function(string s) { int n = (int)s.length(); vector<int> z(n); for (int i = 1, l = 0, r = 0; i < n; ++i) { if (i <= r) z[i] = min(r - i + 1, z[i - l]); while (i + z[i] < n &&

2021-01-13 21:18:00 178

原创 [数论]余数之和(数论分块)

可能会有点用,另外quickpow常数有点大啊,如果用的都是一样的一定要提前计算。http://www.51nod.com/Challenge/Problem.html#!#problemId=1225#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod = 1e9 + 7, mod2 = 998244353, inf = 0x3f3f3f3f;ll quickpow(ll x,

2021-01-13 21:13:36 114 1

原创 [数论]扩展欧拉定理

ab ≡ {ab mod ϕ(m)gcd⁡(a,m) = 1abgcd⁡(a,m) ≠ 1 ∧ b < ϕ(m)ab mod ϕ(m) + ϕ(m)gcd⁡(a,m) ≠ 1 ∧ b ≥ ϕ(m)a^b~\equiv~\begin{cases}a^{b~mod~\phi(m)} &am

2021-01-13 21:13:04 55

原创 [多项式]快速数论变换(NTT)

https://www.luogu.org/problemnew/show/P1919更高更快更强求A * B#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <iomanip>#i

2021-01-13 21:12:36 118

原创 [数据结构]ST表(倍增)

#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int f[100001][40],a,x,LC,n,m,p,len,l,r;int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a); f[i][

2021-01-13 21:12:02 85

原创 [数值方法]数值积分(自适应辛普森法)

以后再来研究为啥是这样,先存个模板https://www.luogu.org/problemnew/show/P4525注意把需要的精度缩小两倍,区间不能过大,有时需要推导或者画图。#include<bits/stdc++.h>using namespace std;typedef long long ll;const double eps=1e-8;double a,b,c,d,L,R;//需要积分的函数double F(double x){ return (c

2021-01-13 21:11:32 159

原创 [HAOI2008]硬币购物(dp预处理 + 容斥原理 + 思维)

https://www.luogu.org/problemnew/show/P1450硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚ci硬币,买si的价值的东西。请问每次有多少种付款方法。先dp预处理出假设每种硬币有无限个买价值为i的东西的硬币的方案数(完全背包),然后就有两个很思维的东西了。首先,因为硬币数量有限,根据容斥原理,只要把无限的方案减去第一种硬币超过限制的方案、减去第二种硬币超过限制的方案,减去第三种硬币超过限制的方案、减去第四种硬

2021-01-13 21:10:51 194

原创 CSU – 1810 – Reverse(计数 + 贡献)

http://fastvj.rainng.com/contest/299737#problem/D把一串数字中的所有区间(有序)分别翻转求和取模,这种题要单独算每位的贡献。对于第i个位置,有i * (i – 1) / 2 + (n – i) * (n – i + 1) / 2个区间不会影响到它,有min(j, n – i + 1)个区间会把j(j < i)翻转到i,有min(i, n - j + 1)个区间会把j(j > i)翻转到i,还有对称轴就在i,有min(i, n – i +

2021-01-13 21:10:10 76

原创 [线性代数]线性基

void insert(long long x) { for (int i = 55; i >= 0; --i){ if (!(x >> i)) continue; if (!p[i]) { p[i] = x; break; } x ^= p[i]; }}查询原集合内任意几个元素 xor 的最大值,就可以用线性基解决。将线性基从高位向低位扫,若 xor 上当前扫到的 a_x 答案变大,就把答案异或上 a_x。为什么能

2021-01-13 21:09:10 118

原创 [数论]快速乘

当你要计算两个数相乘取模并且相乘会爆long long还不能用__int128的时候,就需要用到快速乘了(n, k >= 0)。原理就是把k二进制分解一下就完事了。ll Slow_Mul(ll n, ll k, ll mod){ ll ans = 0; while(k){ if(k & 1) ans = (ans + n) % mod; k >>= 1; n = (n + n) % mod; } return

2021-01-09 09:52:22 68

原创 [多项式]拉格朗日插值法

https://www.zhihu.com/question/58333118二维直角坐标系上n个不同的点可以唯一确定一个n – 1次多项式。假设我们已经知道这些点的坐标,我们构造一个函数(f_i(x))并使这个函数在(x_i)点的值为(y_i),在其他n – 1个点的值为0,容易构造出这个函数:fi(x)=yi⋅∏j=1,j≠inx–xjxi–xjf_i(x) = y_i · \prod_{j = 1, j \neq i}^{n}\frac {x – x_j} {x_i – x_j}fi​(x)=y

2021-01-09 09:49:33 994

原创 [线性代数]高斯消元(Gaussian Elimination)

在算法竞赛中,只要遇到“把一个向量v变成另一个向量v’,并且v’的每一个分量都是v各个分量的线性组合”的情况,就可以考虑用矩阵乘法来描述这个关系。高斯消元可以用来求行列式、线性方程组、异或方程组、逆矩阵、伴随矩阵、矩阵的秩、自由变元个数,是个很强的数学工具。高斯消元求解线性方程组(混合高斯约当消元法)(极速版):https://www.luogu.org/problemnew/show/P3389#include<bits/stdc++.h>using namespace std;t

2021-01-09 09:48:31 1169

原创 [贪心]低买高卖的最大收益(优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=6438http://codeforces.com/contest/867/problem/Equeue没有clear只能while清空#include<bits/stdc++.h>using namespace std;typedef long long ll;priority_queue<int, vector<int>, greater<int> > buy,

2021-01-09 09:47:17 190

原创 洛谷 – 输出逆序数为m且字典序最小的排列(思维)

P1338 末日的传说https://www.luogu.org/problemnew/show/P1338首先,1到n的排列最多有n * (n – 1) / 2个逆序数,我们从小到大考虑每个数放的位置,对于1来说,如果2到n的排列能形成的最大的逆序数大于等于m,那当然是把1放到开头能使字典序最小,然后问题就变成了寻找2到n的一个逆序数为m且字典序最小的排列。否则如果2到n的排列能形成的最大的逆序数小于m,那1就一定不会放在开头,为了尽量使第二小的数2放在开头,这个1一定要产生最大的贡献,那就是放在最后

2021-01-09 09:46:39 260

原创 final – 概率期望

http://codeforces.com/gym/101606#include<stdio.h>double dp[405][405];int main(){ int n,k; scanf("%d%d",&n,&k); //dp[i][j]翻i次j个朝上的概率 //翻i次最多只有min(i, n)个朝上 //当朝上的已经等于n了,再翻就是选一个朝上的翻了 dp[0][0]=1; for (int i=1;i<

2021-01-09 09:45:28 50

原创 NOWCODER – 小A的数学题(数论)

https://ac.nowcoder.com/acm/contest/549/J∑i=1n∑j=1mgcd(i,j)2\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^2i=1∑n​j=1∑m​gcd(i,j)2我第一次化简的时候把d从gcd里提出来了写的贼麻烦。这个数论太简单了,我太蠢了,主要是存个容斥板子。这里有个小结论,可以再优化下时间,还不是很能证明出来。∑i=1n∑j=1n[gcd(i,j)=1]=2⋅∑i=1nϕ(i)–1\sum_{i=1}^{n}\sum_

2021-01-09 09:44:28 77

原创 NOWCODER – 肥猪(dp)

https://ac.nowcoder.com/acm/contest/332/H#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 5, inf = 0x3f3f3f3f;const ll INF = 0x3f3f3f3f3f3f3f3f;int a[2005], b[2005];int main(){ ios::sync_with_stdio(0)

2021-01-09 09:43:48 86 1

原创 NOWCODER – 出题(思维)

https://ac.nowcoder.com/acm/contest/332/A我思维为啥那么渣啊,判断是否有解也挺重要的首先有解的充要条件为6m <= n <= 9m 设有x个6,则剩下的数有解的充要条件为7(m - x) <= n - 6x <= 9(m - x) 解得7m - n <= x <= (9m - n) / 3if (n < 6 * m || n > 9 * m) cout << "jgzjgzjgz" << e

2021-01-09 09:43:07 80

原创 NOWCODER – CSL的校园卡(多进程bfs)

https://ac.nowcoder.com/acm/contest/190/H就是在节点里保存两个人的坐标,然后两个点同时向周围扩展。vis保存了所有情况的状态,暂时不知道有啥用,可能是个回溯的作用?#include<bits/stdc++.h>using namespace std;typedef unsigned long long ll;const int maxn = 2e6 + 5, inf = 0x3f3f3f3f;char a[5][5];//注意多开个空间存0i

2021-01-09 09:42:41 233 1

原创 CF – Light It Up(前缀和)

http://codeforces.com/contest/1000一道前缀和傻逼题调半天#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 5;int a[maxn], dif[maxn];ll pre[2][maxn], suf[2][maxn];int main(){ ios::sync_with_stdio(0); cin.tie(0); c

2021-01-08 13:58:45 232

原创 知识点总结

其他技巧:莫队、前缀和、栈、队列、分块、(st表)、差分、(博弈)、倍增、离散化、哈希、(随机)、(FFT)、(NTT)、(FWT)、位运算、(构造)、二分、三分网络流(模板基本上齐了):字符串:trie、(AC自动机)、KMP、manacher、(SA)、(SAM)动态规划:背包、环形、数位、区间、(插头)、树形、概率、优化搜索:DFS、BFS、迭代加深、双向DFS、剪枝、记忆化搜索、启发式搜索数论:整除、素数、gcd与lcm,扩欧、同余、逆元、CRT、积性函数、线性筛、莫比乌斯反演、杜教筛组

2021-01-08 13:58:14 84

原创 [组合数学]Catalan数

http://www.51nod.com/Challenge/Problem.html#!#problemId=1120写到这题的时候突然恍然大悟Catalan数到底有啥用了。就像出栈序列,要是有元素想出栈,那栈内必须要有元素。再比如,机器人走方格不能走到对角线以下,那就要求往右走的要恒大于等于往下走的。 就像出栈序列,入栈的总个数一定要恒大于等于出栈的总个数。OEIS: Catalan numbers: C(n) = binomial(2n, n) / (n + 1) = (2n)! / (n! (n

2021-01-08 13:57:38 116

原创 [数论]Lucas定理

卢卡斯定理一行代码搞定,是用来求大组合数取小模的注意:不要把全局变量p覆盖了,覆盖就炸了。还有,0的阶乘等于1啊,fac[0]=1啊,别忘了。https://www.luogu.org/problemnew/show/P3807#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 5;int p;ll fac[maxn];ll quickpow(ll x,

2021-01-08 13:56:45 83

原创 HDU – 6465 – 水题(线性变换)

http://acm.hdu.edu.cn/showproblem.php?pid=6465线性映射( linear mapping)是从一个向量空间V到另一个向量空间W的映射且保持加法运算和数量乘法运算,而线性变换(linear transformation)是线性空间V到其自身的线性映射。最为常用的几何变换都是线性变换,这包括旋转、缩放、切变、反射以及正投影。在二维空间中,线性变换可以用 2×2 的变换矩阵表示。首先把三个点转换成以第一个点为起点的两个向量,然后就能得到四个方程的方程组,用来求出变

2021-01-08 13:56:15 128

原创 [思维]数字1到n的字典序第k小

存个很强的模板,貌似已经快到(O(logn))了ll n, k, cnt = 1; scanf("%lld %lld", &n, &k); k--; while(k){ ll st = 0, head = cnt, tail = cnt + 1; while(head <= n){ st += min(n + 1, tail) - head;

2021-01-08 13:55:36 191

原创 [组合数学]组合数有关的公式及常用求和

O(logn)求组合数fac[maxn] = {1, 1, 2};ll C(int n, int m){return (fac[n] * quickpow((fac[m] * fac[n - m]) % mod, mod - 2)) % mod;}for (int i = 3; i < maxn; ++i) fac[i] = (i * fac[i - 1]) % mod;O(n^2)递推求组合数for(int i = 0; i < maxn; ++i){ CC[i][0] =

2021-01-08 13:55:00 1969

Microsoft VC++可再发行组件包(Microsoft Visual C++ Redistributable)

最新版的X64体系结构(ARM64也可用)的Visual Studio 2015、2017、2019 和 2022的运行时库,简单的来说就是提示缺少msvcp140.dll、concrt140.dll、vcomp140.dll、vcruntime140.dll之类的VC++系统运行时库就可以安装这个解决。 Visual C++ 可再发行程序包安装 Microsoft C 和 C++ (MSVC) 运行时库。 使用 Microsoft C 和 C++ 工具生成的许多应用程序都需要这些库。 如果应用使用这些库,则必须在安装应用之前在目标系统上安装Microsoft Visual C++可再发行组件包。 可再发行组件包体系结构必须与应用的目标体系结构匹配。 可再发行组件版本必须至少与用于生成应用的MSVC生成工具集一样。 建议使用可用于Visual Studio版本的最新可再发行组件。

2022-07-19

空空如也

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

TA关注的人

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