回顾复习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也是有映射(输 ...
随机推荐
- 数据解析之Beautifulsoup
一.BeautifulSoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...
- #贪心,二叉堆#洛谷 1954 [NOI2010] 航空管制
题目 分析 首先考虑可行方案,很容易想到拓扑排序, 但是如果建正图第一类的限制有可能不能满足, 考虑第一类限制其实时间倒流就是在 \(T\) 时刻之后才能选它. 那么直接建反图然后 \(a_i\) 大 ...
- #三分,分治,计算几何,prim#JZOJ 3860 地壳运动
题目 \(q\)组询问查询最小生成树,边权为\(u*k1+v*k2\)(\(k1,k2\)每次询问都不同) \(n\leq 35,m\leq 25000,q\leq 200000\) 分析 纯\(\t ...
- 如何知道 window 的 load 事件已经触发
背景 为了使页面加载更快,常常将一些不重要的第三方脚本在页面完成加载后进行懒加载. // 做一些不影响业务的事情 window.addEventListener('load', () => { ...
- openGauss数据与PostgreSQL的差异对比
openGauss 数据与 PostgreSQL 的差异对比 前言 openGauss 数据库已经发布 2.0.1 版本了,中启乘数科技是一家专业的专注于极致性能的数据库服务提供商,所以也关注 ope ...
- os.path.splitext
os.path.splitext是Python标准库中的一个函数,它可以将一个文件路径拆分成两部分:文件名和文件扩展名.例如: 点击查看代码 import os file_path='avercrop ...
- 插入排序的基本实现【数据结构与算法—TypeScript 实现】
笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置 特性 复杂度分析 时间复杂度: 最好情况 ...
- html 渲染原理
渲染 从上面这个图上,我们可以看到,浏览器渲染过程如下: 解析HTML,生成DOM树,解析CSS,生成CSSOM树 将DOM树和CSSOM树结合,生成渲染树(Render Tree) Layout(回 ...
- 争论不休的一个话题:金额到底是用Long还是BigDecimal?
在网上一直流传着一个争论不休的话题:金额到底是用Long还是用BigDecimal?这个话题一出在哪都会引起异常无比激烈的讨论.... 比如说这个观点:算钱用BigDecimal是常识 有支持用Lon ...
- 函数模板 及显式具体化(C++)
函数模板 将同一种算法应用与不同类型的函数时 #include<iostream> #include<string> template <typename T> v ...