Command Runner 透彻指南(VSCode)
Command Runner 透彻指南(VSCode)
垃圾code-runner
使用g++编译
在 VSCode 中安装 Command Runner 插件
将 VSCode 的默认终端设为 PowerShell
在 VSCode 设置里的 settings.json 中把下面的代码加进去就行了(环境变量中没有g++就换成绝对路径)。
"command-runner.terminal.autoFocus": true,"command-runner.commands": { "compile-cpp": "cls; cd '${fileDirname}'; echo 'Compiling...'; g++ -g -std=c++14 -O2 '-Wl,--stack=2147483647' '${fileBasenameNoExtension}.cpp' ...
自动取模数板子
用法
字面意思,自动对一个数取模。
其中内置了快速幂qpow(a,b)和求逆元inv(a),其中求逆元使用exgcd实现。
除法使用的是inv(a)实现,自带一个小log,如果卡时间的话请自行处理逆元。
默认对 998244353 取模,如要修改请修改 pmod 变量的值。
使用 modnum name; 来定义一个自动取模数。
可以用 (modnum).val 来获得自动取模数的真实值(long long类型)。
已经重载好了用于 iostream 的 << , >> 流传输运算符, 可以直接使用 cin , cout 输出。
code
namespace modnum_space { typedef long long ll; const ll pmod = 998244353; struct modnum; modnum inv(modnum a); ll exgcd(ll a, ll b, ll &x, ll &y); modnum qpow(modnum a, modnum b, modnu ...
网络流
关于网络流
这个东西吧,博大精深,有的题你看着像dp,或者像膜你题,但是又怎么想都想不出来,最后看算法tag发现这玩意竟然是网络流¿
总之就是很多看似难解、限制很多的题可以建出网络流的模型求解
最大流
网络流的模型可以抽象为水管,有一个水源,n-2个中转站,一个要送去水的目的地,每个站点都有若干个水管与其他站点相连,但是水管有粗细,每秒能通过的最大流量也不一样,求目的地每秒最多接收到多少流量。
其中,水管和中转站就是网,水流就是流,我们就得到了网络流。(上面求的就是源点到汇点的最大流。
给出一张非常经典的图:
这个图很容易看出来最大流走 1->2->4 和 1->3->4 ,最大流为222。
对于程序实现,我们只知道边的最大流量还不行,还得知道现在这条边能再增加多少流量,即剩下的流量,这个剩下的流量就叫做 残量,由边的残量构成的图就叫 残量图,如果残量为000,那么就相当于一条断边。
在残量图上,如果我们从源点开始沿着某一条路径到达了汇点,说明这一条路上的流量还可以增加,我们就把这条路叫做 增广路。
如上图,我们可以从111开始 dfs,假设我们 dfs 到的 ...
数论学习笔记
数论学习笔记
BSGS
普通BSGS
求解 ax≡b(modp)a^x \equiv b \pmod pax≡b(modp) ,其中 a⊥pa \perp pa⊥p 。
方程的解满足 0≤x<p0 \le x < p0≤x<p 。
令 x=A⌈p⌉−Bx = A \lceil \sqrt{p} \rceil - Bx=A⌈p⌉−B ,其中 0≤A,B≤⌈p⌉0 \le A,B \le \lceil \sqrt{p} \rceil0≤A,B≤⌈p⌉ ,所以
aA⌈p⌉≡baB(modp)
a^{A \lceil \sqrt{p} \rceil}
\equiv
ba^B
\pmod{ p }
aA⌈p⌉≡baB(modp)
可以先算出等式右边 baBba^BbaB 的所有取值,将其存到一个 hash 表里。
然后计算 aA⌈p⌉a^{A \lceil \sqrt{p} \rceil}aA⌈p⌉ 并查表寻找是否有相等值,即可得到xxx。
因为 A,B≤pA,B \le \sqrt{p}A,B≤p ,所以时间复杂度就是 O(p)O(\sqrt{p})O(p) 。 ...
矩阵运算板子
用法
声明一个矩阵: matrix a;
支持 + , - , * , % , 下标访问和快速幂.
注意:为了方便debug,在不满足运算法则进行运算时会直接退出程序并输出 Matrix error!
默认矩阵大小为 Xsize , Ysize ,可自行修改
我也写了构造函数,可以用 matrix a(10,10) 来手动规定矩形的长和宽.
默认情况下矩阵内全为0,可以通过下标访问修改矩阵内元素的值.
默认情况下矩阵内元素类型为 int ,可以修改 #define type int 来修改元素类型.
默认情况下矩阵自动对 INT_MAX 取模,你也可以修改这个自动模数,在 const type mod = INT_MAX 处可以修改.
为了debug方便你可以直接 print(matrix) 来输出一个矩阵.
我内部是用一个 vector<vector<type>> 实现的矩阵(二维数组太不灵活了),常数有点大请见谅,但是我找不到更好的写法来实现矩阵了,如果有速度更快的办法可以私信我,我尽量更新( .
code
namespace Matrix{ ...
高精板子
用法
更新版本辣!!!
内置 NTT 实现高精度乘法,支持六路比较运算符和四则运算。(只实现了高精除低精)
乘法是自适应的,如果数字较小的话会直接使用模拟高精乘,较大则使用 NTT 来高精乘。(常数优化)
通过继承 vector<int> 实现,再也不用担心炸空间辣!!
如果包含了 iostream 库,就可以使用 cin/cout 进行输入输出。
如果包含了 cstdio 库,就可以使用 read(a),print(a) 进行输入输出。( getchar()/putchar() 实现)
可以进行负数运算。
必须包含 vector 库,必须使用 c++11 或更高版本。
code
#include <cstdio>#include <vector>#include <iostream>using namespace std;namespace bigint_space { #ifndef _GLIBCXX_VECTOR #error You should include header <vector>! ...