CSP-S 赛前模板复习
快读模板
这个连算法都算不上。。。
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
二分查找
这是我学过的第一个算法qwq
sort(a+1, a+1+n);
bool Find(int x) { //二分查找x在a中是否出现
int l = 1, r = n, mid;
while(l <= r) {
mid = (l+r)>>1;
if(x == a[mid]) return 1;
if(x < a[mid]) r = mid - 1;
else l = mid + 1;
}
return 0;
}
二分答案
bool check() {
}
int main()
{
// 单调递增答案 使最大值最小
int l = (), r = (), mid, ans;
while(l <= r) {
mid = (l+r)>>1;
if(check()) {
ans = mid;
r = mid - 1;
} else l = mid + 1;
}
printf("%d\n",ans);
// 单调递减答案 使最小值最大
int l = (), r = (), mid, ans;
while(l <= r) {
mid = (l+r)>>1;
if(check()) {
ans = mid;
l = mid + 1;
} else r = mid - 1;
}
return 0;
}
离散化
const int N = 1e6+7;
int n;
int a[N],t[N];
int main()
{
n = read();
for(int i=1;i<=n;++i)
t[i] = a[i] = read(); //t[] 是临时数组
sort(t+1, t+1+n);
int m = unique(t+1, t+1+n) - (t+1);
for(int i=1;i<=n;++i)
a[i] = lower_bound(t+1, t+1+m, a[i]) - t;
for(int i=1;i<=n;++i)
printf("%d ",a[i]); //离散化后数组
return 0;
}
ST表 & 倍增一般算法
const int N = 100007;
int n,m;
int lg[N];
int f[N][30]; //f[i,j]表示 [i - 2^j]区间的最大值
void RMQ() {
for(int j=1;j<=21;++j)
for(int i=1;i<=n;++i) if(i+(1<<j)-1 <= n) {
f[i][j] = max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
}
inline int Query(int l,int r) {
int k = lg[r-l+1];
return max(f[l][k], f[r-(1<<k)+1][k]);
}
int main()
{
n = read(), m = read();
for(int i=1;i<=n;++i)
f[i][0] = read();
RMQ();
for(int i=2;i<=n;++i)
lg[i] = lg[i>>1] + 1;
while(m--) {
int l = read(), r = read();
printf("%d\n",Query(l,r));
}
return 0;
}
KMP
什么?? 我已经不记得KMP的思想了!!??
const int N = 1000007;
int kmp[N];
char a[N],b[N];
int main()
{
cin>>a+1>>b+1;
int la = strlen(a+1), lb = strlen(b+1);
int j = 0;
for(int i=2;i<=lb;++i) {
while(j && b[i]!=b[j+1]) j = kmp[j];
if(b[i] == b[j+1]) ++j;
kmp[i] = j;
}
j = 0;
for(int i=1;i<=la;++i) {
while(j && a[i]!=b[j+1]) j = kmp[j];
if(a[i] == b[j+1]) ++j;
if(j == lb) printf("%d\n",i-lb+1), j = kmp[j];
}
for(int i=1;i<=lb;++i)
printf("%d ",kmp[i]);
return 0;
}
Dfs(有向图)
int vis[N];
void Dfs(int u/*,,,其他状态*/) {
vis[u] = 1; /*其他初始化*/
for(int i=head[u];i;i=edge[i].next /*其他状态转移*/) {
int v = edge[i].to;
if(!vis[v] /*&& 其他限制条件*/) {
//搜索 / 操作
Dfs(v);
//回溯
}
}
}
Bfs(有向图)
int vis[N];
void Bfs(/*传入条件*/) {
memset(vis, 0, sizeof(vis));
queue<int> q;
q.push(1); vis[1] = 1; /*其他初始化*/
while(!q.empty()) {
int u = q.front(); q.pop(); //或是其他结构体(状态空间)
for(int i=head[u];i;i=edge[i].next) {
int v = edge[i].to;
if(!vis[v]) {
/*其他操作*/ vis[v] = 1; q.push(v);
}
}
}
}
并查集
const int N = 1e5+7;
int n,m;
struct UnionFind {
int pre[N];
void Init() {
for(int i=1;i<=n;++i) pre[i] = i;
}
int Find(int x) {
return x==pre[x]?x:pre[x] = Find(pre[x]);
}
void join(int x,int y) {
int fx = Find(x), fy = Find(y);
if(fx != fy) pre[fx] = fy;
}
}B;
树状数组
const int N = 500007;
int n,m;
struct Tree_A { //树状数组
int c[N];
void Add(int x,int y) {
while(x<=n) c[x]+=y, x+=x&-x;
}
int Sum(int x) {
int res = 0;
while(x>0) res += c[x], x-=x&-x;
return res;
}
inline int Query(int x,int y) {
return Sum(y) - Sum(x-1);
}
}T;
CSP-S 赛前模板复习的更多相关文章
- wawawa8的模板复习计划
wawawa8的模板复习计划 数据结构 //手写堆 [link][https://www.luogu.org/problemnew/show/P3378] //并查集 [link][https://w ...
- CSP前模板复习
Tarjan 求强连通分量 展开查看 #include #include #include using namespace std; const int N = 1e4 + 1e3; int n, m ...
- 模板复习【updating】
马上就要noi了……可能滚粗已经稳了……但是还是要复习模板啊 LCT: bzoj2049 1A 7min # include <stdio.h> # include <string. ...
- NOIP前的模板复习和注意事项
联赛除去今天刚好只有一个星期了,最后一个星期也很关键,要吃好睡好保持心情愉悦.当然也免不了最后的复习计划. 首先是模板,之前还有很多模板没有复习到,这些东西是一定要落实到位的. 每天往后面写一点... ...
- noip模板复习
自己敲模板还是有很多容易错的地方 写在注释里面了 LCA #include<bits/stdc++.h> #define REP(i, a, b) for(register int i = ...
- CSP2019赛前小复习:
虽然觉得复习也没有什么用,还不吃好睡好,保持好心情. SA: 坑就那几个. \(s[0]=s[n+1]=-1\). 和\(rank\)交换的\(tp\)数组的\(tp[n+1]=0\). 一般加上这两 ...
- noip考前模板复习
网络流 Dinic(搭配飞行员) //Serene #include<algorithm> #include<iostream> #include<cstring> ...
- 【 D3.js 选择集与数据详解 — 5 】 处理模板的应用
在[选择集与数据 - 4]一文中,介绍了一个update.enter.exit的处理模板,这个模板很常用,本文将通过一个例子来讲解其使用方法. 1. 模板 复习一下上一章提到的模板. //绑定数据后, ...
- REHの收藏列表
搬运自本人的AcWing,所以那里的文章会挺多. 友链(同类文章) :bztMinamoto 世外明月 mlystdcall 新人手册:AcWing入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...
随机推荐
- sklearn—LinearRegression,Ridge,RidgeCV,Lasso线性回归模型简单使用
线性回归 import sklearnfrom sklearn.linear_model import LinearRegression X= [[0, 0], [1, 2], [2, 4]] y = ...
- Visual Studio Code - 代码提示使用 webpack alias 的模块
使用 PathIntellisense 还是使用jsconfig.json? 使用 PathIntellisense 只能提示模块路径,并无法让 vs code 的 Intellisense 知道这个 ...
- python学习之requests基础
学习地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html#id2 使用requests发送网络请求 一.导入requ ...
- win10 iis部署后 浏览目录报错 500.19
错误摘要HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效.详细错误信息模块 IIS Web Core 通知 BeginReq ...
- Spring MVC的RequestContextHolder使用误区
JShop简介:jshop是一套使用Java语言开发的B2C网店系统,致力于为个人和中小企业提供免费.好用的网店系统. 项目主页:http://git.oschina.net/dinguangx/js ...
- IntelliJ IDEA 配置 Hadoop 源码阅读环境
1.下载安装IDEA https://www.jetbrains.com/idea/download/#section=windows 2.下载hadoop源码 https://archive.apa ...
- 深入理解java:1.3.2 JVM监控与调优
学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之. 本篇,来看看[ 如何监控和优化GC机制.] 通过学习,我觉得JVM监控与调优,主要在3个着眼点上: 1,如何配置 ...
- Docker数据持久化及实战(Nginx+Spring Boot项目+MySQL)
Docker数据持久化: Volume: (1)创建mysql数据库的container docker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD= my ...
- springboot无法找到mapper😵
今天在学习springboot的过程中遇到mapper无法找到的问题,困扰了很久
- 2019上海网络赛B题(差分 + 离散化 or 差分 + 思维)
这题.....队里都没怎么训练差分,导致败北...写了一堆线段树嘤嘤嘤,到最后也是超时,比赛结束后看到了差分的思想于是就去学了一手. 其实了解差分思想的一眼就能看出来是差分了.但是如果对n差分的话很明 ...