算法模板01
快速排序
思想:分治
确定分界点:q[l]/ q[(l+r)/2] /q[r] /随机
==(难点)==调整区间:≤x x ≥x
递归处理左右两段
暴力做法:
设置a[],b[]
对于q[l~r]:
q[i]≤x,x->a[]
q[i]≥x,x->b[]
a[]->q[],b[]->q[]
优美做法:
设置双指针l,r
i往右移动,直到看到≥x的数
j往左移动,直到看到≤x的数
swap(i,j)
循环,直到i,j相遇
12345678910111213void quick_sort(int q[],int l,int r){ if(l>=r) return;//判边界,如果只有一个数/没有数直接返回 int i=l-1,j=r+1,x=q[l]; while(i<j) { do i++;while(q[i]<x); do j--;while(q[j]>x); ...
Typora使用笔记
标题1234##这是二级标题ctrl+数字,数字是几就对应几级标题数字为0变成普通文本ctrl+"+"/"-"字体变大/变小
这是五级标题段落换行/分段123这是第一段 shift+enter第一段的第二行 enter这是第二段
这是第一段第一段的第二行
这是第二段
分割线1---
文字显示加粗1**加粗**
我是加粗
删除线1alt+shift+5
我是删除线
下划线1ctrl+u
我是下划线
斜体12ctrl+I*斜体*
我是斜体
高亮1==高亮==
==我是高亮==
拓展:11\*2\*3……
1*2*3……
也就是要想“*”显示出来,应该加上\正斜线符号
11\\*2\\*3……
1\2\3……
也就是既要显示\,又要显示*,在前面再加一个“\”即可
上下标1x^2^
x^2^
1H~2~O
H2O
拓展:1x~1~1^2^
x1^2^
上下标的局限性
列表无序列表1234* 列表+ 列表- 列表enter+enter 推出:按两次enter键即可
列表
...
240929
edb402531f380c4f1fffb7ae50792be3f1a888d9e17a8b7e16aa81cb61c0735183de6aa123bb10f2f514f68b35c0b083ccadda3777c64b66588ba67b0472b41a37937f6a0bdecfbe789d140fe0b7ec295586d096c7ef00ab2e0510afb3c77183192d2e049a88f13c2444d670d4b249f151992f05e53906376a229ab6dc2c382df0e51a48a1e9c058dfc2f63c1649588a9bebbaa44203de077fab35c372a30e8f625756bc5bd18daaa20620564e04e342656ce677ec9b563b860c08cc381271932b16b13c7fbd406c845c3ffe0063ad263f4a4293671d0322885dbf8879aee7026b42e99708b4ab4c9eeca0a0e46aace75c84d84b67e4105fe ...
算法模板06
ddd
区间选点给定 N 个闭区间 [ai,bi][ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
将每个区间按照右端点从小到大排序
从前往后依次枚举每个区间,
如果当前区间已经包含点,pass
否则,选择当前区间右端点
贪心:选择当前最好的情况
12345678910111213141516171819202122232425262728#include<iostream>#include<algorithm>using namespace std;const int N=100010;int n;struct Range{ int l,r; bool operator< (const Range &W)const{ return r<W.r; } }range[N];int main(){ cin>>n; for(int i=0; ...
240824
edb402531f380c4f1fffb7ae50792be3246927e84dc53804a5e77a2f4a3146f80846590276011d5ed8c1460a4463898f531d8b4cb7e01cd4e18aa5be290cbed6476c7c08beab6ab2d2afadf22aeaa74bd78ebfe55a62169dd6053d68a180498d6880f7e5f4743b0f84213e830ec62ea61d24b907686d23a2e1cbacffb02b5700032701ac206b43a1aa8ed5f687b8b09dc44eb1c59a0f671a23fbb4f4a60b7ae166d02220fb489d4a3731e570553407ab62a46c4eb96dd89dd30d9ca3698d38b1e931ed85320e93d1de6eec7bfdb08b25bc21f8bd7cf45df631e4e4c3e22907bd774f010c25b515ef2aaf34c94073b0ff
...
240821
edb402531f380c4f1fffb7ae50792be3c8834ac4f9d3a96e3a29a4137c8860a99040efb9ad9ab3380a04d377305b9b47d3578ab2fba7979d15d5848a624254f231388639447aed0ca49ebc65ad862368019083477a735d1eeaac5dc806415c4aa8af1aeb6fd7e126e55183c3f77ae89622a8daa14a2e110af4b0f78fd5893fd3f0ddb5343f76328d5a381042b8c7ef1264ad502422e1a67d1f548fdcb16593ca8cae44ae5b8437fab8cb19e87c6e135ca8165215ba5ef181fd37e8d8fbdd39535208913fd1eef7f2bff4ff20bc3cdc91e14b2dbe24ac4ca3b5342e08f7c231c86eb3c36f10dfb8b1b406bbfbd7a1d8dc04765b9d55542d69b ...
算法模板05
背包九讲01背包问题有N件物品和一个容量是V的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
有限集合的最大值问题,用闫氏DP分析法:
DP问题:
状态表示f(i,j):
集合:所有只考虑前i个物品,且总体积不超过j的选法的集合
属性:max(价值最大)
状态计算:(不重不漏的分为这两种)
所有不选择第i个物品的方案(1~i-1中选,且总体积≤j)f(i-1,j)
所有选择第i个物品的方案(1~i-1中选,且总体积≤j-v[i])f(i-1,j-v[i])+w[i]
f(i,j)=max(f(i-1,j),f(i-1,j-v[i])+w[i]);
12345678910111213141516171819202122232425262728293031#include<bits/stdc++.h>using namespace std;const int MAXN = 1005;int v[MAXN]; // 体积int w[MAXN ...
算法模板04
质数的判定试除法判定质数==质数==:对于>1的整数,如果只包含1和本身这两个约束,就被称为质数或者素数
O(sqrt(n))
123456789bool prime(int x){ if(x<2) return false;//判断是否>1 else{ for(int i=2;i<=x/i;i++){ if(x%i==0) return false; } } return true;}
分解质因数从小到大枚举所有数
O(sqrt(n))
123456789101112void quite(int x){ int n=x; for(int i=2;i<=n/i;i++){//n中最多只包含一个>qprt(n)的质因子 int s=0; while(x%i==0){//i一定是质数 s++; ...
冥想
最开始听说冥想是来自于健身课堂(那时候只是在公开课上的一次简单练习,不理解meditation的底层逻辑,加上第一次接触,因此在心里没有太多的感觉。后面第一次心里接近崩溃的时候偶然想起来这种自我调节的方法,慢慢开始接触、主动学习了一些。
虽然有时候觉得它也没有网上宣传的那样玄幻,但是的确坚持了一段时间,每天晚上进行一次催眠冥想,还是确实感受到了它对我的一些影响:在冥想的过程中,我的大脑和身体是真正联结在一起的,我真真切切感受到了“抽离”,仿佛可以看到自己渐渐在柔美的声音之中沉沉睡去,让紧绷的神经松懈下来,不在会受到白天的压力所困,仿佛置身在幽雅的境地,彻底的进入平和。时间就了,也慢慢提高了自己的专注力和情绪控制能力,减轻了内耗和焦虑抑郁。除此之外,仿佛打破了自己心灵的枷锁,慢慢习惯于倾听自己内心的真实需求,把自己从焦躁的内耗情绪之中解脱出来
副作用:不知道是不是晚上带着耳机入睡的原因,白天醒来的时候还是会有困意
p:好爱最后一页,听一次爱一次!小时候看他排在前三还不理解🤣可惜是电视剧的主题曲www为什么为什么不是电影(* ̄;( ̄ *)
算法笔记03
排列数字(DFS)使用DFS进行排列(回溯),递归
123456789101112131415161718192021222324252627#include<iostream>using namespace std;const int N=10;int path[N],n;//存储状态bool st[N];void dfs(int u){ if(u==n){//走到第n个位置的时候,输出 for(int i=0;i<n;i++){ printf("%d ",path[i]); } puts(""); return; } for(int i=1;i<=n;i++){ if(!st[i]){//找到一个没有被用过的数 path[u]=i; st[i]=true; dfs(u+1);//处理下一层 ...