回顾复习x学习笔记
从头回顾(截至搜索)
#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学习笔记的更多相关文章
- memcached学习笔记——存储命令源码分析下篇
上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...
- vue 学习笔记(二)
最近公司赶项目,一直也没时间看 vue,之前看下的都快忘得差不多了.哈哈哈,来一起回顾一下vue 学习笔记(一)后,继续向下看嘛. #表单输入绑定 基础用法 v-model 会忽略所有表单元素的 va ...
- AVAWEB学习笔记 ---- 系列文章
[JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- mybatis学习笔记之基础复习(3)
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...
随机推荐
- Debug模式调试技巧
Debug模式调试技巧 断点管理窗口 菜单栏方式 Run -> view breakpoints Actions方式 双击shift调出Actions窗口,输入view breakpoint ...
- 实用 Linux 命令 Windos 命令 实例演示 持续更新中
实用 Linux 命令 Windos 命令 实例演示 持续更新中 目录 实用 Linux 命令 Windos 命令 实例演示 持续更新中 Linux 命令 [Command [options] [lo ...
- 批量拉取/git pull 指定文件夹下面所有 Git 项目的最新代码
背景 因为工作需要,当前所负责的项目较多:但是人力紧缺,其中绝大部分项目平时也不会去跟进迭代.所以经常需要批量拉取最新的代码查看最新的改动. 解决方案 一键批量拉取指定文件夹下所有 Git 项目的最新 ...
- Socket.D v2.4.9 发布
Socket.D 是什么东东? 是基于"事件"和"语义消息""流"的网络应用协议.在微服务.移动应用.物联网等场景,可替代 http.web ...
- openGauss/MogDB零字节问题处理
openGauss/MogDB 零字节问题处理 问题描述:java 应用端程序调用 GZIP 压缩类对数据进行编码压缩后入库 ,然后从数据库取出进行解压,原来再 mysql 数据库中是正常的,但迁移到 ...
- HarmonyOS实践之应用状态变量共享
平时在开发的过程中,我们会在应用中共享数据,在不同的页面间共享信息.虽然常用的共享信息,也可以通过不同页面中组件间信息共享的方式,但有时使用应用级别的状态管理会让开发工作变得简单. 根据不同的使用 ...
- Solon 的事务管理工具类(TranUtils)
Solon 在编码上,是强调注解与手写并重的一个风格.它有个 @Tran 注解,用于事务管理(可以参考:<事务的全局控制及应用>).这里,主要是讲讲它的手动处理工具类 TranUtils. ...
- 力扣442(java)-数组中重复的数据(中等)
题目: 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 .请你找出所有出现 两次 的整数,并以数组形式返回. 你必须设 ...
- 力扣303(java)-区域和检索-数组不可变(简单)
题目: 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= rig ...
- 力扣349(java&python)-两个数组的交集(简单)
题目: 给定两个数组 nums1 和 nums2 ,返回 它们的交集 .输出结果中的每个元素一定是 唯一 的.我们可以 不考虑输出结果的顺序 . 示例 1: 输入:nums1 = [1,2,2,1], ...