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入门使用指南 前言 有看到好文欢迎推荐(毛遂自荐也可 ...
随机推荐
- tensorflow源码分析——LSTMCell
LSTMCell 是最简单的LSTMCell,源码位于:/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py.LSTMCell 继承了RNN ...
- 解决Python print输出不换行没空格的问题
今天在做编程题的时候发现Python的print输出默认换行输出,并且输出后有空格. 题目要求输出 122 而我的输出是: 1 2 2 于是我百度查到取消print自动换行的方法:就是在print的值 ...
- SAAS方法论
内容来源:https://12factor.net/ 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS).12-Factor 为构建如下的 SaaS 应用提供了方法论 ...
- redis 管理工具
1.redis studio 2.redis desktop manager
- oracle-参数文件的备份与还原
oracle-参数文件的备份与还原 参数文件是实例启动到nomount状态的必要条件,规定了实例的行为特征,位置跟操作系统相关,一般unix类的系统在$ORACLE_HOME/dbs目录下 (wind ...
- hadoop报错WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
19/06/14 10:44:58 WARN common.Util: Path /opt/hadoopdata/hdfs/name should be specified as a URI in c ...
- 【Hibernate】---【注解】一对一
一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-con ...
- 关于win10系统如何调用debug查看CPU汇编指令和内存
下载安装DOSBox.网上提供下载地址:DOSBOX Debug是DOS(Disk Operating System,磁盘操作系统).windows提供的实模式(8086方式)程序的调试工具.使用它, ...
- ugui点击穿透判断
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Eve ...
- 【Qt开发】设置Qt应用程序图标
[Qt开发]设置Qt应用程序图标 标签:[Qt开发] 首先,准备一个图标,例如:zx.ico,并新建一个文本文档,在里面添加一行: IDI_ICON1 ICON DISCARDABLE"zx ...