网络安全
网络安全 Vmware Workstation 桥接网络配置 image-20200919203643934 打开虚拟网络编辑器,发现没有桥接网络,点设置 image-20200919203722602 让桥接模式解上正确的网卡 image-20200919203838977 然后主机和虚拟机就可以互相ping通了 image-20200919204116816 环境搭建 Kali Linux 镜像下载 https://www.kali.org/downloads/ 安装完虚拟机后,更新一下源 123apt updateapt upgradeapt dist-upgrade 源列表位置 /etc/apt/source.list 设置开机启动软件 12update-rc.d ssh enableupdate-rc.d postgresql enable 重启网络服务 1service networking restart 开启网卡 12ifconfig eth0 upifup eth0 Windows Server 2003 桥接网络的时候,要把自己的网络设...
Javaweb
Javaweb 安装 IDEA, 可以先用 -Ss 搜索intellij 来确定后面的版本号 1sudo pacman -S intellij-idea-ultimate-edition-2020.2.1-1 IDEA 使用技巧 别打开老项目 settings 里面 system settings了里面别勾选 Reopen image-20200906194355077 Ctrl + 鼠标左键可以查看源代码 Alt + Shift + v 新建局部变量 Tomcat 安装 1sudo pacman -S tomcat9 最好要去官网下载, 这样用户有执行权限,pacman 下载的运行要家sudo, 在idea里会报错 启动 可以在zshrc里面加入 12alias tomcat="sudo zsh /usr/share/tomcat9/bin/startup.sh"alias ctomcat="sudo zsh /usr/share/tomcat9/bin/shutdown.sh" 然后可以 sudo tomcat 和 sudo ...
数据结构
前缀和和差分 https://ac.nowcoder.com/acm/contest/19483 普通前缀和 前缀和数组 对于数组 \(A\) 的前缀和数组 \(s\) 是 \[ s[x]=\sum_{i=0}^{x}A[i] \] 递推公式 \[ s[x]=s[x-1]+A[x] \\ s[0]=0 \] 广义前缀和 把求和看成某种操作的累加。 维护dp矩阵 DP转移用矩阵表示,然后可以用前缀和维护 求 \[ dp(l,r) = dp(1,r)-dp(1,l) \] 设初始列向量为 \(\textbf{v}\), 转移矩阵为 \(mat[i]\) 然后 \[ dp(l,r) = mat[r] \cdot mat[r-1] \cdot mat[r-2]...mat[l+1] \cdot \textbf{v} \] 所以我们维护一个左乘矩阵前缀和 \[ sum[i] = mat[i] \cdot mat[i-1] ... mat[2] \cdot mat[1]\\ sum[i]=mat[i] \cdot sum[i-1] \] 维护好之后计算的时候: \[ dp(l,r) = su...
贪心
P2240 部分背包问题 纯 C++11 风格的代码: 123456789101112131415161718192021#include <bits/stdc++.h>using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m; vector<pair<double, pair<int, int> > > coins(n); for (auto &c : coins) { cin >> c.second.first >> c.second.second; c.first = (double)c.second.second/c.second.first; } sort(coins.begin(), coins.end(), greater<...
做题经验与教训
思维CheatSheet 思路 多角度思维 这个题有多少种思路,目前选择一条路。每个思路都要想一点。如果是dp,有多种方程,那每个都要考虑一下。 推导Observation 眼看出来的 基本公式,基于基本公式的Ob 卡住了 你想的题根本不是原问题 中间推导错了 题目读错了 换角度理解问题 转换问题的表示方法。换一种理解方式 常规推导 考虑答案由什么组成(拆分出可以维护的情况) 考虑最简单的几种情况(best case) 考虑状态的转移 什么会产生贡献,哪些会对答案产生贡献 考虑答案的单调性,时空转移 分类讨论 问题可以分为几种情况 贪心 什么构成答案最好(构造一个最好的答案) 计算操作的最大值最小值: 以某种贪心的策略一定可以达到最优,模拟这种策略的步骤 分析最大值 二分/枚举 如给定某个参数,是不是会好做一定 动态规划、递推 考虑问题的子结构 考虑状态是什么,如何转移 换一种更好的状态 简化子结构(去除冗余状态) 通过贪心优化转移,减少转移的数量 用数据结构维护一维度 整理思维 筛选合理的推断和考虑不确定的推断 题目的位置与代码量和思路深度对应...
数学
基础知识 求和符号 \[ \sum_{i=1}^{n}=a_1+a_2+a_3+...+a_n \] 求和符号的性质 结合律 \[ \sum_{i=1}^{n} \sum_{j=1}^{n} a_i b_j = \sum_{j=1}^{n} \sum_{i=1}^{n} a_i b_j \] 分配率 \[ \sum_{i=1}^{n} a_i \cdot k = (\sum_{i=1}^{n}a_i) \cdot k= k\sum_{i=1}^{n}a_i \\ \sum_{i=1}^{n}\sum_{j=1}^{n}a_i b_j = \sum_{i=1}^n (a_i\sum_{j=1}^n b_j) = (\sum_{j=1}^{n}b_j)\cdot(\sum_{i=1}^{n}a_i) = (\sum_{i=1}^{n}a_i)\cdot(\sum_{j=1}^{n}b_j) \] 改变枚举对象 令 \(z=x+y\) \[ \sum_{x=0}^a\sum_{y=0}^b f(x,y) = \sum_{z=0}^{a+b}\sum_{y=0}^zf(z-y,y) \...
Trie
Trie Trie 是一个用树来存储字符串的结构。 基本操作 插入一个字符串 查找一个字符串是否在树中 维护对应字符串的附加信息(如个数之类的) 模板 P2580 于是他错误的点名开始了 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <bits/stdc++.h>using namespace std;const int maxn = 1e4 + 5;const int maxnode = maxn * 50;const int sigma_size = 26;#define c ((ch)-'a')int child[maxnode][sigma_size], val[maxnode];int sz, n;void insert(string s) { int u = 0; // 从根节点 u = 0 开始插入 for (char ch : s) { i...
AtCoder题解
AtCoder Grand Contest 047 AtCoder Grand Contest 047 A. Integer Product 给定 \(n\) 个浮点数,计算有多少个 \((i, j)\) 使得 \(A_{i} \cdot A_{j}\) 是整数 \(2\leq N \leq 200 \ 000\) , $ 0 < A_{i} ^{4}$ , \(A_{i}\) 最多 \(9\) 为小数. 思路 通过题设条件缩小范围, 枚举 由于数据比较大,不能直接暴力做。判断是整数这个条件不太好集体维护。所以要找出题目中的特性,看看有没有机会让范围缩小。最好是可以 先考虑 \(A_{i} \cdot A_{j}\) 什么情况下是整数。发现,对于任意有限小数 \(x\), 可以在乘上 \(10^{n}\) 后肯定会变成整数。所以每个数必然是 \(k\cdot 2^{m}\cdot 5^{n}\) 的形式, 通过乘 \(10^{n}\) 把分母上的 \(2^{m}\cdot 5^{n}\) 约去. 而之前的 \(k\) 不影响答案。所以我们只要考虑 \(2^{m}\cd...
线段树
线段树 线段树是一种用来维护区间性质的数据结构,此篇不讲解基础,而是讲解在算法竞赛中的应用。读者需要至少会写线段树懒标记维护区间求和操作。 目前使用的模板 我的懒标记的定义是: 已经维护好了当前节点,但子节点还没维护好. 普通版本 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950const int maxn = 1e5 + 5;int n, m;typedef long long typec;#define lson (o<<1)#define rson (o<<1|1)#define mid ((l+r)>>1)#define len(x,y) ((y)-(x)+1)typec sumv[maxn*4], addv[maxn*4];typec A[maxn], qans, v;int ql, qr;void build(int o, int l, int r) { addv[o] = 0; ...
CodeForces题解
Educational Codeforces Round 92 (Rated for Div. 2) link A. LCM Problem 构造 给定区间 \([l,r]\) 求 \(2\) 个在里面的数,使得它们的最小公倍数也在区间内,否则输出-1 -1 . 可以知道 \(l, l*2\) 是2个最小的可能组合,只要判断 \(l*2 > r\) 即可. B. Array Walk 贪心 由于可以折返的步数比较少。我们可以枚举折返的步数。当折返的步数固定为 \(j\) 的时候。有2种情况, \(j\) 步都是折返后又回来。这种情况最远走到了 \([1,k-2j]\) \(j-1\) 步是折返后又回来,最后一步是折返后不回来。这种情况的区间是 \([1,k-2(j-1)-1]\) 可以证明:若折返,则必定是在当前区间的最大两个相邻元素间折返。 那么我们用前缀和的方式求出 \([1,i]\) 的和还有最大相邻元素的位置。那么分情况讨论这两种情况的最大值。最后取个更优的解即可 \(O(n)\) 123456789101112131415161718192021222...