HDK Fileheader Library 2.0.2
HDK Fileheader Download Page
balanced_tree.h
hdk::balanced_tree::splay
可重 splay 平衡树
接口成员
tree *operator[](int)
返回特定节点信息的引用
传入值为节点编号
int getroot(void)
返回根节点编号
void clear(void)
清空平衡树
void insert(int)
插入元素值
int findnum(int)
查找给定排名的元素值
int findrank(int)
查找给定元素的排名
该行为在传入不存在的元素时的行为类似 lower_bound
void remove(int)
删除一个元素值
int findpre(int)
查找给定元素的前驱
int findnext(int)
查找给定元素的后继
拓展成员
struct tree
节点
成员有:w
(节点权值),cnt
(节点重复数量),size
(节点子树大小),fa
(节点父亲),son[0]
(节点左儿子),son[1]
(节点右儿子)
bool judgeson(int)
判断给定节点是其父亲的左儿子还是右儿子
会对无父亲节点返回 \(0\)
void update(int)
更新节点信息
void rotate(int)
旋转节点
void sply(int)
将特定节点旋转到根节点
int findpre(void)
查找根节点的前驱节点
int findnext(void)
查找根节点的后继节点
tree* get(int)
形如 operator[]
hdk::balanced_tree::treap
可重 treap 平衡树
接口成员
int getroot(void)
返回根结点编号
int size(void)
返回平衡树大小
void insert(int)
插入元素值
void remove(int)
删除元素值
int findpre(int)
查找给定元素的前驱
int findnext(int)
查找给定元素的后继
int findrank(int)
查找给定元素的排名
int findnum(int)
查找给定排名处的元素
拓展成员
struct tree
节点信息
包含 w
(节点权值),data
(节点堆权值),size
(节点子树大小),cnt
(节点重复数量),son[0]
(节点左儿子),son[1]
(节点右儿子)
tree* operator[](int)
返回特定的节点信息
void update(int)
更新节点信息
int newnode(int)
对给定权值创建一个新节点,返回新结点编号
tree* get(int)
形如 operator []
void rotate(int &id,int isright)
对传入节点旋转
isright=0 时进行左旋,否则右旋
void insert(int &id,int x)
插入节点(传入根结点编号)
void remove(int &id,int x)
删除节点(传入根结点编号)
int getrank(int id,int x)
查找元素值的排名(传入根结点编号)
int getval(int id,int rank)
查找给定排名处的元素(传入根结点编号)
hdk::balanced_tree::fhq_treap
可重 fhq_treap 平衡树
接口成员
int getroot(void)
返回根结点编号
int size(void)
返回子树大小
void insert(int)
插入元素
remove(int)
删除元素
int findrank(int)
寻找给定元素的排名
int findnum(int)
查找给定排名的元素
int findnext(int)
查找给定元素的后继
int findrank(int)
查找给定元素的排名
拓展成员
struct tree
节点信息
包含 w
(节点权值),data
(节点堆权值),size
(节点子树大小),cnt
(节点重复个数),son[0]
(节点左儿子),son[1]
(节点右儿子)
tree* operator [](int)
返回节点信息
tree* get(int)
形如 operator[]
void update(int)
更新节点信息
int newnode(int)
对给定权值创建一个新节点,返回新结点编号
int merge(int x,int y)
合并 x,y 对应子树,返回新的根节点编号
void split(int now,int k,int &x,int &y)
对 now 的子树按 k 分裂,x,y 修改为分裂后的子树根节点
int find(int now,int rank)
查找给定排名的数字
bitset.h
hdk::bitset::bitset<int siz>
机制:状压 unsigned long long,位操作使用分块处理
定义:siz: bitset 大小(位大小)
成员运算符
[](int) (右值,修改请使用 set() 方法)
~()
+(bitset)
+(unsigned long long)
+=(bitset)
+=(unsigned long long)
> == < >= <= != (bitset\unsigned long long)
=(bitset\unsigned long long\string)
<< >>
max()
min()
成员函数
int size()
返回 bitset 大小
int array_size()
返回 bitset 占用的 unsigned_longlong 变量个数
void clear()
unsigned long long &at(int pos)
返回 pos 位置的存放数组(对应下标 \([64pos,64pos+63]\))
void upset_down(int pos)
将 pos 位置的数字翻转
void upset_down(int l,int r)
将区间数字翻转
void set(unsigned long long x)
或 operator =(unsigned long long x)
设置 bitset 的值为 x
operator =(string x)
设置 bitset 的值为 x
void set(int pos,bool value)
设置 pos 处的值为 value
void set(int l,int r,bool value)
设置 \([l,r]\) 内的值为 value
print() print(bool iscomplete_print)
当 iscomplete_print=true 时删除前导零;
print(char devide=0,char end='\n',bool iscomplete_print=false)
用 devide 做输出分隔符,end 做结束符输出
flip()
整体翻转
all()
全为 1 时返回 true
any()
有至少一个 1 时返回 true
none()
没有 1 时返回 true
count()
返回 1 的个数
string to_string()
转为字符串返回
to_string(bool complete_print=false)
当 iscomplete_print=true 时删除前导零
函数复杂度
此 bitset 为 64 位/8byte,是 stl 空间使用的四分之一
此 bitset 采用分块思想实现,效率中等.
[]
\(O(1)\)
~()
\(T(\frac{size}{64})+\Theta(0,127)\)
+(bitset)
\(O(size)\)
+(unsigned long long)
\(O(size)\)
+= > == < >= <= !=
\(\Theta(1,size)\)
=
\(O(size)\)
<< >>
\(O(size)\)
max() min()
\(\Theta(1,size)\)
size()
\(O(1)\)
array_size()
\(O(1)\)
clear()
\(T(\frac{size}{64})\)
&at()
\(O(1)\)
upset_down(int)
\(O(1)\)
upsetdown(int,int)
\(T(\frac{r-l+1}{64})+\Theta(0,127)\)
set(unsigned long long)
\(\Theta(0,64)\)
set(int,bool)
\(O(1)\)
set(int,int,bool)
\(T(\frac{r-l+1}{64})+\Theta(0,127)\)
print()
\(O(size)\)
flip()
\(T(\frac{size}{64})+\Theta(0,127)\)
any()
\(O(size)\)
all()
\(O(size)\)
none()
\(O(size)\)
count()
\(O(size)\)
to_string()
\(O(size)\)
delist.h
hdk::delist<typename T>
双向链表
成员函数
set_next(int id,int nxt)
设置节点后继
set_next(int id,int pre)
设置节点前驱
node &operator[](int)
push_back(T)
在最后方插入值
该函数的同类函数 insert(T val)
push_front(T)
在最前方插入值
bool empty()
T pop_back()
删除最后方元素值并返回
该函数的同类函数 remove(void)
T pop_front()
删除最前方元素值并返回
size()
begin_id()
返回初始节点编号
end_id()
返回结尾节点编号
next(int &i)
使 i 成为其后继
pre(int &i)
使 i 成为其前驱
next_of(int id)
返回 id 的后继
pre_of(int id)
返回 id 的前驱
findid(int p)
该函数的同类函数 findid,findid_fromhead(以前方为首位),findid_fromback(以后方为首位)
查找 p 位置的元素值
默认值:findid=findid_fromhead
insert_id(int p,T val)
该函数的同类函数 insert_id,insert_id_ahead(在前方插入),insert_id_behind(在后方插入)
在节点编号为 p 的位置插入元素
默认值 insert_id=insert_id_behind
insert(int p,T val)
该函数的同类函数 insert,insert_ahead(以前方为首位,在前方插入),insert_fromback_ahead(以后方为首位,在前方插入),insert_behind(以前方为首位,在后方插入),insert_fromback_behind(以后方为首位,在后方插入)
在链表第 p 个位置前/后插入元素
默认值
insert=insert_hehind
T remove_id(int p)
移除节点编号为 p 的位置的元素,并返回其值
T remove(int p)
该函数的同类函数 remove,remove_fromhead(以前方为首位),remove_fromback(以后方为首位)
移除链表第 p 个位置的元素
find(T value,int appear_time)
该函数的同类函数 find,find_fromhead(以前方为首位),find_fromback(以后方为首位)
寻找给定值第 appear_time 次出现的节点编号
single(T)
判断某一元素是否只出现了一次
clear()
清空链表,但不清除使用空间
shrink_to_fit()
清除未使用的使用空间
vector_size()
使用空间大小
T val(int p)
该函数的同类函数 val,val_fromhead(以前方为首位),val_fromback(以后方为首位)
返回第 p 个位置的值
count(T)
返回给定元素值的出现次数
exist_id(int id)
给定 id 的节点是否在链表中
exist_val(T val)
给定的值是否在链表中
frac.h
hdk::frac
分数类
行为:该类表达了一个分数,它内部的分数总是最简的,并且不会让分母为零
成员运算符
frac(int,int)
operator = (pair<int,int>)
operator = frac
operator +
operator *
operator /
operator -()
operator -
operator < > ==
成员函数
frac fixed()
约分当前分数并返回
执行完该函数后,分母总是一个正数
frac upside()
返回当前分数的倒数
void print()
输出当前分数
graph.h
hdk::forward_star
链式前向星
定义:typename<T,int node_size,int edge_size>
此处的 typename T 应表示边额外存储的信息
如,建立一个存储边权的链式前向星,你需要传入 typename=int 来存储边权
该类有对 typename=void 的特化
成员函数
int add(int _from,int _to,int _value)
加单向边,返回当前边的总数
add_unordered(int x,int y,T value)
加双向边,返回当前边的总数
operator [](int)
返回给定边的信息
int& get_head(int start)
返回从 start 开始的链式前向星起始节点
int& get_to(int id)
返回边的目标节点
int& get_next(int i)
返回下一条边
hdk::graph
这是 vector 的存图方法,主要在 hdk::graph_algorithm 中使用
定义:graph<typename T,int node_size>
成员函数
add(int from,T info)
加边
vector
返回 vector 信息
namespace hdk::graph_algorithm
hdk::graph_algorithm::dij()
定义 template<typename X,typename T,int node_size> vector<T> dij(hdk::graph_algorithm::graph<hdk::graph_algorithm::weighted_edge<T>,node_size> &G,int start,T inf)
你不需要填入参数列表中的内容,只需要填入函数需要的参数:
hdk::graph_algorithm::graph<hdk::graph_algorithm::weighted_edge<T>,node_size> &G 一个特定类型的图,其中 hdk::graph_algorithm::weighted_edge 是具有方向与边权的图类型
int start 起始节点编号
T inf 你需要自己给定无穷大,用于初始化
函数返回一个 vector<T>,其中第 i 位表示 start 到 i 的最短路
函数需要你的节点类型具有 operator <(const,const)
比较推荐的参数方法是 dij(hdk::graph_algorithm::graph<hdk::graph_algorithm::weighted_edge<hdk::graph_algorithm::dij_node<int>>,node_size> &G,int start,T inf)
hdk_string.h
hdk::hdk_string::hdk_string<int string_siz>
字符串函数
该类包含了从 std::string 的转化
该类的起点是动态的,可以通过修改起点来修改字符串
成员运算符
operator =
operator + +=
operator *(int) 重复拼接
operator *=
operator < <= > >= ==
operator << >> stream
成员函数
int length()
void print(char ending=0)
其中 ending 为结束符,ending=0 时不输出结束符
void check_start()
检查字符串是否合法,无实际用途
void input(int start_pos)
从 start_pos 位读入
void push_back(char)
向末尾插入元素
void getline()
读入一行
char* begin()
char* end()
hdk_string substr(int substart,int sublength)
从 substart 开始截取 sublength 长度的子串
在越界时会截断
unsigned long long hash(int l,int r,int num=233,unsigned long long mod=0)
对 [l,r] 执行哈希,后方两个参数用于调控哈希行为,mod=0 为不取模
unsigned long long hashall(int num=233,unsigned long long mod=0)
对整个字符串执行哈希,后方两个参数用于调控哈希行为,mod=0 为不取模
bool empty()
void pop_back()
删除末尾元素
clear()
hdk_string reverse(hdk_string)
反转字符串
void reverse()
反转自身
bool check_mir()
判断当前是否为回文数
size()
start_pos()
返回起始下标
insert(int pos,hdk_string/std::string)
插入字符串
void erase(int l,int r)
void erase(int pos)
bool find(hdk_string/std::string)
在当前字符串中查找给定字符串
void lowercase()/ lowercase(int l,int r)
将给定区间的大写字母转化为小写字母
void uppercase()/ uppercase(int l,int r)
将给定区间的小写字母转化为大写字母
map_replace(std::map<char,char>mp)/map_replace(std::map<char,char>mp,int l,int r)
根据 map 对字符串执行整体替换
io.h
namespace fastio
基础快读快写
rule(bool)
打开/关闭同步流
read() / read(int) / read(long long) / read(char)
快读
write(int) / write(long long) / write(char)
快写
space() endl()
namespace read_base
需要提前 define using_readbase 以调用
char _read::getchar()
读入一个字符
可以使用 __getchar 快捷调用
void _write::putchar()
输出一个字符
可以使用 __putchar 快捷调用
namespace reader
若 define using_ext_fastio 则不可使用
自由快读
read 函数已经过参数包重载,可以传入任意个参数
read(...)
快读
namespace writer
若 define using_ext_fastio 则不可使用
write 函数已经过参数包重载,可以传入任意个参数
write(...)
快写
namespace ext_fastio
需要提前 define using_ext_fastio 来使用
方砖快读快写,已强制重载 cin cout,可直接使用
iterator.h
hdk::iterator<typename T>
迭代器,typename T 为指向的元素类型
简易迭代器,支持以下官方迭代器支持的函数
- / += / - / -= / *() / == / ++ / --
distance()
已重载隐式转换
math.h
需要取模操作的函数,都具有两种参数类型:一种是模数作为参数 f(int,int mod),一种是作为模板参数 f<mod>(int)
hdk::math::fact()
阶乘
hdk::math::power()
快速幂
hdk::math::A(int n,int m)
返回 \(A_{n}^{m}\) 的值
hdk::math::C(int n,int m)
返回 \(C_{n}^{m}\) 的值
hdk::math::lucas(int n,int m)
使用 lucas 定理实现组合数求解
hdk::math::exgcd(int a,int b,int &x,int &y)
扩展欧几里得定理
hdk::math::phi(int n)
单个欧拉函数求解
hdk::math::isprime(int x)
质数测试
hdk::math::inv()
求模意义下的乘法逆元
hdk::math::log(int base,int x)
二分求解 log
matrix.h
hdk::matrix
矩阵
定义:matrix<typename T,int maxlen>
成员运算符
operator + - += -=
operator * *=
operator ^(int) 矩阵乘方
operator |(int) 矩阵快速幂
成员函数
void clear()
void setmod(int)
设置自动取模与模数
mod=0 取消自动取模
resize(int n,int m)
fillmain(int)
填充主对角线
fillsec(int)
填充副对角线
fill(int) / fill(int x,int startn,int endn,int startm,int endm)
填充
opposite()
对整个矩阵取反
packed_clear(int n,int m,int filln,int mod)
resize+fill+setmod
void packed_clear(vector<vector>,int mod=0)
用嵌套 vector 进行组合初始化
void input()
输入尺寸与矩阵
void input(int nsize,int msize)
输入指定尺寸的矩阵
void inputn(int nsize)
输入列尺寸,并输入指定行尺寸的矩阵
void inputm(int msize)
输入行尺寸,并输入指定列尺寸的矩阵
void print()
输出矩阵
modint.h
hdk::modint::modint
自动取模的数
定义:template<long long mod=INT_MAX,typename T0=long long>
已重载大部分基本数据结构具有的功能,可以直接替换
额外成员函数
quick_multi(modint)
快速乘
power(modint)
快速幂
inf()
返回模意义下最大值对应的 modint
operator ,
这是干啥的
ordered_vector.h
hdk::ordered_vector
原理:类似 __gnu::pb_ds::ov_tree,原理是通过 lower_bound 和 insert,在 std::vector 上实现有序,复杂度较大
成员函数
clear()
lower_bound(T x)/ upper_bound(T x)
insert(T x)
插入元素
remove(T x)
移除元素
remove_all(T x)
移除所有等于 x 的元素
it()
将自己作为 vector 返回
remove_larger/remove_smaller(int x,bool include_this=false)
将比 x 大/小的元素全部移除
include_this=true 则包括等于 x 的数
operator [](int)
print(char devide=' ',char ending='\n')
输出,devide 是分隔符,ending 是结束符
findpre(T x)
查找 x 的前驱
不存在返回 -1
findnext
查找 x 的后继
不存在返回 -1
T nearestabs(T x)
查找与 x 最接近的元素值
如果等于 x 的数有多个,该函数返回 0
T remove_nearestabs(T x)
查找,移除并返回与 x 最接近的元素值
如果等于 x 的数有多个,该函数随机移除一个并返回 0
int locate_nearestabs(T x)
查找与 x 最接近的元素值,返回其下标
count(T x)
返回元素个数
bool find(T x)
查找元素是否存在
bool empty()
int size()
T find_maxnum(int rank)
返回第 rank 大的数
不存在返回 -1
T find_minnum(int rank)
返回第 rank 小的数
不存在返回 -1
operator +(ordered_vector)
用归并方式合并两个 ordered_vector
password.h
namespace hdk::topass
string hdk::topass::lock(int public_key,int private_key,std::string word)
使用 topass 方法加密字符串
string hdk::topass::unlock(int public_key,int private_key,std::string password)
使用 topass 方法解密字符串
namespace hdk::base_32
class Base32Utils
定义了 base32 方法
string hdk::base_32::lock(std::string x)
使用 base32 方法加密字符串
string hdk::base_32::unlock(std::string x)
使用 base32 方法解密字符串
namespace hdk::base_64
string hdk::base_64::lock(std::string x)
使用 base64 方法加密字符串
string hdk::base_64::unlock(std::string x)
使用 base64 方法解密字符串
rand.h
- 需要
defination.h
hdk::Rand::__Rand
随机方法:采用 mt19937_64 生成随机数
随机数质量:方差 9.4 / 100-10 test(std::rand 方差 11.0 / 100-10 test)
注意:device_srand() 在 GCC9.2 及以上版本中才能使用
hdk::Rand::randt::SystemRand(l,r)
调用一次 std::rand() 生成 \([l,r]\) 间的随机数
hdk::Rand::randt::Rand()
生成随机非负整数
hdk::Rand::randt::RandSignedInt()
生成随机整数
hdk::Rand::randt::RandInt(l,r)
生成 \([l,r]\) 间的随机数
hdk::Rand::randt::RandLong()
生成随机非负 \(64\) 位整数
hdk::Rand::randt::RandSignedLong()
生成随机 \(64\) 位整数
hdk::Rand::randt::RandLong(l,r)
生成 \([l,r]\) 间的随机 \(64\) 位整数
hdk::Rand::randt::RandReal(fixed)
生成 \([0,1]\) 之间,\(fixed\) 位的随机实数
hdk::Rand::randt::devide_srand()
使用内存池(random_device)随机数作为种子初始化
hdk::Rand::randt::time_srand()
使用当前时间作为种子初始化
hdk::Rand::randt::seed_srand(seed)
固定种子初始化
hdk::Rand::randt::access(double access_p)
该函数有 access_p 的概率返回 true
hdk::Rand::randt::randfrom(vector)
从 vector 中随机选择一个返回
hdk::Rand::randt::randfrom(T A[],int l,int r)
从 [l,r] 下标范围内随机选择一个返回
hdk::Rand::randt::randfrom(__randset)
从给定 __randset 中选择一个返回
详见 defination.h
hdk::Rand::randt::randfrom(__randset_boolen)
从给定 __randset 中选择一个返回
详见 defination.h
hdk::Rand::RandTest
随机数测试
hdk::Rand::Test.Balanced_Test(int r,int times,bool display=false)
hdk::Rand::Test.System_Test(int r,int times,bool display=false)
平衡性测试:在 [1,r] 中选取 times 次数据,计算数据产生方差
tool.h
hdk::tool::floor_sqrt(T)
开根后向下取整,支持 __int128
hdk::tool::print(T)
输出数字,支持 __int128
string hdk::tool::to_string(T)
将数字转为字符串形式
long long hdk::tool::to_number(string)
将字符串转成数字形式
hdk::tool::string to_bit(T)
将数字转成二进制形式,并以字符串返回
string hdk::tool::fixed_size(std::string x,int size,char fillchar='0')
将字符串按高位补齐到 size 大小,不足的位填充 fillchar
bool hdk::tool::copyfile(const char* A,const char* B)
复制文件 A 到 B
失败时返回 1
bool hdk::tool::print(const char*)
输出文件到 stdout
失败时返回 1
bool hdk::tool::fc(const char *file_A,const char *file_B,bool display=false,bool debug_mode=false)
比较文本,不相同则返回 1
display 显示比较结果
debug_mode 显示详细比较信息
hdk::tool::class _time
时间类
time_s / time_ms
将时间转换到时刻
1 time_s = 1 clocks_per_sec
1000 time_ms = 1 time_s
_time::sleep(clocks)
使程序休眠
_time::record_time()
第一次调用记录当前时间,第二次调用返回距离上次调用的时刻差,并重置
_time::record_time(bool is_start)
is_start=true 记录当前时间
is_start=false 返回与记录时间的时间差
hdk::tool::file_name(const string file)
去除文件后缀名并返回
hdk::tool::system(const string)
重定向到 system(const char*)
angle.h
class hdk::arc_angle
弧度制角类
hdk::arc_angle::print(int fixed)
以特定精度输出角
hdk::arc_angle::print(string set)
以 set 做格式控制符输出角
hdk::arc_angle::it()
以弧度制角返回自身
hdk::arc_angle::(long double)
在表达式内引用 arc_angle 时返回对应角的角度制数值
class hdk::deg_angle
角度值角类
hdk::deg_angle::print(int fixed)
以特定精度输出角
hdk::deg_angle::print(string set)
以 set 做格式控制符输出角
hdk::deg_angle::it()
以角度值角返回自身
hdk::deg_angle(long double)
在表达式内引用 arc_angle 时返回对应角的角度制数值
deg_angle hdk::to_deg_angle(arc_angle)/arc_angle hdk::to_arc_angle(deg_angle)
角度值/弧度制互相转化
array.h
- 需要
iteratior.h
io.h
class __array
动态内存数组
定义:__array
可以使用 const std::vector
属性:不需要手动定义内存或扩容,__array 会在内存不足或越界访问时自动按 vector 规则扩容
已重载 =(const std::vector<T>)
__array(__array_iter)
在表达式中引用 __array 时返回指向数组开头的 __array_iter 类型指针
__array::resize(int)
修改数组大小
int __array::size()
返回数组大小
T&__array::operator
返回对应下标的数字
非法时会自动扩容
无法处理负下标
void __array::push_back(const &T)
向数组末端插入一个元素
std::vector __array::operator()()
以 vector 形式返回底层数组
void __array::read_array(int size,int start=1)
读入一个数组,并存入 __array 中
两个参数分别为大小和起始下标
__array_iter __array::begin()/__array::end()
返回指向数组开头/结尾的元素
__array_iter __array::operator+(int x)/operator-(int x)
对于 operator+,返回指向数组开头第 x 个元素的指针
对于 operator-,返回指向数组末尾向前数第 x 个元素的指针
class __array_iter
与 __array 相关的指针
可用 vector
已重载 =(vector<T>::iterator)
+(int)
+=(int)
-(int)
-=(int)
++
--
==(__array_iter<T>)
!=__array_iter<T>
运算符
__array_iter(vector::iterator)
在表达式中引用 __array_iter 时,该引用返回 vector
__array_iter::operator*(void)
返回指针指向的内容
hdk::iterator<vector::iterator> __array_iter::iterator()
返回一个等价的 hdk::iterator 指针
int operator -(__array_iterA)
返回两个指针的距离
times.h
defination.h
class hdk::__reflection_upper_case/hdk::__reflection_lower_case
使用 hdk::__uppercase()/hdk::__lowercase() 来调用
可以在 hdk_string::map_replace() 中使用
class hdk::__randset
用于 hdk::Rand::randt::randfrom()
可用 std::vector
hdk::__randset::operator()()
返回自身
hdk::__randset::operator+()
合并 randset
randset 特化内容:
__randset_uppercase_alpha/__randset_lowercase_alpha
大小写字符的 randset,使用 operator()() 返回对应的 randset
可以使用 hdk::randset_uppercase_alpha()/hdk::randset_lowercase_alpha() 直接调用
可以用 uppercase_alpha/lowercase_alpha 快捷调用
__randset_number_character
数字字符的 randset,使用 operator()() 返回对应的 randset
可以使用 hdk::randset_number_character 直接调用
可以用 number_character 快捷调用
__randset_number
数字 randset,使用 operator()() 返回对应的 randset
需要初始化,可以用两个数 \(l,r\) 初始化,范围为 \([l,r]\) 内全部整数
可以用 range(l,r) 直接调用对应 randset
__randset_boolen/randpair
选择 randset,即容量只有 \(2\) 的 randset,使用 operator()() 返回对应的 randset
需要初始化,可以用 std::pair<T,T> 或两个 T 类型变量初始化
__Return_True()/__Return_False()
返回对应元素
predefined
可以用 setof 快捷调用 __randset
此外,对不同类型的 __randset,均有快捷调用方式
已定义的有:intof charof boolof strof floatof doubleof longod llof ldbof uintof ullof
class __const_reflect_table<int reflect_type,int reflect_size>
只读映射表,可以将数字类型的元素映射到给定内容
可以用 const_reflect_t 快捷调用
需要初始化,可以用 std::vector<reflect_type> 或 reflect_type[] 初始化
可以用 operator / operator()(int) 访问对应元素
__randset<reflect_type> to_randset()
转为 __randset
预定义内容
__const_reflect_table_yes_no({"No","Yes"})/__const_reflect_table_yes_no_uppercase({"NO","YES"})/__const_reflect_table_yes_no_lowercase({"no","yes"})
分别可以通过 YesNo/YESNO/yesno 快捷调用
可以通过提前 define ban_yesno 来禁用
class __reflect_table<reflect_type,int reflect_size>
可变映射表
可以用 reflect_t 快捷调用
可以初始化,可以用 std::vector<reflect_type> 或 reflect_type[] 初始化
可以用 operator / operator()(int) 访问对应元素
__randset<reflect_type> to_randset()
转为 __randset
debug.h
调试用头文件
该头文件的行为会根据是否 define ONLINE_JUDGE 而改变
predefined action
debug1(x) cout<<#x<<devide_type<<x<<debug1_type
debug2(x) cout<<#x<<devide_type<<x<<debug2_type
其中 devide_type debug1_type debug2_type 可以通过预先 define 的方式定义
否则,debug.h 会定义 devide_type '=',debug1_type ' ',debug2_type '\n'
out(...)
使用 cout 输出,能够使用 cout 输出的内容均可用于 out 函数内
out 函数可以传入不定数量的参数
用法1:用逗号隔开需要输出的内容,如 out(1,2,3,a[1],a[2],'\n')
用法2:使用预定义处理文本
div
分割符
lf
换行
eofl
换行并结束
如 out(1 div 2 div 3 lf 4 eofl,a[1] div a[2] lf a[3])
ignored(T)
使用此函数来忽略 GCC::-Wunused-result
windows.hpp
- 仅在 Windows 环境下可用
hdk::windows::compile_code(const string file,const string output_file="",const string compile_setting="-std=c++14 -O2 -Wall",bool display=false)
编译代码
output_file 输出文件,为空则默认使用输入文件名+.exe
compile_setting 编译选项
diplay 显示编译结果
返回编译输出文件名,编译失败返回 "fail"
bool hdk::windows::run_code(const string file,const string output_file="",const string compile_setting="-std=c++14 -O2 -Wall",bool display=true)
编译并运行代码
编译失败返回 false
hdk::windows::local_test(const string create_exe,const string answer_exe,const string test_exe,int test_cases=-1,int time_limit=1000 time_s)
对给定程序执行对拍
请不要在传入程序中使用 freopen 重定向 stdin 或 stdout
create_exe 数据生成程序
answer_exe 答案程序
test_exe 测试程序
test_cases 测试数量,=-1 则无限制
time_limit 时间限制
hdk::windows::local_testcode(const string create_code,const string answer_code,const string test_code,int test_cases=-1,int time_limit=1000 time_s,const string compile_setting="-std=c++14 -O2 -Wall")
编译并运行对拍代码
请不要在传入代码中使用 freopen 重定向 stdin 或 stdout
hdk::scbc(char/std::string put,int color)
以给定颜色代码输出文字
颜色代码详见 system("color")
hdk::set_Flush()
停止向控制台输出内容,将输出内容存入第二缓冲区
hdk::show(int Flush_size)
清空控制台,将第二缓冲区的内容输出到控制台
server.hpp
- 仅在 Windows 环境下可用
server()
system("msg")
指令的可视化版本
linux.hpp
-
仅在 Linux 环境下可用
-
需要
colorlinux.hpp
linux_copyfile(const char*in,const char *out)
将 in 文件复制到 out,若没有 out 文件则新建
linux_printfile(const char*in)
输出文件内容到控制台
linux_fc(const char *file_A,const char *file_B,bool display=true,bool debug_mode=false)
文本比较,display=true 则在控制台显示结果,debug_mod=true 则显示更详细的比较信息
发现不同则会返回 true
colorlinux.hpp
Fileheader 1.13.1 - ColorLinux