ybt
ybtoj专项训练
SSL_GYX
座右铭:言念君子,温其如玉。
展开
-
【冲刺 NOIP2022 模拟赛 B 组 Day5】B. 选择人员
【冲刺 NOIP2022 模拟赛 B 组 Day5】B. 选择人员原创 2022-10-24 20:11:57 · 357 阅读 · 1 评论 -
【冲刺 NOIP2022 模拟赛 B 组 Day5】A. 数字计数
【冲刺 NOIP2022 模拟赛 B 组 Day5】A. 数字计数原创 2022-10-24 19:53:29 · 262 阅读 · 0 评论 -
【ybt】【状压DP】【例题4】炮兵阵地
炮兵阵地LinkLinkLink解题思路设 fi,j,kf_{i,j,k}fi,j,k 表示第 iii 行,第 iii 行状态为 jjj ,第 i−1i-1i−1 行状态为 kkk 的情况最大值。枚举 lll 表示第 n−2n-2n−2 行的状态,在这 333 行状态都不重叠的前提下,状态转移方程如下:fi,j,k=max(fi,k,l)f_{i,j,k}=\max(f_{i,k,l})fi,j,k=max(fi,k,l)code#include<iostream>#原创 2021-12-25 15:34:52 · 353 阅读 · 0 评论 -
【ybt】【状压DP】【例题2】最短路径
最短路径LinkLinkLink解题思路考虑状压 DPDPDP。设 fi,jf_{i,j}fi,j 为已经走过的状态为 iii ,当前节点为 jjj 的最小值。每次枚举一条路径的起点和终点进行转移,转移方程为:fi,j=min(fi−(1<<j−1),k+ak,j)f_{i,j}=\min(f_{i-(1<<j-1),k}+a_{k,j})fi,j=min(fi−(1<<j−1),k+ak,j)code#include<iostream&原创 2021-12-18 09:40:18 · 121 阅读 · 0 评论 -
【ybt】【状压DP】【例题1】种植方案
种植方案LinkLinkLink解题思路状压 DPDPDP 模板题。code#include<iostream>#include<cstdio>using namespace std;const int mod=1e8;int n,m;int a[20];int q[1<<12],tot;int f[20][1<<12];int main(){ cin>>n>>m; for(int i=1;i&原创 2021-12-17 21:23:10 · 316 阅读 · 0 评论 -
【ybt】【树形DP】【例题2】结点覆盖
结点覆盖LinkLinkLink解题思路这是一道树形DP。设 fi,0f_{i,0}fi,0 表示以 iii 为根的子树全部被覆盖,iii 的父亲被选的最小值。fi,1f_{i,1}fi,1 表示 iii 被选的最小值。fi,2f_{i,2}fi,2 表示 iii 的儿子被选在最小值。code#include<iostream>#include<cstdio>using namespace std;int n;int a[2010];int f[原创 2021-12-04 15:18:41 · 423 阅读 · 0 评论 -
【ybt】【树形DP例1】树上求和
树上求和Link解题思路模板题。设 fi,0f_{i,0}fi,0 表示第 iii 个点不选的最大值, fi,1f_{i,1}fi,1 表示第 iii 个点选的最大值。dfsdfsdfs 跑图,回溯求和。code#include<iostream>#include<cstdio>using namespace std;int n;int a[6010];int f[6010][2];int hd[6010],tot;struct abc{ i原创 2021-11-27 10:02:48 · 108 阅读 · 0 评论 -
【ybt2021.11.12】T2 字典之序
T2 字典之序link解题思路考虑贪心。在选每个字母的时候要保证它的后面有所有没有出现过的字母。每次从后往前找到直到每个未出现过字母都存在,记录下标。在上一次操作的下标后一位到找到的下标之间取最小的字母。可以保证这样找到的字符串字典序最小。code#include<iostream>#include<cstring>#include<cstdio>#include<string>using namespace std;stri原创 2021-11-13 10:30:29 · 714 阅读 · 0 评论 -
【ybt2021.11.12】T1 他的世界
T1 他的世界link解题思路“暴力也能过”code#include<iostream>#include<cstdio>using namespace std;int T;int n,m;int main(){ freopen("number.in","r",stdin); freopen("number.out","w",stdout); cin>>T; while(T--) { scanf("%d%d",&n,&原创 2021-11-13 10:22:25 · 248 阅读 · 0 评论 -
【ybt】【动态规划 区间 课过 例2】木板涂色
木板涂色题目链接:YbtOJ/Luogu解题思路区间 DPDPDP 。设 fl,rf_{l,r}fl,r 表示将区间 [l,r][l,r][l,r] 涂成目标形式的最小次数,转移方程如下:fl,r={minl<k≤r(fl,k−1+fk,r)(s[l]≠s[r])min(fl,r−1,fl+1,r)(s[l]=s[r]) f_{l,r}=\left\{\begin{array}{l}min_{l<k\leq r}(f_{l,k-1}+f_{k,r})&(s[l]\ne原创 2021-07-09 10:49:03 · 182 阅读 · 0 评论 -
【ybt】【动态规划 区间 课过 例1】石子合并
石子合并题目链接:YbtOJ/Luogu解题思路区间DP模板题。前缀和优化。code#include<iostream>#include<cstring> #include<cstdio>using namespace std;int n;int a[210];int s[210];int f[210][210];int main(){ cin>>n; for(int i=1;i<=n;i++) scanf("原创 2021-07-09 09:26:31 · 129 阅读 · 0 评论 -
【ybt】【动态规划 背包 课过 例3】宝物筛选
宝物筛选题目链接:YbtOJYbtOJYbtOJPSPSPS:这不是 LuoguLuoguLuogu 上的那道,是数据减弱版。解题思路多重背包模板。code#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n,W;int f[100010];int v[101000],w[110000],m[110000];int main(){ ci原创 2021-07-08 21:18:29 · 107 阅读 · 0 评论 -
【ybt】【动态规划 背包 课过 例2】货币系统
货币系统题目链接:YbtOJ/Luogu解题思路依题意得,我们只需要舍去可以被其他数字表示出来的数即可。code#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;int T;int n,maxn,ans;int a[100010];int f[100010];int main(){ cin&g原创 2021-07-08 10:45:56 · 161 阅读 · 0 评论 -
【ybt】【动态规划 背包 课过 例1】采药问题
采药问题题目链接:YbtOJ/Luogu解题思路01背包模板题。code#include<iostream>#include<cstdio>using namespace std;int t,n;int f[110][1010];int w[110],v[110];int main(){ cin>>t>>n; for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&v[i原创 2021-07-08 10:31:37 · 97 阅读 · 0 评论 -
【ybt】【数据结构 倍增 课过 例3】树上距离
树上距离题目链接:YbtOJ解题思路LCA模板题code#include<iostream>#include<cstdio>using namespace std;int n,m;int dep[100010];int dis[100010];int f[100010][21];int hd[100010],tot;struct abc{ int to,nxt,w;}b[100010];void add(int x,int y,int z)原创 2021-07-07 20:07:33 · 81 阅读 · 0 评论 -
【ybt】【数据结构 倍增 课过 例2】开车旅行
开车旅行题目链接:YbtOJ/Luogu解题思路我们可以先处理出 AAA 和 BBB 在每个城市会下一个前往的城市是哪个,这个可以用双向链表来处理。然后我们就可以进行倍增,转移式如下:{f0,i,,j=f0,f0,i,j−1,j−1dis0,i,j=dis0,i,j−1+dis0,f0,i,j−1,j−1dis1,i,j=dis1,i,j−1+dis1,f0,i,j−1,j−1\begin{cases} f_{0,i,,j}=f_{0,f_{0,i,j-1},j-1} \\dis_{0,i,j原创 2021-06-13 15:03:48 · 154 阅读 · 0 评论 -
【ybt】【数据结构 倍增 课过 例1】查找编号
查找编号题目链接:YbtOJ/Luogu解题思路讲真的这玩意儿是二分的模板题。不过YbtOJ给的是倍增的模板,那就是倍增的模板咯。code#include<iostream>#include<cstdio>using namespace std;int n,m;int a[2000010];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) scanf("%d",&a[原创 2021-06-12 16:04:48 · 116 阅读 · 0 评论 -
【ybt】【数据结构 线段树 课过 例4】维护序列
老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。有长为 的数列,不妨设为 。有如下三种操作形式:把数列中的一段数全部乘一个值;把数列中的一段数全部加一个值;询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模 的值。原创 2021-06-12 15:34:51 · 195 阅读 · 0 评论 -
【ybt】【数据结构 线段树 课过 例3】小白逛公园
在小新家附近有一条“公园路”,路的一边从南到北依次排着 nn 个公园,小白早就看花了眼,自己也不清楚该去哪些公园玩了。一开始,小白就根据公园的风景给每个公园打了分。小新为了省事,每次遛狗的时候都会事先规定一个范围,小白只可以选择第 aa 个和第 bb 个公园之间(包括 a, ba,b 两个公园)选择连续的一些公园玩。小白当然希望选出的公园的分数总和尽量高咯。同时,由于一些公园的景观会有所改变,所以,小白的打分也可能会有一些变化。那么,就请你来帮小白选择公园吧。原创 2021-06-12 09:58:43 · 139 阅读 · 0 评论 -
【ybt】【数据结构 线段树 课过 例2】区间查改
给定数列 ,你需要依次进行 个操作,操作有两类:、 :给定 ,,,对于所有 ,将 加上 (换言之,将 分别加上 );、 :给定 ,,求 的值。原创 2021-06-11 20:03:45 · 95 阅读 · 0 评论 -
【ybt】【数据结构 线段树 课过 例1】求区间和
求区间和题目链接:YbtOJ解题思路线段树模板题。code#include<iostream>#include<cstdio>#define int long long using namespace std;int n,m;struct abc{ int s; int x,y;}tree[400010];void build(int now,int l,int r){ tree[now].x=l; tree[now].y=r; if(l原创 2021-06-02 17:36:49 · 91 阅读 · 0 评论 -
【ybt】【数据结构 RMQ 课过 例4】矩阵最值
矩阵最值题目链接:YbtOJ解题思路二维st表模板题。code#pragma GCC optimize(2)#include<iostream>#include<cstdio>#include<cmath>#define int long longusing namespace std;int n,m,T;int a[260][260];int f[260][260][21][21]; signed main(){ cin>&原创 2021-06-02 17:04:54 · 206 阅读 · 0 评论 -
【ybt】【数据结构 RMQ 课过 例3】与众不同
与众不同题目链接:YbtOJ解题思路设 lastilast_ilasti 表示 iii 上一次出现的位置。设 preipre_iprei 表示以 iii 结尾的最长完美序列的启示位置,显然 prei=max(prei−1,lastai)pre_i=\max(pre_{i-1},last_{a_i})prei=max(prei−1,lastai) 。我们先处理出 lastlastlast 和 preprepre ,然后二分出一个 lenlenlen,lenlenlen 的左边可以直原创 2021-05-30 15:37:27 · 389 阅读 · 0 评论 -
【ybt】【数据结构 RMQ 课过 例2】静态区间
给定一行 个正整数 。 次询问,每次询问给定一个区间 ,输出 的最大公因数。原创 2021-05-26 16:46:49 · 102 阅读 · 0 评论 -
【ybt】【数据结构 RMQ 课过 例1】数列区间
输入一串数字,给你 个询问,每次询问就给你两个数字 ,要求你说出 到 这段区间内的最大数。原创 2021-05-26 16:43:07 · 115 阅读 · 0 评论 -
【ybt】【数据结构 树状数组 课过 例6】区间修改区间查询
区间修改区间查询题目链接:YbtOJ解题思路我们可以把区间修改区间查询的差分与单点修改区间查询结合起来,也就是二维树状数组维护二维前缀和再加上差分。code#include<iostream>#include<cstdio>#define lb(x) (x&(-x))#define int long longusing namespace std;int n,m,p;int a,b,c,d,x;int tree[2050][2050][5];原创 2021-05-22 16:10:56 · 127 阅读 · 0 评论 -
【ybt】【数据结构 树状数组 课过 例5】单点修改区间查询
单点修改区间查询题目链接:YbtOJ解题思路模板题,二维树状数组维护前缀和。code#include<iostream>#include<cstdio>#define lb(x) (x&(-x))#define int long longusing namespace std;int n,m,q;int x,y,k;int a,b,c,d;int tree[5010][5010];void in(int x,int y,int z){原创 2021-05-22 12:08:49 · 102 阅读 · 0 评论 -
【ybt】【数据结构 树状数组 课过 例4】区间修改区间查询
区间修改区间查询题目链接:YbtOJ解题思路区间操作,我们可以想到差分。设差分数组为 ddd ,那么求 ∑i=1nai\sum\limits_{i=1}^na_ii=1∑nai 就可以转换为 ∑i=1n∑j=1idi\sum\limits_{i=1}^n\sum\limits_{j=1}^id_ii=1∑nj=1∑idi 。暴力枚举是 O(n2)O(n^2)O(n2) 的,我们考虑优化。我们可以发现:d1d_1d1 出现了 nnn 次,d2d_2d2 出现了 n−1n-1n−1原创 2021-05-22 10:10:41 · 142 阅读 · 0 评论 -
【ybt】【数据结构 树状数组 课过 例3】严格上升子序列数
严格上升子序列数题目链接:YbtOJ解题思路我们设 fi,jf_{i,j}fi,j 表示以 iii 结尾,长度为 jjj 的序列数。如果直接暴力做,那是 O(n3)O(n^3)O(n3) 的时间复杂度。我们可以离散化,然后用树状数组维护每一种方案数的情况。其实和逆序对挺像的说(无端感受)code#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>原创 2021-05-22 08:33:30 · 248 阅读 · 0 评论 -
【ybt】【数据结构 树状数组 课过 例2】逆序对
逆序对题目链接:YbtOJ/Luogu解题思路我们可以进行离散化,然后用树状数组维护下标,每次在树状数组中找下标比当前小的就可以了。code#include<algorithm>#include<iostream>#include<cstdio>#define lb(x) (x&(-x))#define int long longusing namespace std;int n,ans;int c[5000010];struct原创 2021-05-21 21:38:20 · 152 阅读 · 0 评论 -
【ybt】【数据结构 树状数组 课过 例1】单点修改区间查询
单点修改区间查询题目链接:YbtOJ/luogu解题思路树状数组模板题,不解释。code#include<iostream>#include<cstdio>#define int long long#define lb(x) (x&(-x))using namespace std;int n,q;int c[1000010];void in(int x,int y){ for(;x<=n;x+=lb(x)) c[x]+=y;}原创 2021-05-20 16:37:40 · 114 阅读 · 0 评论 -
【ybt】【图论 强连通 课过 例4】恒星的亮度
恒星的亮度题目链接:恒星的亮度题目描述解题思路我们可以先从小向大建边,然后缩点。如果缩点后同一集合内有两个点是小于的关系,那么不符合题意,无解。再用贪心的思想拓扑,累加答案即可。code#include<iostream>#include<cstdio>#include<queue>#define int long longusing namespace std;queue<int> q;int n,m;int tm,tt原创 2021-05-15 12:02:06 · 131 阅读 · 0 评论 -
【ybt】【图论 强连通 课过 例3】最大半连通子图
一个有向图 称为半连通的,如果满足:,满足 或 ,即对于图中任意两点 ,存在一条 到 的有向路径或者从 到 的有向路径。若 满足 , 是 中所有跟 有关的边,则称 是 的一个导出子图。若 是 的导出子图,且 半连通,则称 为 的半连通子图。若 是 所有半连通子图中包含节点数最多的,则称 是 的最大半连通子图。给定一个有向图 ,请求出 的最大半连通子图拥有的节点数 ,以及不同的最大半连通子图的数目 。由于 可能比较大,仅要求输出 。原创 2021-05-15 08:51:33 · 104 阅读 · 0 评论 -
【ybt】【图论 强连通 课过 例2】受欢迎的牛
每头奶牛都梦想成为牛棚里的明星,被所有奶牛喜欢的奶牛就是一头明星奶牛。每头奶牛总是喜欢自己的,奶牛之间的“喜欢”是可以传递的——如果 A 喜欢 B,B 喜欢 C,那么 A 也喜欢 C。牛栏里共有 头奶牛,给定一些奶牛之间的喜欢关系,请你算出有多少头奶牛可以当明星。原创 2021-05-12 16:59:04 · 117 阅读 · 0 评论 -
【ybt】【图论 强连通 课过 例1】有向图缩点
有向图缩点题目链接:有向图缩点题目描述解题思路强连通分量模板,用 TarjanTarjanTarjan 算法。code#include<iostream>#include<cstdio>#include<queue>using namespace std;queue<int> q;int n,m;int ans;int tm,tt;int a[10010];int v[10010];int f[10010];int d原创 2021-05-05 16:50:08 · 212 阅读 · 0 评论 -
【ybt】【数据结构 二分堆 课过 例4】工作安排
工作安排题目链接:工作安排题目描述解题思路我们先以时间为第一关键字、利润为第二关键字排序,然后贪心,在当前时间内选最大的利润。code#include<algorithm>#include<iostream>#include<cstdio>#include<queue>#define int long longusing namespace std;priority_queue<int> q;int n,m;in原创 2021-05-05 10:41:41 · 82 阅读 · 0 评论 -
【ybt】【数据结构 二分堆 课过 例3】龙珠游戏
龙珠游戏题目链接:龙珠游戏题目描述解题思路贪心,堆处理。code#include<iostream>#include<cstdio>#include<queue>using namespace std;priority_queue<pair<int,int> > q;int n;int a[100010];int v[100010];int nxt[1000010];void get(){ int t=q原创 2021-05-05 08:41:48 · 120 阅读 · 0 评论 -
【ybt】【数据结构 二分堆 课过 例2】序列合并
序列合并题目链接:序列合并题目描述解题思路我们可以把它当成贪心来想:首先将 aaa 数列的第一个与 bbb 数列的每一个匹配,用堆储存,每次取最小值,在将 aaa 数列向后移一位进行匹配,重复 nnn 遍。code#include<iostream>#include<cstdio>#include<queue>using namespace std;priority_queue<pair<int,pair<int,int>原创 2021-05-05 08:35:37 · 109 阅读 · 0 评论 -
【ybt】【数据结构 二分堆 课过 例1】合并果子
合并果子题目链接:合并果子题目描述解题思路贪心,每次取最小的两堆合并,用堆处理。code#include<iostream>#include<cstdio>#include<queue>using namespace std;priority_queue<int> q;int n;int ans;int main(){ cin>>n; for(int i=1;i<=n;i++) { int a;原创 2021-05-04 16:29:06 · 115 阅读 · 0 评论 -
【ybt】【图论 最短路 课过 例4】汽车加油
汽车加油题目链接:汽车加油题目描述解题思路我们可以跑 spfaspfaspfa ,模拟题目要求,贪心取最小值即可。code#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int xn[5]={0,0,1,0,-1};const int yn[5]={0,1,0,-1,0};const int mod=1e7+7;int n,k,a,b原创 2021-05-04 15:23:08 · 140 阅读 · 0 评论