从头回顾(截至搜索)

#define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++)
#define foo(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define fu(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)
using namespace std;
inline int qr(){
char ch=getchar();int x=0,f=1;
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
return x*f;}
#define qr qr()
typedef long long ll;

0x 基础

0x01.快速幂

求a^b%p的值

前置要点:(ab)%p=(a%p)(b%p);(a^b)%p=[(a%p)*(a%p)]%p......

int power(int a,int b,int p)
{
int ans=1%p;
while(b)
{
if(b&1)ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans;
}
//若为long long直接改类型

0x02.前缀和

int a[N],s[N];//a为值 s为前缀和
memset(s,0,sizeof s);
fo(i,1,n)//a个数
s[i]=s[i-1]+a[i];

0x03.二分查找

(1)找>=x的数中最小的一个

while(l<r)
{
int mid=(l+r)/2;
if(a[mid]>=x)
l=mid;
else
r=mid-1;
}
return a[l];

等效于

ans=lower_bound(a+1,a+1+n,x)-a;

(2)找<=x中最大的一个

同上 改符号

0x04.二分答案

bool check(int x)
{
//依据题意判定答案范围并return
}
while(l<r)
{
int mid=(l+r)/2;
if(check(mid))//mid在答案范围内
l=mid;
else
r=mid-1;
}//这里取等以及l与r的取值均视情况而定

0x05.线性筛

int a[N],cnt,n,pri[N];
n=qr;
memset(a,0,sizeof ,a);
fo(i,2,n)
{
if(!a[i])
pri[++cnt]=i;
fo(j,1,cnt)
{
if(i*pri[j]>n)break;//不然会炸RE
a[i*pri[j]]=1;
if(!i%pri[j])break;
}
}
fo(i,1,cnt)
printf("%d\n",pri[i]);

0x06.高精度集合(负数未考虑)

(最喜欢的一集

const int Ratio=0;
const int N=10005;
char a[N],b[N];
int x;//进位
int lena,lenb,lenc;
int a1[N],b1[N],c1[N];
bool afu,bfu;
void wszlysdgjiajiajia()//加
{
lenc=max(lena,lenb);
fo(i,0,lenc-1)
{
c1[i]=a1[i]+b1[i]+x;
x=c1[i]/10;
c1[i]%=10;
}
if(x)
{
lenc++;
c1[lenc-1]=x;
}
}
void wszlysdgjianjian()//减
{
lenc=max(lena,lenb);
if(lena<lenb||(lena==lenb&&a1[lena-1]<b1[lenb-1]))//为让大减小 先比较
{
cout<<"-";
fo(i,0,lenc-1)
{
if(b1[i]-a1[i]<0)
{
b1[i+1]--;
b1[i]+=10;
}
c1[i]=b1[i]-a1[i];
}
while(!c1[lenc-1])--lenc;
}
else
{
fo(i,0,lenc-1)
{
if(a1[i]-b1[i]<0)
{
a1[i+1]--;
a1[i]+=10;
}
c1[i]=a1[i]-b1[i];
}
while(!c1[lenc-1])
{
if(lenc-1==0)break;
--lenc;
}
}
}
void wszlysdgcheng()//乘
{
if((lena==1&&a1[0]==0)||(lenb==1&&b1[0]==0))
{
c1[0] = 0;
lenc = 1;
return;
}
lenc=lena+lenb;
fo(i,0,lena-1)
{
fo(j,0,lenb-1)
{
c1[i+j]+=a1[i]*b1[j];
c1[i+j+1]+=c1[i+j]/10;
c1[i+j]%=10;
}
}
while(!c1[lenc-1])lenc--;
}
bool schssw(int a[],int b[],int len)
{
if(a[len]>0)return true;
fu(i,len-1,0)
if(a[i]>b[i])return true;
else if(a[i]<b[i])return false;
return true;
}
void wszlysdgchuchu()//除 顺位减
{
lenc=lena-lenb;
fu(i,lena-lenb,0)
{
while(schssw(a1+i,b1,lenb))
{
c1[i]++;
fo(j,0,lenb-1)
{
if(a1[i+j]<b1[j])
{
a1[i+j+1]--;
a1[i+j]+=10;
}
a1[i+j]-=b1[j];
}
}
}
while(c1[lenc]==0&&lenc>0)lenc--;
lenc++;
}
int main()
{
cin>>a>>b;
lena=strlen(a),lenb=strlen(b);
fo(i,0,lena-1)//倒序存储
a1[i]=a[lena-i-1]-'0';
fo(i,0,lenb-1)
b1[i]=b[lenb-i-1]-'0';
memset(c1,0,sizeof c1);
// wszlysdgchuchu();函数选择
fu(i,lenc-1,0)
cout<<c1[i];
return Ratio;
}

0x07.离散化与查询映射

int a[N],b[N],n,m=0;
void discrete()
{
sort(a+1,a+1+n);
fo(i,1,n)
if(i==1||a[i]!=a[i-1])
b[++m]=a[i];
}
int query(int x)
{
return lower_bound(b+1,b+1+m,x)-b;
}

0x08.逆序对+归并排序

定义:i<j且a[i]>a[j];

void merge(int l,int mid,int r)//a待排 b临时 cnt个数
{
int i=l,j=mid+1;
fo(k,l,r)
if(j>r||i<=mid&&a[i]<=a[j])
b[k]=a[i++];
else
b[k]=a[j++],cnt+=mid-i+1;
fo(k,l,r)
a[k]=b[k];
}

1x 搜索

1x01.dfs

图:

void dfs(int x)
{
v[x]=1;
for(int i=head[x];i;i=ne[i])
{
int y=to[i];
if(v[y])continue;
dfs(y);
}
}

树:

void dfs(int x)
{
a[++m]=x;
v[x]=1;
for(int i=head[i];i;i=ne[i])
{
int y=to[i];
if(v[y])continue;
dfs(y);
}
a[++m]=x;
}

1x02.bfs

图:

void bfs()
{
memset(d,0,sizeof d);
queue<int>q;
q.push(1);
d[1]=1;
while(q.size())
{
int x=q.front();
q.pop();
for(int i=head[x];i;i=ne[i])
{
int y=to[i];
if(d[y])continue;
d[y]=d[x]+1;
q.push(y);
}
}
}

1x03.拓扑排序

void add(int u,int v)
{
rm[++cnt].t=v;
rm[cnt].ne=head[u];
head[u]=cnt;
deg[v]++;
}
void topsort()
{
queue<int>q;
fo(i,1,n)
if(!deg[i])
q.push(i);
while(q.size())
{
int x=q.front();
q.pop();
a[++tot]=x;
for(int i=head[x];i;i=rm[i].ne)
{
int y=rm[i].t;
if(--deg[y]==0)
q.push(y);
}
}
}
int main()
{
n=qr,m=qr;
fo(i,1,m)
{
int x=qr,y=qr;
add(x,y);
}
topsort();
fo(i,1,tot)
printf("%d ",a[i]);
return Ratio;
}

回顾复习x学习笔记的更多相关文章

  1. memcached学习笔记——存储命令源码分析下篇

    上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...

  2. vue 学习笔记(二)

    最近公司赶项目,一直也没时间看 vue,之前看下的都快忘得差不多了.哈哈哈,来一起回顾一下vue 学习笔记(一)后,继续向下看嘛. #表单输入绑定 基础用法 v-model 会忽略所有表单元素的 va ...

  3. AVAWEB学习笔记 ---- 系列文章

    [JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...

  4. 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期

    在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...

  5. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  6. Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构

    Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...

  7. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  8. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  9. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  10. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

随机推荐

  1. 记一次nginx服务异常-无法访问问题排查

    上一秒还好好地,突然下一秒nginx服务器就访问不了啦. 这让人很是疑惑,到底是什么原因导致的呢?问题如下 开始一步一步地排查问题. 尝试一:在windows电脑上使用telnet命令查看端口是否正常 ...

  2. #分治#洛谷 5502 [JSOI2015]最大公约数

    题目 分析 又是一道思维题,考虑用分治,选取左边或右边的基准尽量扩展长度,时间复杂度\(O(nlog_2n)\) 代码 #include <cstdio> #include <cct ...

  3. Codeforces Round #670 (Div. 2)

    CF1406A Subset Mex 洛谷传送门 CF1406A 分析 从小到大考虑每一个数的出现次数,最小未出现的数就是A的mex值, 然后将A选完的数删掉一个接着以同样的方式找B的mex值,这显然 ...

  4. #阶梯NIM#Poj 1704 Georgia and Bob

    题目 有\(n\)个棋子摆放在x轴的正半轴上, 每次将棋子最多向左移动至上一个棋子之后(不能不移动), 不能操作为败,问先手是不是必胜 分析 这个模型可以转换成阶梯NIM的形式, 那么将奇数位置做NI ...

  5. OpenHarmony 4.1 Release版本正式发布,邀您体验

    春风轻拂的4月,OpenAtom OpenHarmony(以下简称"OpenHarmony")4.1 Release版本如期而至,开发套件同步升级到API 11 Release. ...

  6. [IOI2000]邮局 题解

    简要题意 线段上有 \(V\) 个村庄,现在要建 \(P\) 个邮局,使每个村庄到最近的邮局的距离之和最小. 50分做法 设\(dp[i][j]\) 表示第一个村庄到第 \(i\) 个村庄,建了 \( ...

  7. cv.calibrateCamera

    相机造成的失真类型 如何找到相机的内在和外在特性 如何基于这些特性来消除图像失真 基础 一些针孔相机会对图像造成严重失真.两种主要的畸变是径向畸变和切向畸变. 径向变形会使直线看起来是弯曲的.点离图像 ...

  8. 【直播回顾】Hello HarmonyOS应用篇第六课——短视频应用开发

    由HDE夏德旺老师主讲的Hello HarmonyOS进阶系列应用篇第六课<短视频应用开发>, 已于6月8日晚上 19 点在HarmonyOS社群内成功举行. 本节课夏德旺老师带领大家了解 ...

  9. scala 生成指定日期范围的list

    可以通过scala中的流处理,生成指定范围内的日期list import java.time.LocalDate def dateStream(fromDt:LocalDate):Stream[Loc ...

  10. centos-stream-9 centos9 配置国内yum源 阿里云源

    源配置 tips: yum配置文件路径 /etc/yum.repos.d/centos.repo 1.备份源配置 [Very Important!] mv /etc/yum.repos.d/cento ...