
ACM - 黑科技函数
Scar_Halo
ITer
展开
-
康托展开求全排列
康托展开:已知一个排列,求这个排列在全排列中是第几个ll kt() { // 计算 p序列在全排列排第几 ll ret = 0; for(int i=1; i<=n; i++) { ll tmp = 0; for(int j=i+1; j<=n; j++) if(p[j] < p[i]) tmp++; ret += tmp * fac[n-i]; //f[]为阶乘 } return ret; }康托展开逆运算:已知在全排列中排第几,求这个排列vo原创 2020-12-14 16:53:22 · 386 阅读 · 0 评论 -
快速阶乘算法
求: n! mod p\large n! \text{ mod } pn! mod p时间复杂度:Θ(nlogn)\Theta(\sqrt n \log n)Θ(nlogn)模板题:P5282 【模板】快速阶乘算法参考:P5282 【模板】快速阶乘算法(多项式运算+拉格朗日插值+倍增)//minamoto#include<bits/stdc++.h>#define R register#define ll long long#defin原创 2020-09-10 15:00:38 · 3680 阅读 · 0 评论 -
String 函数
1. substr()对字符串进行截取 string s = "0123456789"; string sub1 = s.substr(5); // 从下标为5开始一直到结尾:sub1 = "56789" string sub2 = s.substr(5, 3); // 从下标为5开始截取长度为3位:sub2 = "567"2. c_str()返回一个指向正规C字符串的指针, 内容与本string串相同注意这是原创 2020-07-27 22:31:33 · 429 阅读 · 0 评论 -
C++ bitset 用法
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。常用函数 对于一个叫做bit的bitset: bit.size() 返回大小(位数) bit.count() 返回1的个数 bit.any() 返回是否有1 bit.none() 返回是否没有1 bit.set() 全都变成1 bit.set(p) 将第p + 1位变成1(bitset是从第0位开始转载 2020-07-16 23:06:37 · 884 阅读 · 0 评论 -
C/C++整行读入字符串
C/C++如何整行读入字符串?在写代码的过程中,经常要一行一行的读入字符串进行处理,这里别人总结了一些方法,供大家参考。方法一:scanf() 读入 char[]使用方法:char str[1024];scanf("%[^\n]", &str);getchar(); 说明:在scanf函数中,可以使用%c来读取一个字符,使用%s读取一个字符串, 但是读取字符串时不忽略空格,读字符串时忽略开始的空格,并且读到空格为止,因此只能读取一个单词,而不是整行字符串。 其实scan转载 2020-07-15 22:52:23 · 1093 阅读 · 0 评论 -
unordered_map 性能优化 与 重载
参考:stl中unordered_map的insert/clear 性能问题解决参考:关于map和unorderd_map的使用insert / clear 性能优化当插入元素过多时,发生了哈希碰撞,碰撞开链到一定的阈值,触发了增加 bucketbucketbucket,进而触发了 rehashrehashrehash因此,reservereservereserve 可以用来预留元素个数,rehashrehashrehash 根据提供的元素个数预留足够的bucket数目unordered_map原创 2020-06-17 10:08:41 · 3518 阅读 · 0 评论 -
Floyd’s Tortoise and Hare & 环检测算法
参考:Floyd判圈算法理解参考:Floyd判圈算法(龟兔赛跑算法, Floyd’s cycle detection)及其证明参考:Floyd’s Tortoise and Hare & 环检测算法简介Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm)。该算法由美国科学家罗伯特·弗洛伊德发明,是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,求出该环的起点与长度的算法。原创 2020-06-15 22:10:35 · 447 阅读 · 0 评论 -
快速乘 + Montgomery modular multiplication
O(logn):O(logn):O(logn):ll mult(ll a, ll b, ll p) { a %= p; b %= p; ll ans = 0; while(b) { if( b&amp;amp;amp;amp;amp;amp; 1) ans = (ans + a) % p; a = (a + a) % p; b &amp;amp;amp;amp;amp;gt;&amp;原创 2018-10-05 20:56:35 · 897 阅读 · 0 评论 -
溢出问题 及 最值
溢出和取值范围C语言的整型溢出问题 整数溢出 int、long int 、long long int 占用字节疑问&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nb原创 2018-10-01 20:49:41 · 233 阅读 · 0 评论 -
mt19937
参考:笔记 | 如何正确地生成一个随机数cf提到不要用rand():Don’t use rand(): a guide to random number generators in C++rand()的随机数太假,RAND_MAX很小,只有32767random_shuffle()用的也是这个自带的rand(),元素在数组里移动的距离也很小rand()使用的伪随机算法是 linear c...原创 2020-04-29 00:11:15 · 1585 阅读 · 0 评论 -
BM算法
非质数参考:模不为质数模为实数模为质数:#include<bits/stdc++.h>using namespace std;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define pb push_back#define mp m...原创 2019-09-28 15:34:12 · 116 阅读 · 0 评论 -
STL —— 位运算函数之 __builtin_
1. __builtin_popcount(unsigned int n)判断 nnn 的二进制中有多少个 111int n = 15; //二进制为1111cout<<__builtin_popcount(n)<<endl; //输出42. __builtin_ffs(unsigned ...原创 2019-04-26 14:23:11 · 786 阅读 · 2 评论 -
next_permutation() 全排列函数
&nbsp;&nbsp;&nbsp;&nbsp;排列(Arrangement),简单讲是从 NNN 个不同元素中取出 MMM 个,按照一定顺序排成一列,通常用A(M,N)A(M,N)A(M,N)表示。当M=NM=NM=N时,称为全排列(Permutation)。&nbsp;&nbsp;&nbsp;&nbsp;从数学角度讲,全排列的个数A(N,N)=(N)∗(N−1)∗...∗2∗原创 2018-11-08 21:11:10 · 1135 阅读 · 1 评论 -
atoi() 与 itoa()函数用法
atoi() 函数的原型为: int atoi(const char *str );函数功能:把字符串转换成整型数参数str:要进行转换的字符串返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则atoi的返回值为 0函数说明: 参数str字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到...原创 2018-10-26 11:46:19 · 496 阅读 · 0 评论 -
取整函数 ceil、floor、round
floor()floor()floor():地面,地板,所以函数向下取整,即最接近xxx的较小整数ceil()ceil()ceil():天花板,所以函数向上取整,即最接近xxx的较大整数round()round()round():大约,环绕,所以函数四舍五入double round(double r){ return (r &amp;amp;gt; 0.0) ? floor(r + 0....原创 2018-10-04 21:21:37 · 619 阅读 · 0 评论