学习笔记

学习笔记

STL容器

vector O(1)

vector</*任意类型*/>ve;
//支持随机访问
ve.size();//返回长度
ve.empty();//是否为空,yes返回1
ve.push_back();//加入数值
ve.pop_back();//删除末尾
ve.clear();//清空向量
vector</*类型*/>::iterator it;//迭代器,指针
it=ve.begin();//返回开头迭代器
*it==*ve.begin()==ve[0]==ve.front();
ve[ve.size()-1]==ve.back()==--*ve.end()
ve.end() && ve[N];//都是越界访问

deque O(1)

deque<类型>dq;
//支持随机访问
deque<int>::iterator it;
it=dq.begin();//返回迭代器
it=dq.end();//too
dq.front();
dq.back();
dq.push_front();
dq.push_back();
dq.pop_front();
dq.pop_back();
dq.clear();
dp.size();
dq.empty(); //判断容器是否为空
dq.size(); //返回容器中元素的个数

queue O(1)

queue</*类型*/>q;
q.push();
q.pop();
q.empty();
q.front();
q.back();

priority_queue O(log)

priority_queue</*类型*/>pq;//优先队列初始从大到小
priority_queue<int,vector<int>,greater<int> >pq;//从小到大,“> >”这两个中间要加上空格
//vector可以换成queue,是用什么来存,greater是从小到大,less是从大到小
pq.push();
pq.top();
pq.back();

map O(log)

map</*类型*/,/*类型*/>ad;//咱用字符串作下标
//size,empty,clear,begin,end同理,不提了
//ad.insert(),ad.erase();估计用不上
struct yhb{
    int x,y;
    bool operator < (yhb a) const{
        return x<a.x;//结构体中的x全小于传入数值,从小到大排序
    }
}
bool operator < (yhb a,yhb b){
    return a.x<b.x;//在外面写如同cmp
}
//ad的key如果用结构体作第一维,需要重载小于运算符,map内部是一颗二叉树,不重载要寄
map</*类型*/,/*类型*/>::iterator it;//此时迭代器需要两个
ad.find();//若存在,返回指向迭代器,否则返回end()
map<yhb,int>::iterator it;
ad.insert(make_pair((yhb){1,2},1));//pair内置二元组,自带排序,关键字为第一位,结构体重载写挂了,可以试一试
//有些时候重载运算符报错,是出现int类型和struct之间的比较,阴间
ad[(yhb){1,2}]=1;
it=ad.find((yhb){1,2});//find()里是查询目标的key
printf("%d",ad[(yhb){1,2}]);//强制转型
it=ad.begin();
printf("%d",(*it).first.y);//哎,优先级又炸了,这访问方式,代码风格拉满

set O(log)

set</*类型*/>st;//自动排序,自动去重
st.insert()//插入
st.size();
st.empty();
set<int>::iterator it ;
it=st.find()//返回等于元素的迭代器
st.count(x)//返回等于x的元素个数
st.erase()//括号里放迭代器,删除

c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器

c++ stl容器set成员函数:clear()--清除所有元素

c++ stl容器set成员函数:count()--返回某个值元素的个数

c++ stl容器set成员函数:empty()--如果集合为空,返回true

c++ stl容器set成员函数:end()--返回指向最后一个元素下一个位置的迭代器

c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器

c++ stl容器set成员函数:erase()--删除集合中的元素

c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器

c++ stl容器set成员函数:get_allocator()--返回集合的分配器

c++ stl容器set成员函数:insert()--在集合中插入元素

c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数

c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值

c++ stl容器set成员函数:rbegin()--返回指向集合中最后一个元素的反向迭代器

c++ stl容器set成员函数:rend()--返回指向集合中第一个元素的反向迭代器

c++ stl容器set成员函数:size()--集合中元素的数目

c++ stl容器set成员函数:swap()--交换两个集合变量

c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器

c++ stl容器set成员函数:value_comp()--返回一个用于比较元素间的值的函数

multiset O(logn)

stack O(1)

stack</*类型*/>st;
st.push();
st.pop();
st.top();//访问,不删除
st.empty();
st.size();

函数

离散化

unique

使用前要sort

a[1]=1,a[2]=1,a[3]=1,a[4]=2,a[5]=6,a[6]=6,a[7]=7;//1,1,1,2,6,6,7
int m=unique(a+1,a+8)-a-1;
printf("%d\n",m);
for(int i=0;i<=m;++i) printf("%d ",a[i]);

输出数据:

4
0 1 2 6 7

还是数据有说服力自难忘

lower_bound+vecotr

for(int i=1;i<=9;++i) ve.push_back(i);
int m=lower_bound(ve.begin(),ve.end(),4)-ve.begin();

输出结果m为3,ve[m]为4

以下代码直接在Typora中编写,存在编译错误

for(int i=1;i<=N;++i) a[i]=b[i]=read();
sort(a+1,a+N+1);int m=unique(a+1,a+N+1)-a-1;//减一去掉0
for(int i=1;i<=m;++i) b[i]=lower_bound(a+1,a+m+1,b[i])-a;//不减一为了从一开始

b[i]的原值为a[b[i]]

memset memcpy

memset(a,0,sizeof(a));//只可以赋值0和-1,以及按位复制:0x3f
memcpy(a,b,sizeof(b));//将b里的内容往a中粘

数论

埃氏筛

int fl[MAXN];
for(int i=2;i<=N;++i) 
  for(int j=i*i;j<=N;j+=i) fl[j]=1;

欧拉函数

int phi[MAXN];
phi[1]=1;
for(int i=2;i<=N;++i) if(!phi[i]){
    for(int j=i;j<=N;j+=i){
        if(!phi[j]) phi[j]=j
        phi[j]=phi[j]/i*(i-1);
    }
}

线性筛

int fl[MAXN],pn=0,prime[MAXN];
for(int i=2;i<=N;++i){
    if(!fl[i]) prime[++pn]=i;
    for(int j=1;j<=pn&&prime[j]*i<=N;++j){
        fl[prime[j]*i]=1;
        if(i%prime[j]==0) break;
    }
}

矩阵

矩阵 方阵 矩形
$$
\begin{bmatrix}a&\cdots&b\\vdots&\ddots&\vdots\c&\cdots&d\end{bmatrix}
$$

运算

加法

C=A+B:$C_{i,j}=A_{i,j}+B_{i,j}$

减法 同上
乘法

恶心警告

首先 A的列数要等于B的行数:i行j列
$$
C_{i,j}=\sum_{k=1}^{n}a_{i,k}\times b_{k,j}
$$

总结

满足结合律和分配律,不满足交换律

一些关系式,递推式,数据范围特别大,如1e15,如果写递推dp,会T,但是每一次的转移,写成一个矩阵关系式:A,则有$dp_{i,j}=dp_{i-1,j}\times A$,而矩阵满足结合律,可以写个快速幂:$power(A,N-1)$,再乘上初始状态,复杂度:$M^3longN$

寄不了

莫比乌斯反演

数论分块

先来几个公式
$$
\left \lfloor\dfrac{a}{bc}\right\rfloor =\left\lfloor \dfrac{\left\lfloor\dfrac{a}{b}\right\rfloor}{c}\right\rfloor
$$
来个证明:a,b,c都为整数
$$
\dfrac{a}{b}=\left\lfloor\dfrac{a}{b}\right\rfloor+r\
\left\lfloor\dfrac{a}{b}\times\dfrac{1}{c}\right\rfloor=\left\lfloor\left(\left\lfloor\dfrac{a}{b}\right\rfloor+r\right)\times\dfrac{1}{c}\right\rfloor=\left\lfloor\dfrac{\left\lfloor\dfrac{a}{b}\right\rfloor}{c}+\dfrac{r}{c}\right\rfloor=\left\lfloor \dfrac{\left\lfloor\dfrac{a}{b}\right\rfloor}{c}\right\rfloor
$$

杂项

排列

$$
A_m^n=\frac{m!}{(m-n)!}
$$

组合数公式

$$
C_mn=C_m=\dbinom{m}{n}=\frac{m!}{n!(m-n)!}
$$
之前脑瘫了,这里$~n!$其实是选择的n个数打乱顺后的所有情况,全排列个数

隔板法?插板法?忘了

3个球,5个盒子,有多少种方法,很显然:$C_5^3$

一下全是$n>m$:

n个球,m个盒子,每个盒子至少装一个,有多少种方法?答案是$C_{n-1}^{m-1}$,首先,为确保所有球都装在盒子里,要1个盒子,剩下m-1个盒子,n个球,分成m-1块,有n-1个位置可选

n个球,m个盒子,盒子可以为空,有多少种方法?可以转化为将盒子和球放到一起,选择m个盒子,求选法,$C_{n+m-1}^{m-1}$

n个球,m个盒子,每个格子至少k个,先把球的个数刨除至少的$k\times n$,然后等同于可以为零的情况

卢卡斯定理

$$
Cn_m%p=C_{m%p}\cdot C_{m/p}^{n/p}%p
$$

这定理,明显敲递归

杨辉三角性质

第n行第i个的值为$C_n^i$

费马小定理

逆元定义:$a\times b \equiv 1 \pmod{P}$表示a是b在模数为p的情况下的逆元

简述:如果$\gcd(a,p)=1$,则$a^{p-1}\equiv1\pmod p$,那么$a^{p-2}\times a\equiv1\pmod p$,所以a在模p的情况下的逆元是$a^{p-2}$。

线性求阶乘的逆元

n!的逆元可以表示为${n!}{-1}$,乘上一个n,则变为${(n-1)!}$。

inv[MAXN-2]=power(fac[MAXN-2],mod-2);
for(int i=MAXN-3;i>=1;--i) inv[i]=inv[i+1]*(i+1)%mod; 

连续平方公式

$$
12+22+···+N^2=\dfrac{N\cdot \left( N+1\right) \cdot \left( 2N+1\right) }{6}
$$

摸鱼一下

语文积累

  • 星河滚烫,你是人间理想。

    皓月清凉,你是人间曙光。

    人海冷漠,你是人间炽热。

    满眼星河,你是清风满月。

    万事浮沉,你是人间归途。

    众人平庸,你是人间星光。

    世间无常,你是人间琳琅。

    满树繁华,你是心之所往。

    明月黯淡,你是最后曙光。

    山花烂漫,你是昨夜晓凤。

    人间苦咸,你是甜中透糖。

    浩瀚银河,你是华星秋月。

    夜幕将临,你是浩瀚月光。

    春暖花开,你是心之所向。

    众生皆苦,你是酸甜可口。

    暗无天日,你是万丈光芒。

    花灯初上,你是火树银花。

    百无禁忌,你是一百零一。

    明皓如初,你是一见钟情。

    一眼惊鸿,你是三生有幸。

    相思成画,你是一世芳华。

    大地无声,你是惊心动魄。

    日月星辰,你是朝朝暮暮。

    山南水北,你是春花秋月。

  • 日落跌入迢迢星野,人间忽晚,山河已秋

  • 年少是夕阳,张扬的弥漫天边,青春是黄昏,落幕中还有希望。

  • 时光清浅,岁月安暖。只愿心素如莲,人淡如菊。不以己悲,不以物喜。坐在阡陌红尘里,一手烟火,一手诗意,双手合十,做快乐的自己。

  • “我喜欢你,所以你走的路要繁花盛开,要人声鼎沸。”---《某某》

  • 这里的一切都有始有终,却能容纳所有不期而遇和久别重逢。---《全球高考》

  • 熬过了战争,熬过了国祸,却没熬过世俗。天地都认了,世俗却不允。---《一拜天地》

  • 那些失散的,终究会在漫长的岁月里相拥着团圆;那些来迟的,终究会在阑珊的烟火里微笑着灿烂。---《一拜天地》

  • “风光无限是你,跌落尘埃也是你,重点是你,而不是怎样的你” ---《天官赐福》

  • 美酒轻裘,挑灯走马,一生无牵挂。---《白色橄榄树》

  • 你仗剑东游 ,我青衫白马过。---《将进酒》

  • 红梅覆雪,兰舟笼香,一笑值千金。---《将进酒》

  • 我本放逐臣,又为乱世雄。

    圣贤招文席,英豪进吾觳。

    萧关闻边笳,铁蹄逐寒水。

    老将秣马行,瀌雪征衣重。

    山雪明霜星,狼戾杀豺鹰。

    归鞘掸袖尘,闲云濯红缨。

    病仙携酒游,松月空弦音。

    明堂欢宴起,破盏击筷饮。

    且尽杯中酒,纵欢高殿里。

    醉倒狂歌中……无须问功名。

    ---《将进酒》

  • 江上春风停入梦,严岸忽见峫落雨,步入重生年华时,了吴黑夜雩星光,秦蜀共见百里山,解入少年无处行。---《破云》

  • 停云霭霭,时雨濛濛,八表同昏,平陆成江。——《破云》

  • 当你肩负警徽开枪时,法律条文与实际正义都在你扳机之下。---《破云》

  • 云层低垂,落叶飞旋,巨大天幕下的恭州市华灯初上。他就这么一直一直地往前走,穿过摩肩接踵的人海,穿过硝烟弥漫的现场,穿过轰然坍塌的烈焰与分崩离析的未来;他走过三年孤独沉睡的时光,伤痕累累的灵魂从地狱中苏醒,向恶魔扣下了扳机。---《破云》

  • 有些意外是意料之中,有些意外是意料之外,而你,就是我意料之外的意外。---《撒野》

  • 我躲在断墙后面,偷看两个男孩徒手摘星,星星映在他们眼底,光却撒在我的身上。 后来他们把两个少年变成傀儡,星星撒落一地,断墙被摧毁,躲在后面的我如同小丑一般不知所措。 再后来断墙被女孩堆起,白昼代替黑夜,星星没了太阳代替,我的少年迎光而去。---《撒野》

  • 别那么残忍

    有人在燕尔新婚

    有人江水中冰冷

    别那么虔诚

    江面上谁的灵魂

    飘浮着不肯下沉

    浮在江面上的黄昏

    多么像 现世安稳

一些网址

posted @ 2025-12-05 09:48  Heavenly  阅读(0)  评论(0)    收藏  举报