从头回顾(截至搜索)

#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. Java 实现OCR扫描/识别图片文字

    图片内容一般无法编辑,如果想要读取图片中的文本,我们需要用到OCR工具.本文将介绍如何在Java中实现OCR识别读取图片中的文字. 所需工具: IDEA Spire.OCR for Java - Ja ...

  2. ASCII编码的全面介绍

    1. ASCII编码的定义和历史 ASCII(American Standard Code for Information Interchange)是一种用于将文本字符转换为数字编码的标准,最初由美国 ...

  3. #2-sat,Tarjan#洛谷 4171 [JSOI2010]满汉全席

    题目 分析 考虑两个至少选一个就是非A即B,非B即A, 都可行当且仅当A与非A不在同一个强连通分量里 代码 #include <cstdio> #include <cctype> ...

  4. Matplotlib绘图设置---颜色条设置

    设置颜色条 对于图形中由彩色的点.线.面构成的连续标签,用颜色条来表示的效果比较好,在Matplotlib中,颜色条是一个独立的坐标轴. 可视图形的颜色选择可参考matplotlib配色方案. Cho ...

  5. climits 与 符号常量

    climits  在老式中是 limits.h 一.引入 #include <climits> 或者 #include <limits.h> 二.符号常量 符号常量 表示 CH ...

  6. 直播预告丨 Hello HarmonyOS 进阶课程第五课——原子化服务

    本周三<Hello HarmonyOS 系列应用篇:原子化服务>,HDE 李洋老师将带领大家了解 HarmonyOS 原子化服务的技术特性与创新性,对智能家居.智慧出行.运动健康.智慧办公 ...

  7. centos8 \CentOS 9 Stream rpm 安装mysql8.0.28

    centos8 rpm 安装mysql8.0.28 检查 检测系统是否自带安装 MySQL 命令如下: rpm -qa | grep mysql 如果如下存在已安装的包,就需要卸载 mysql80-c ...

  8. Docker安装使用--Centos

    目录 前言 Docker安装使用 安装步骤 卸载旧版本 安装utils 配置utils的存储库 安装Docker 安装指定版本Docker 验证安装 官网安装说明 阿里云镜像加速 Docker使用 帮 ...

  9. Go命令行工具cobra

    关于 Cobra 是 Go 的 CLI 框架.它包含一个用于创建功能强大的现代 CLI 应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具. Cobra 由 Go 项目成员 ...

  10. 简单的使用Echars制作柱状图

    简单的使用Echars制作柱状图 html如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...