Ybtoj
文章平均质量分 51
。十二。
这个作者很懒,什么都没留下…
展开
-
【Ybtoj】B. 最小时间【二分算法强化训练】
解题思路二分 t 的最小值,就可以得到所有物品在时刻t的价值,将他们排序,判断在取少于m个的情况下是否可以>=s即可。PS:全部sort会超时,可以用到 nthnthnth_element(a+1,a+m,a+n+1,greater<ll>());element(a+1,a+m,a+n+1,greater<ll>());element(a+1,a+m,a+n+1,greater<ll>()); 就是在1~n中确定其中第m个位置的数是多少,m左侧的都大于它...原创 2021-12-18 17:30:09 · 147 阅读 · 0 评论 -
【Ybtoj】B.恐狼后卫【区间DP强化训练】
解题思路考虑区间DP,格式一般为枚举长度——左端点——断电。断电看题目要求给予含义。此题断电为枚举最后一个选的狼,因为区间DP要保证将被合并的小区间是已知的最优的量,假设枚举第一个选的狼,那么它会影响到左右两个区间的攻击力值。找到思路,易得:k的攻击力值为b[i−1]+b[j+1]+a[k]b[i-1]+b[j+1]+a[k]b[i−1]+b[j+1]+a[k]则,f[i][j]=min(f[i][j],f[i][k−1]+f[k+1][j]+m[k]∗(b[i−1]+b[j+1]+a[k])...原创 2021-12-18 17:21:06 · 187 阅读 · 1 评论 -
【Ybtoj】 3.块的计数【树形DP强化训练】
解题思路设g[u]g[u]g[u]表示以u的子树内所有联通块个数(必定选取u),f[u]f[u]f[u]为u的子树内不包含最大点权的联通块个数(必定选取u)则g[u]=∏v∈sonu(f[v]+1)g[u]=∏_{v∈son_u}(f[v]+1)g[u]=∏v∈sonu(f[v]+1)而,当u不是最大点权时,f[u]=∏v∈sonu(f[v]+1)f[u]=∏_{v∈son_u}(f[v]+1)f[u]=∏v∈sonu(f[v]+1),否则,f[u]=0f[u]=0f[u]=0最终答案...原创 2021-12-18 17:11:38 · 118 阅读 · 0 评论 -
【Ybtoj】A. 最优组队【状压DP强化训练】
解题思路一个状态的子状态:例:5=0101,它的子状态有0100,0001,0101.手推可得:while(t) {t=(t-1)&s;}可以得到s的所有子状态。。代码#include <bits/stdc++.h>#define ll long longusing namespace std;int n,a[1<<16],f[1<<16];int main(){ scanf("%d",&n); for(int i=1;...原创 2021-12-18 17:05:04 · 130 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day8】C. 树上跑步【欧拉序】
解题思路》》欧拉序+FY代码#include <bits/stdc++.h>#define ll long long#define N 500010using namespace std;vector<int>st[N];int T,n,m,cnt,tot,ans,x;int son[N],dep[N],f[N],head[N],q[N*2],ok[N],fir[N*2];struct c{ int x,next;}a[N];void add...原创 2021-11-13 17:04:58 · 382 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day8】D. 城市网络【倍增】
解题思路gi,jg_{i,j}gi,j表示从 i 节点往上购买 2j2^j2j 次到达的节点,如果我们知道了 gi,0g_{i,0}gi,0就可以求出所有了(倍增的精髓)gi,0g_{i,0}gi,0 就是求 i 节点从下往上第一个大于 aia_iai 的节点,这也可以用倍增来完成,用一个 maxni,jmaxn_{i,j}maxni,j来维护从 i 节点往上2j2^j2j步这中的最大值,若maxni,j<aimaxn_{i,j}<a_imaxni,j<ai...原创 2021-11-13 12:00:50 · 629 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day9】B. 字典之序【贪心】
解题思路假设在 i 这个位置上某个字符 s[i] 最后 一次出现了,那么 i 及 i 之前的所有未确定字符中最小的一个字符 s[p] 应该被保留,然后再从[p+1,i]里面找最小的保留,p不断更新,一直到 p==i 为止,代码#include <bits/stdc++.h>#define ll long longusing namespace std;int l,c,id,used[200],cnt[200];string s,ans;int main(){ fr...原创 2021-11-13 09:42:19 · 421 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day9】A. 他的世界
解题思路每次从 开始一个数一个数的枚举,每发现一个好数就输出。容易发现,好 数其实很多,两个好数之间的间距也不会太大,这样就足以通过所有数据。代码#include <bits/stdc++.h>#define ll long longusing namespace std;int n,m,T,w[20],v[4];bool check(int x) { v[1]=0,v[2]=0; int cnt=0; while(x) { w[cnt]=x%3; v...原创 2021-11-13 09:37:38 · 226 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day8】最大匹配【树形DP】
解题思路考虑树形DP,设:f[i]f[i]f[i]表示以i为子树且不选他与儿子的连边时,最多能匹配多少条边ff[i]ff[i]ff[i]表示以i为子树最多能匹配多少条边。g[i]g[i]g[i]表示以i为子树且不选他与儿子的连边时,有几种方案能匹配最多的边gg[i]gg[i]gg[i]表示以i为子树有几种方案能匹配最多的边因为是连通图,可以从任意一个点往下搜,然后一直到底,回溯处理。ff[x]ff[x]ff[x]初值是f[x]f[x]f[x],gg[x]gg[x]gg[x]初值是g...原创 2021-11-06 17:20:57 · 103 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day7】A. DNA 序列【字典树】
解题思路Trie树存一下子串就行了,一开始用map被卡了两个点代码#include<bits/stdc++.h>using namespace std;string s,ss;int l,k,tot,ans;int tree[1000010][11],e[1000010];void insert(string s){ int p=0; for(int i=0;i<k;i++) { int c=s[i]-'A'; if(!tree[p][c])tr...原创 2021-10-30 14:28:47 · 114 阅读 · 0 评论 -
【Ybtoj 贪心算法强化】最大积分
解题思路把积分高的和等级高的相乘跟优,所以从小到大排序代码#include <bits/stdc++.h>#define ll long longusing namespace std;int n,m;ll ans,t[150],w[150];struct c{ ll k,c;}a[150]; bool cmp(c l,c r){ return l.c<r.c;}int main(){ scanf("%d",&n); for(int ...原创 2021-10-30 14:04:45 · 126 阅读 · 0 评论 -
【Ybtoj 递推算法强化】划分数列
解题思路设lx[i]表示以i为结尾的最长不下降序列的起点,ly[i]表示以i为结尾的最长不上升序列的起点,然后dp[i]表示到i为止最少要分多少段,每次更新完lx[i],ly[i]lx[i],ly[i]lx[i],ly[i]后更新‘在这里插入代码片‘dp[i]`在这里插入代码片`dp[i]‘在这里插入代码片‘dp[i]dp[i]=min(dp[lx[i]]+1,dp[ly[i]]+1);dp[i]=min(dp[lx[i]]+1,dp[ly[i]]+1);dp[i]=min(dp[lx[i]]+...原创 2021-10-30 13:58:20 · 95 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day4】C. 树上交集【换根DP】
解题思路因为没有交集的路径求很麻烦,所以我们求 (所有的路径组 − 相交的路径组)(a,b)与(c,d)相交的路径可以分为下面两种,两条的l c a 为同一个,或是 c从(a,b)的lcal c alca向上走所以我们设 fpifp_ifpi为以iii为根且lcal c alca的子树中,路径为p 的个数;gpigp_igpi 为以i 为根的子树,路径长为q 的路径,一截在子树内一截在子树外的个数。fq、gqfq、gqfq、gq同理.那么所有的路径组就为 (∑fpi)∗(∑fqi)(\...原创 2021-09-28 19:50:32 · 221 阅读 · 0 评论 -
【Ybtoj】【 NOIP2021 模拟赛 B 组 Day4】B. 循环数组
解题思路对于一个数x,只要一个区间中出现了x,而不论它的个数是多少,它对这个区间权值的贡献都只是1。那么我们考虑枚举每一个x来求出含有它的区间的个数,然而直接求很麻烦,我们运用补集转化的思想,求出不含x的区间个数,用总区间个数减去这一部分的值,即为x的贡献。我们假设得到了x在这个n×k的数组中出现的位置分别为p1,p2,⋯,pmp1,p2,⋯,pmp1,p2,⋯,pm因为对于一个长度为x的序列,它总共有x(x+1)/2x(x+1)/2x(x+1)/2的子区间(一个数也算做一个区间),所以我们设...原创 2021-09-28 19:29:49 · 121 阅读 · 0 评论 -
【Ybtoj】【 NOIP2021 模拟赛 B 组 Day4】A. 统计集合【数学】
解题思路代码#include<cstdio>#include<iostream>#include<queue>#include<algorithm>#include<cstring>#include<cmath>#define ll unsigned long longusing namespace std;const ll mod=1e9+7;int n;ll a[1000010],maxn,min...原创 2021-09-28 19:21:52 · 86 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day2】B. 乘积求和【归并排序】
解题思路看懂题目就很好做了,就是把所有构成逆序对的两个数相乘,再乘上他们在多少个区间存在过。用归并排序+前缀和:ans+=a[i].x∗a[j].x∗i∗(n−j+1)ans+=a[i].x* a[j].x* i * (n-j+1)ans+=a[i].x∗a[j].x∗i∗(n−j+1),预处理a[i].y=a[i].x∗ia[i].y = a[i].x * ia[i].y=a[i].x∗i, a[i].suma[i].suma[i].sum保存a[i].ya[i].ya[i].y的前缀和,这...原创 2021-09-26 21:54:14 · 126 阅读 · 0 评论 -
【Ybtoj】【 NOIP2021 模拟赛 B 组 Day2】A. 加加减减
解题思路我们对 a 数组进行排序,易证最优决策为:存在位置 i,使得 a1—>aia_1—>a_ia1—>ai均加上k ,ai+1—>ana_{i+1}—>a_nai+1—>an 均减去 k。枚举每一个i 计算答案,sum=max(a[n]−a[1]−2∗k,a[i−1]+2∗k−a[i])sum=max(a[n]-a[1]-2*k,a[i-1]+2*k-a[i])sum=max(a[n]−a[1]−2∗k,a[i−1]+2∗k−a[i]),最大的减...原创 2021-09-26 21:44:32 · 222 阅读 · 0 评论 -
【Ybtoj】【NOIP2021 模拟赛 B 组 Day3】D. 双面扑克【并查集】【图论】
解题思路如果一张牌的两个数字分别为 x,yx , yx,y,我们将x和y连边,那么最终就会形成几堆连通块。如果一个连通块是一棵树,那么选每一条边相对于可以选一个数字。所以我们记录每一个连通块的边数、最大值和最小值,如果max−min≥sizemax−min≥sizemax−min≥size,那么久不可能构成一个min∼maxmin∼maxmin∼max的顺子,也就是所有包含[min,max][min,max][min,max]的询问都不可以选择成功。统计下所以不合理的区间,将取件按照左端点排...原创 2021-09-23 19:26:58 · 123 阅读 · 0 评论 -
【Ybtoj 】【NOIP2021 模拟赛 B 组 Day3】B. 仙人之环【找环】
解题思路知道这个以后比较容易发现要使连通块数量最大要优先处理非环边,因为非环边一删的话连通块个数能+1,环边的话要先删除一条边变成链,再在链上删除一条边才能使连通块个数+1,所以根据贪心思想我们要优先处理非环边,删完非环边后若还有剩余的话再处理环边。假设K够大的话,我们优先删比较大的环,这样的话才能十连通块个数最大。如何判断环边和非环边??用DFS暴力,记录每个点的dfs序,若存在一个环,最终一定会回到起点,所以假设当前为u节点时,v是儿子节点,若儿子节点已经标记过了,代表现在从v出发回到了v...原创 2021-09-22 19:31:59 · 140 阅读 · 0 评论 -
【Ybtoj 】【NOIP2021 模拟赛 B 组 Day3】A. 棋盘战争【博弈论】
解题思路当一个环无法被涂上任何颜色的时候,可以推断,——颜色一定是交替出现的。因为如果两个相同颜色连续,必定中间存在至少一个空位,这时另一种颜色必然会填上这个位置。所以,当一个环无法涂上任何颜色时,颜色出现的数量一定是偶数。所以后手一定会赢。 只有在环的大小为 1 时,先手可以赢。所以统计环大小为1的个数,若为奇数,就先手胜。代码#include<cstdio>#include<iostream>#include<queue>#include&...原创 2021-09-22 19:24:29 · 153 阅读 · 0 评论 -
【Ybtoj 第31章】第5章 博弈论
目录A. 【例题1】取火柴游戏B. 【例题2】数字游戏C. 【例题3】魔法珠D. 【例题4】剪纸游戏A. 【例题1】取火柴游戏解题思路》》洛谷linkNIM游戏模板 主要是输出方案必胜情况下 必有 ai xor x<xa_i~xor~x<xai xor x<x 找到aia_iai 并输出即可代码#include<iostream>#include<cstdio>#include<algori原创 2021-08-24 16:24:53 · 165 阅读 · 1 评论 -
【Ybtoj 第30章】组合数学
目录A. 【例题1】计算系数A. 【例题1】计算系数解题思路代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#include<set>#define ll原创 2021-08-24 15:54:28 · 150 阅读 · 0 评论 -
【Ybtoj 第29章例2】约数之和【同余问题】
解题思路代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#include<set>#define ll long long#define ldb long...原创 2021-08-18 18:47:32 · 151 阅读 · 0 评论 -
(纪中)7235. Stone Game【博弈论】
解题思路》》详情见 luogu代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#include<set>#define ll long long#defi...原创 2021-08-16 21:24:55 · 53 阅读 · 0 评论 -
【Ybtoj 第28章例5】余数之和【质数和约数】
解题思路代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#define ll long long#define ldb long doubleusing namesp...原创 2021-08-14 14:00:55 · 97 阅读 · 0 评论 -
【Ybtoj 第28章例4】反素数【质数和约数】
解题思路代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#define ll long long#define ldb long doubleusing namespa...原创 2021-08-14 13:23:38 · 154 阅读 · 0 评论 -
【Ybtoj 第28章例3】不定方程【质数和约数】
解题思路由原题的式子可推出:y=xn!x−n!y=\frac{xn!}{x-n!}y=x−n!xn!,我们设t=x−n!t=x-n!t=x−n!,则x=t+n!x=t+n!x=t+n!,得到y=n!+(n!)2ty=n!+\frac{(n!)^2}{t}y=n!+t(n!)2,因为n和y是整数,所以t一段要是(n!)2(n!)^2(n!)2的约数,题目就变成了求(n!)2(n!)^2(n!)2的约数个数,即求∏i=1m(ci+1)∏_{i=1}^m(c_i+1)∏i=1m(ci+1)对于一...原创 2021-08-14 08:24:16 · 131 阅读 · 0 评论 -
【Ybtoj 第28章例2】质数距离【质数和约数】
解题思路首先我们发现:R−LR-LR−L 的范围很小,我们应该要能够快速求出 L∼RL∼RL∼R 之间的质数。显然有推论:任意一个合数 x 必定包含一个不超过 x\sqrt xx的质因子。所以我们可以筛出 [1,R][1,\sqrt R][1,R] 之间的所有质数,对于每个质数 pp,把 [L,R][L,R][L,R]中能被 ppp 整除的数标记为合数。最终没有被标记的数就是质数,对相邻的质数两两比较,找出差值最小和最大的即可。代码#include<iostream>#i...原创 2021-08-14 08:24:28 · 91 阅读 · 0 评论 -
【Ybtoj 第28章例1】线性筛素数【质数和约数】
解题思路欧拉筛就行了代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#define ll long long#define ldb long doubleusing ...原创 2021-08-13 22:22:17 · 90 阅读 · 0 评论 -
【Ybtoj 第27章例3】路径长度【期望问题】
解题思路设 ansians_iansi 表示从iii出发到n nn的路径总长度的期望 gig_igi 为iii的出度 每个点走向它连的点概率为1gi\frac{1}{g_i}gi1 就有 ansi=∑jansj+w(i−>j)gians_i=\sum_j\frac{ans_j+w(i->j)}{g_i}ansi=∑jgiansj+w(i−>j)代码#include<iostream>#include<cstdio>#includ...原创 2021-08-13 21:00:15 · 173 阅读 · 0 评论 -
【Ybtoj 第27章例2】单选错位【期望问题】
解题思路代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip>#include<cstring>#include<cmath>#include<map>#include<queue>#define ll long long#define ldb long doubleusing namesp...原创 2021-08-13 20:43:51 · 63 阅读 · 0 评论 -
【Ybtoj 第27章例1】单选错位【期望问题】
解题思路当 ai<ai+1a_i<a_{i+1}ai<ai+1时 第i题与第i + 1题答案相同概率为 1ai+1\frac{1}{a_{i+1}}ai+11当 ai=ai+1a_i=a_{i+1}ai=ai+1 时 第i题与第i + 1题答案相同概率为 1ai+1或1ai\frac{1}{a_{i+1}} 或 \frac{1}{a_i}ai+11或ai1当 ai>ai+1a_i>a_{i+1}ai>ai+1 时 第i ii题与第i...原创 2021-08-13 20:17:52 · 106 阅读 · 0 评论 -
【Ybtoj 第25章例5】最短路径【矩阵快速幂】
解题思路考虑DP,设f[i][j][k]f[i][j][k]f[i][j][k]表示从i到j走k条路的最短路径长度,易得转移方程:f[i][j][k]=min(f[i][t][k−1]+f[t][j][1])f[i][j][k]=min(f[i][t][k-1]+f[t][j][1])f[i][j][k]=min(f[i][t][k−1]+f[t][j][1])。因为在转移时kkk只与k−1k-1k−1有关,所以可以化简掉第三维f[i][j]=min(f[i][t]+f[t][j])f[i][j...原创 2021-08-13 20:09:39 · 142 阅读 · 0 评论 -
【Ybtoj 第26章例2】单词频率【AC自动机】
解题思路某字符串在论文中出现多少次=某字符串在每个单词中出现的次数之和跑一边ACACAC自动机,设sum[i]sum[i]sum[i]表示节点i到根节点的字符串是多少个单词的子串,所以初始时将插入字符时,将途中经过的节点sum[i]++sum[i]++sum[i]++。知道fail[i]fail[i]fail[i]到根形成的字符串也一定是那个单词的子串sum[i]+=sum[fail[i]]sum[i]+=sum[fail[i]]sum[i]+=sum[fail[i]]代码#include...原创 2021-08-12 22:47:56 · 107 阅读 · 0 评论 -
【Ybtoj 第25章例4】矩阵求和【矩阵快速幂】
解题思路显然本题需要矩阵快速幂考虑构造,设III为n∗nn*nn∗n的单位矩阵,则得知:右上角减去一个单位矩阵就是所求答案!PS:I为从右上到左下的那条对角线为1的矩阵,大概因为所有规模与他相当的矩阵和他相乘都是本身,所以I称为单位矩阵。超级超级无语YBTOJ没有判减成-1,故输出中存在-1。。代码#include<iostream>#include<cstdio>#include<algorithm>#include<iomanip&...原创 2021-08-11 14:42:45 · 151 阅读 · 1 评论 -
【Ybtoj 第25章例3】【洛谷P3758 可乐】行为方案【矩阵快速幂】
解题思路设现在有一个邻接矩阵AA。那么AkA^kAk的意义是什么?(两个点之间若有边则A[u][v]=1A[u][v]=1A[u][v]=1)从floydfloydfloyd算法的角度考虑,不难发现AkA^kAk 的第ii行第jj列的数字含义是从iii到jjj经过kkk步的路径方案总数。从这个角度考虑,这个点就有了一种做法。首先将这个图的邻接矩阵建出来,然后直接算这个矩阵的kkk次方。最后统计∑i=1nA[1][i]\sum\limits_{i=1}^{n}A[1][i]i=1∑nA[1...原创 2021-08-08 19:53:37 · 82 阅读 · 0 评论 -
【Ybtoj 第25章例1】序列的第k个数【矩阵快速幂】
解题思路代码#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<algorithm>#include<iomanip>#include<cmath>using namespace std;const int Mod=200907;int T;long long a,b,c,k;long l...原创 2021-07-12 16:51:05 · 108 阅读 · 0 评论 -
【Ybtoj 第24章例3】涂抹果酱【状压DP】
解题思路注意要状压成 3 进制 因为有 3 种颜色。fi,jf_{i,j}fi,j 表示第 i行状态为j的方案总数已经涂好了第 k行 那就分别从 k−1k−1k−1到 0 和k+1到 n ,dp 两个方案数相乘 就是答案了,特判涂第 1 行 和第 n 行的情况。代码#include<iostream>#include<cstdio>#include<cmath>#include<iomanip>using namespace st...原创 2021-07-11 21:40:35 · 183 阅读 · 0 评论 -
【Ybtoj 第24章例2】最短路径【状压DP】
解题思路设fi,jf_{i,j}fi,j表示j 状态走到i时的最短HamiltonHamiltonHamilton路径方程:到 jjj之前,设到达了,就是到达 fi,jf_{i,j}fi,j,这个状态前 先到达了fk,j−(1<<i)f_{k,j-(1<<i)}fk,j−(1<<i),那么 fi,j=fj−(1<<i),k+ak,if_{i,j}=f_{j-(1<<i),k}+a_{k,i}fi,j=fj−(1<<..原创 2021-06-14 22:09:59 · 121 阅读 · 0 评论 -
【Ybtoj 第22章例4】选课方案【树形DP】
解题思路这道题是经典的树上背包问题,把每个节点看做物品,则子节点是依赖于父节点的。设f[dep][j]f[dep][j]f[dep][j]表示处理到节点depdepdep,选了jjj节课可以得到的最大学分。设y为depdepdep的子节点,s[dep]s[dep]s[dep]表示选课程dep能够获得的学分,得:f[dep][j]=max(f[dep][j−1],f[dep][j−k−1]+f[y][j])+s[dep];f[dep][j]=max(f[dep][j-1],f[dep][j-k-1]..原创 2021-06-14 22:09:28 · 98 阅读 · 0 评论