洛谷
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【洛谷】【二分】最长公共子序列
当b[i]这个数在a中的位置在m[len]后面,可以直接加入。如果在前面,可以优化m数组,替换掉位置在其后面的。主要思路就是开数组将第一个序列的数位置存下来。然后开m数组存最长公共子序列,len存长度。正确性易证,不影响长度,也会让解更优。原创 2023-04-08 17:03:20 · 390 阅读 · 1 评论 -
【洛谷 P4086】【暴力】 My Cow Ate My Homework S
传送门 P4086因为吃掉的一定是前k道我们可以从后往前做就可以累积到tm的和,以及最小值,由此得出平均值PS.不止一个输出时要升序 我以为只有一个,😄原创 2022-06-11 20:49:33 · 137 阅读 · 0 评论 -
【洛谷 P1441】 【状压】 砝码称重
【洛谷 P1441】 【状压】 砝码称重题目解题思路用二进制表示选了哪些砝码用bitset统计有多少种质量可称量代码#include<iostream>#include<cstdio>#include<bitset> using namespace std;bitset<2001> s; //类似数组,但只能存0或1 int n,m,z,a[30],ans,w[3000100];int main(){ scanf("%d%d原创 2022-05-04 11:52:05 · 191 阅读 · 0 评论 -
【洛谷 P1297】[国家集训队]单选错位
【洛谷 P1297】[国家集训队]单选错位题目解题思路在填错位的情况下,想要正确,说明两题答案一样第i题有ai个选项,第j题有aj个选项得到式子式子可以被化简代码#include<iostream>#include<cstdio>using namespace std;int n,A,B,C,a[10000010];double ans;int main(){ scanf("%d%d%d%d%d", &n, &A, &B原创 2022-05-03 19:48:13 · 236 阅读 · 0 评论 -
【洛谷 P5495】【数学】Dirichlet 前缀和
【洛谷 P5495】【数学】Dirichlet 前缀和题目解题思路如果求出每一个数的因子然后累加必定TLE可以先用埃氏筛求出质数然后质数x对其的倍数y,a[y]+=a[y/x]因为是从小到大,累加过去的,就能累加到所有除x的因子的数代码#include<iostream>#include<cstdio>using namespace std;#define uint unsigned intbool vis[20000100];int n,t;ui原创 2022-02-26 09:53:17 · 112 阅读 · 0 评论 -
【洛谷 P5253】【数学】 丢番图
【洛谷 P5253】【数学】 丢番图题目解题思路讨厌数学题qwq原式通分后为了因式分解,变形一下十字相乘后得其实就变成了求n2的因子个数/2向上取整用分解质因数的方法求出n2的因子个数代码#include<iostream>#include<cstdio>using namespace std;long long n;int t,ans=1;int main(){ scanf("%lld",&n); for (int i=原创 2022-02-26 09:24:01 · 175 阅读 · 0 评论 -
【金牌导航】【洛谷 P4305】【高斯消元】球形空间产生器
【金牌导航】【洛谷 P4305】【高斯消元】球形空间产生器题目解题思路因为所有点到球心的距离相等得:(a-x1)2+(b-x2)2+(c-x3)2=(a1-x1)2+(b1-x2)2+(c1-x3)2将式子拆开得到 2*(a-a1+b-b1+c-c1)=a2-a12+b2-b12+c2-c12然后运用高斯消元求得方程解即可代码#include<iostream>#include<cstdio>#include<cmath>using name原创 2022-02-17 10:34:49 · 429 阅读 · 0 评论 -
【金牌导航】【洛谷 P4570】【线性基】【贪心】元素
【金牌导航】【洛谷 P4570】【线性基】【贪心】元素题目解题思路线性基线性基是所含元素最少的集合,满足原集合里的数都能由线性基里的一些数异或表示线性基的性质:1 原集合里任何数都可以用线性基中某些数的异或表示2 线性基中任意异或和不等于03 线性基的大小只与原集合的大小有关,根据性质1,说明线性基元素个数总是小等于原集合元素个数,所以线性基的个数是固定且最小的本题用贪心,先将各矿石按价值从大到小排序然后依次尝试加入线性基,如果能被表示,退出线性基中一个数放当前数,显然答案更劣原创 2022-02-16 16:58:18 · 522 阅读 · 0 评论 -
【洛谷 P3809】 【后缀数组】【模板】后缀排序
【洛谷 P3809】 【后缀数组】【模板】后缀排序标题解题思路嗯。。。这是道模板题雾里看花状态,咱就给点注释吧我看的是这篇题解代码#include<iostream>#include<cstdio>using namespace std;string s;int n,m=1000;int z[1001000],w[1000100],c[1000100],sa[1001000],wa[1000100],wb[1000100];bool cmp(int *原创 2022-02-07 11:43:17 · 769 阅读 · 0 评论 -
【洛谷 P3957】【NOIP 2017 普及组】【单调队列】跳房子
【洛谷 P3957】【NOIP 2017 普及组】【单调队列】跳房子题目解题思路呜呜呜,推了好久,还是错的,研究了题解才会先特判是否可以到达这个分数 虽然没有这个点。。。分析一下题目发现,能走的距离范围为max(d-g,1)~d+g如果用ans个金币可以满足,那么>ans个金币肯定也可以想到用二分节约时间单调队列维护能走的区间中获得的分数最大值先找是否需要至少max(d-g,1)步,然后踢出在堆尾且贡献小的,加入当前位接着踢出需要d+g步以上到达的,不符合范围,踢出更新获得原创 2022-01-20 16:31:16 · 323 阅读 · 1 评论 -
【洛谷 P1638】 【单调队列】 逛画展
【洛谷 P1638】 【单调队列】 逛画展题目解题思路先求出最前面囊括所有画的位置然后如果左边界的画不止存在一次,左边界右移不断扩展右边界,求取答案代码#include<iostream>#include<cstdio>using namespace std; int n,m,se,l,r=1000010,a[1001000],p[2100],q[1000100],h=1,t;int main(){ scanf("%d%d",&n,&m原创 2022-01-13 20:19:20 · 470 阅读 · 0 评论 -
【洛谷 P1714】【单调队列】 切蛋糕
【洛谷 P1714】【单调队列】 切蛋糕题目解题思路枚举i和j,用sum[j]-sum[i](sum是前缀和)但是n2会超时题意是求不定长的最大子序列那么减去的sum[i]最小就是最优用单调队列维护最小值代码#include<iostream>#include<cstdio>using namespace std;int n,m,h=1,ans,t,a[500010],q[500010];int main(){ scanf("%d%d",&原创 2022-01-13 08:07:38 · 201 阅读 · 0 评论 -
【ybtoj 高效进阶 3.4】【强连通分量】 网络传输
【ybtoj 高效进阶 3.4】【强连通分量】 网络传输题目解题思路缩点后构造新图跑spfa求答案加快读避免TLE思路还好,就是码有点点长代码#include <iostream>#include <cstring>#include <cstdio>using namespace std;struct lzf { int to, q, nxt;} f[2000100], f2[2000010];double p[200010];原创 2021-12-11 16:53:07 · 335 阅读 · 0 评论 -
【洛谷 P6268】【二分图】 舞会
【洛谷 P6268】【二分图】 舞会题目解题思路先染色,确定性别然后挑一个性别跑最大匹配用总人数n减去最大匹配即为答案因为邀请的人都不能一起跳过舞如果去的人中有最大匹配中的那么至少有一对跳过舞代码#include<iostream>#include<cstring> #include<cstdio>using namespace std;int n,m,x,y,ans,a[1010][1010],c[1010],p[1010],g[101原创 2021-12-11 15:58:55 · 408 阅读 · 0 评论 -
【洛谷 P1311】【NOIP2011 提高组】【RMQ】 选择客栈
【洛谷 P1311】【NOIP2011 提高组】【RMQ】 选择客栈题目解题思路数据范围也不是很大啦,暴力枚举两间同色调的客栈用RMQ处理出它们之间的最小值如果当前这两间客栈符合要求,靠右边的客栈之后的也都会符合要求,直接累加代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n,k,p,s,a[100][20010],minn[200010原创 2021-11-27 16:06:18 · 222 阅读 · 0 评论 -
【洛谷 P2602】【数位DP】 数字计数
【洛谷 P2602】【数位DP】 数字计数题目解题思路设f[i]为有i个数位时,每个数字出现多少次允许前导0存在得到推导式假设我们要知道1~ABCD中每个数字出现多少次首先每个数字都会出现A*f[3]次 以0 ~ A-1作为最高位接着0~A-1每个都会出现1000次 作为最高位嘛然后呢A会出现BCD+1次前导0记得删掉哦这个就可以看作一个小分治拆数字,每一位做一遍就可以求出来啦最后结果就是solve(b)-solve(a-1)代码#include<iostream&原创 2021-11-27 16:33:13 · 145 阅读 · 0 评论 -
【洛谷 P1168】 【堆】 中位数
【洛谷 P1168】 【堆】 中位数题目解题思路中位数是在一段有序数列中中间的那个数那么ta的左比它小,右比它大用大根堆维护左边比ta小的中最大值,用小根堆维护右边比ta大中的最小值始终维护两个堆的数量相差不超过1因为是在i为奇数时输出,将数量大的堆的堆顶输出代码#include<iostream>#include<cstdio>#include<queue>using namespace std;priority_queue<int原创 2021-11-13 16:58:01 · 608 阅读 · 0 评论 -
【ybtoj 高效进阶 6.1】 【矩乘】 行为方案 【洛谷 P3758】 可乐
【ybtoj 高效进阶 6.1】 【矩乘】 行为方案 【洛谷 P3758】 可乐题目解题思路首先可以想到设f[i][j][k]为从第i个城市走到第j个城市走了k步的方案数因为f[i][j][k]只会和f[i][q][k]有关系,那么就可以优化掉第三维得长得就很像矩乘啊用矩乘求出来这个方程处理t次最后答案为1到各个节点的方案数代码#include<iostream>#include<cstring>#include<cstdio>usin原创 2021-11-06 15:48:53 · 76 阅读 · 0 评论 -
【校内测 11.1】 【数学题】 [LnOI2019SP]快速多项式变换(FPT)
【校内测 11.1】 【数学题】 [LnOI2019SP]快速多项式变换(FPT)题目洛谷 P5248解题思路可以看出anan-1an-2…a1组合起来是一个m进制数它的十进制是f(m)那么题目就变成一个十进制转m进制用短除法代码#include<iostream>#include<cstdio>using namespace std;int t;long long m,fm,a[10010];int main(){ scanf("%lld%ll原创 2021-11-06 07:28:05 · 137 阅读 · 0 评论 -
【洛谷 P7528】 【并查集】 【DFS】 Portals G
【洛谷 P7528】 【并查集】 【DFS】 Portals G题目解题思路题目出得很迷惑,掩人耳目啊题目大意有2n个点每次给出5个数,c,p1,p2,p3,p4,p1与p2连边,p3与p4连边,c是换边的花费 例如p1本来和p2连,现在想p1与p3连,p2与p4连,那么花费是c求要使这2n个点互相连通,最小的花费看到题目里加粗的那行字,每个点只会出现两次,那么只会有2条边和它相连一个点能到达的点一定是一个环现在就是要花费ci使各个环相通花费按从小到大排序因为p1与p2是一个环原创 2021-08-22 20:15:04 · 86 阅读 · 0 评论 -
【洛谷 P7412】 Year of the Cow S
【洛谷 P7412】 Year of the Cow S题目解题思路先不考虑k,那么一定得回到最远的年份接着我们想k次可以不等待,一定是去掉等的最久的k个段首先将年份排序,才能知道相邻的两个段然后处理两两之间的差用最远的年份减去等的最久的k个段代码#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int n,k,tot,ans,a[700010原创 2021-08-20 11:16:30 · 164 阅读 · 0 评论 -
【洛谷 P7411】 【DFS】Comfortable Cows S
【洛谷 P7411】 【DFS】Comfortable Cows S题目解题思路每一次新增一个点,如果已经填过,说明是前面为了让奶牛不舒适填的,所以ans–然后DFS扩展下去,一个点能影响旁边4个点,然后判断是否有点满足舒适,就再填一个点,直到没有舒适的奶牛代码#include<iostream>#include<cstdio>using namespace std;const int inf=1000;struct lzf{ int a[5];}cn原创 2021-08-20 11:09:08 · 148 阅读 · 0 评论 -
【洛谷 P7410】 Just Green Enough S
【洛谷 P7410】 Just Green Enough S题目解题思路直接暴力的话,时间复杂度让人绝望看张小图,找找规律0是小于100的值,2是等于100,1是大于100如果以(1,1)为一个矩阵的左上角,可以向左向下延伸最大的一个矩阵是(1,1)~(2,3)但在第一行可以到达(1,4)可以维护每一个格往后可以延伸几个那么我们在求一个格为一个矩阵的左上角时,维护当前行最短的一个,每次累计它然后去掉标记为2的点,再求一遍用第一次的答案减去第二遍的 因为第二遍的最小值不是10原创 2021-08-19 21:49:09 · 117 阅读 · 0 评论 -
【洛谷 P7151】 【BFS】 Replication G
【洛谷 P7151】 【BFS】 Replication G题目解题思路先求出每一个点到墙壁的距离 因为它限制了一个机器人以及它的副本能走的格子求一个机器人能到达的格子 且不能让它的副本碰到墙壁在上一步已经知道当前这个距离初始机器人有多远,由此可以得出有多少副本如果直接将其放入队列就不能保证它的单调性,用堆维护,先让距离越短的先做代码#include<iostream>#include<cstring> #include<cstdio>原创 2021-08-19 21:33:38 · 111 阅读 · 0 评论 -
【洛谷 P3808】【AC自动机】 AC自动机(简单版)
【洛谷 P3808】【AC自动机】 AC自动机(简单版)题目解题思路建一个trie树然后在上面跑kmp代码#include<iostream>#include<cstring> #include<cstdio>using namespace std;string s;int x,l,c,w,n,ans,tot,q[1000010],tr[500010][30],ed[500010],nxt[1000010];void add(){ x=原创 2021-08-18 22:12:21 · 190 阅读 · 0 评论 -
【洛谷 P3369】 【平衡树】 普通平衡树
【洛谷 P3369】 【平衡树】 普通平衡树题目解题思路先认识一个东西叫BST(二叉查找树)左子树上的关键值一定比该节点的小右子树上的关键值一定比该节点大平衡树就是基于BST的基础上,改变它的形态使左右子树大小达到平衡这种改变形态并保持BST性质的操作叫**旋转 **本人有点蠢,为了好理解,定义左旋为将左儿子变为爸爸,右旋为将右儿子变为爸爸具体操作看代码此操作方便删点时,让点变为叶子节点,那对树的影响很小题目上的六种操作代码里有注释代码#include<iost原创 2021-08-18 15:50:35 · 293 阅读 · 0 评论 -
【洛谷 P7297】 【BFS】Telephone G
【洛谷 P7297】 【BFS】Telephone G题目解题思路直接建图的话,边数太大了考虑分层图每一层之间相邻的有路,代价为1第0层为输入的奶牛种类,(a[i],i)连向(0,i)自己的颜色那一层的第i个 ,代价为0如果两种颜色间可以互通,(0,i)连向(j,i),代价为0然后跑一遍BFS即可代码#include<iostream>#include<cstring>#include<cstdio>#include<deque原创 2021-08-17 22:04:04 · 122 阅读 · 0 评论 -
【洛谷 P7299】 【并查集】 Dance Mooves S
【洛谷 P7299】 【并查集】 ance Mooves S题目解题思路可以先求出k轮后i能到达next[i]可以发现将会组成由很多个简单环组成的图,它们能到达的点可以共享给同一个环内的所以可以用并查集统计出每一个环,暴力合并环内点能到达的点集代码#include<iostream>#include<vector>#include<cstdio>#include<bitset> #include<set>using原创 2021-08-17 21:01:33 · 233 阅读 · 0 评论 -
【洛谷 P7296】 【状压DP】 Uddered but not Herd G
【洛谷 P7296】 【状压DP】 Uddered but not Herd G题目解题思路qwq数据范围才20,很明显是状压啦如果s[i]>=s[j]说明又多读一次了 s表示的是它在字母表中出现的位置先将字母离散化然后求出c[j][k] 指的是第k种字符出现在第j种字符后面的个数,k比j在字母表出现的更早,代表了要多读的次数枚举字母表当前的状态s枚举当前添加的字符j转移式为 代码#include<iostream>#include<cstring&g原创 2021-08-17 16:39:07 · 193 阅读 · 0 评论 -
【gmoj】 【博弈论】stone game
【gmoj】 【博弈论】stone game题目洛谷 P7413解题思路如果开局每一种(石子的个数相同与否看作是否为同一种)堆的个数都为偶数,那一定是后手必胜不管你怎么拿,后手都可以拿和你一样的想让先手必胜,那一定要给后手每一种堆的个数都为偶数,所以要处理个数为奇数的堆进行一次操作会使b[j]-1与b[j-1]+1只有一个奇数堆的话,ans+b[1]两个奇数堆的话,一定得是相邻的,ans+b[j]枚举第一次拿多少个石子处理出每一种堆的个数然后分类讨论代码#include&l原创 2021-08-16 21:55:49 · 109 阅读 · 0 评论 -
【gmoj】【树状数组】【st表】No Time to Dry
【gmoj】【树状数组】【st表】No Time to Dry题目洛谷 P7416解题思路qwq,第一题放紫题,人麻了看到区间想到树状数组 or 线段树手推一下会发现区间[l…r]且s[l]==s[r]时,如果中间有数小于s[l],那么s[r]必须要靠操作一次来涂色那么先预处理出一个bf数组维护当前颜色上一次出现的位置如果当前和上一次之间没有比它们小的,说明涂色可以传递,那就在上一次出现的位置+1加一次操作如果上一次位置不在区间内,是要加1的,如果在区间内不影响结果否则要单独涂一次,原创 2021-08-16 20:43:53 · 82 阅读 · 0 评论 -
【洛谷 P3865】 【RMP】 st表
【洛谷 P3865】 【RMP】 st表题目解题思路板子题,没啥好说的maxn[i][j]表示第i个数后的2j个数中的最大值(包括第i个数)代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,m,l,r,a[100010],maxn[100010][30]; int query(int l,int r){ int k=log2(r-l+1)原创 2021-08-16 19:13:36 · 81 阅读 · 0 评论 -
【洛谷 P5496】【PAM】回文自动机
【洛谷 P5496】【PAM】回文自动机题目解题思路PAM模板题回文树就是将一个回文串折叠起来挂在树上且是从下往上读再往下如果是奇数的回文串最上面的那条边只读一次例如:abbaabba的回文树0节点挂的是偶数的回文串1节点挂的是奇数的回文串明确一下各种变量用处p是节点个数cur含义如下 好难解释last指的是上一个回文串在回文树上的编号len数组存的是每个节点代表的回文串长度next数组存的是cur添一个c后工程新的回文串的节点fail数组存的是cur中最长的回文后缀原创 2021-08-11 21:12:38 · 188 阅读 · 0 评论 -
【洛谷 P2375】 【kmp】 动物园
【洛谷 P2375】 【kmp】 动物园题目解题思路学过kmp的小朋友们肯定知道next维护的是既是它前缀又是它后缀的长度题目讲的一级棒那么我们可以从这推出一个弱化版的numnum求的是不重叠的又是前缀又是后缀的长度设一个ans求的是可重叠的又是前缀又是后缀的长度求ans[i]即是ans[next[i]]+1next[i]本身就既是它的前缀也是它的后缀,所以next[i]的前缀也会是i的前缀因为最后num求的是不重叠的所以我们要保证k 就是i最长的一个不重叠前缀的长度那么可以原创 2021-08-08 11:03:13 · 195 阅读 · 0 评论 -
【洛谷 P2590】 【树剖】 树的统计
【洛谷 P2590】 【树剖】 树的统计题目解题思路树剖模板题用与查询树上连续区间的算法分为三大步记录父节点,重儿子,深度void dfs1(ll x,ll fa){ f[x]=fa,size[x]=1; //fa记录父节点,size记录子树大小(含自己) dep[x]=dep[fa]+1; //深度 for (ll i=head[x];i;i=h[i].next) if (h[i].to!=fa) { dfs1(h[i].t原创 2021-07-22 16:30:26 · 111 阅读 · 0 评论 -
【gmoj】 【洛谷 P7404】【差分】有趣的家庭菜园 4
【gmoj】 【洛谷 P7404】【差分】有趣的家庭菜园 4题目解题思路题意就是让前半段草的高度呈上升趋势 后半段呈下降趋势考虑差分出草的高度f[i] 表示以i为k的前半段需浇水量g[i] 表示以i-1为k的后半段需浇水量最后答案取min(f[i],g[i+1])如果当前b[i]为负数 说明它比前一个小 为了满足前半段呈上升趋势 需要浇水 f[i]增加如果当前b[i]为正数 说明它比前一个大 为了满足后半段呈下降趋势 需要浇水 给它前面的浇,为了好统计,就加在它这里 g[i]增加原创 2021-07-21 09:24:24 · 268 阅读 · 0 评论 -
【洛谷 P3376】 【网络流】 网络最大流
【洛谷 P3376】 【网络流】 网络最大流题目解题思路网络流就挺毒瘤的一直没太看懂本篇将介绍Dinic的做法分为两个步骤:1.在残量网络上BFS求出节点的层次,构造分层图2.在分层图上DFS寻找增广路,在回溯时同时更新边权增广路指的是一条能从S流向T且流量>0的路代码#include<iostream>#include<cstring>#include<cstdio>#include<queue>using nam原创 2021-07-20 15:35:16 · 73 阅读 · 0 评论 -
【洛谷 P4284】【树形DP】【期望】 概率充电器
【洛谷 P4284】【树形DP】【期望】 概率充电器题目解题思路考试的时候就很懵样例都没推出来???我大概是脑子烧坏了直接求出开的概率还是很难想的可以想到求出关的概率然后用1-关的概率就是开的概率假设将图建出来长这个样子设 f[i] 是第i个节点不充电的概率 (其子树以及它自己转移过来的概率)考虑 j 这个节点能对 i 做出什么贡献既然要让 i 是关的 那么ta自己得是关的 边不能传电 或是 j 没有电边能传电那么式子就是f[i] = (1-p[i])(1 - h[i][原创 2021-07-19 20:46:40 · 81 阅读 · 0 评论 -
【洛谷 P3383】 【线性筛】线性筛素数 以及用线性筛求欧拉函数
【洛谷 P3383】 【线性筛】线性筛素数题目解题思路一般来说常用的是埃氏筛 for (int i=2;i<=n;i++) if (!p[i]) { prm[++t]=i; for (int j=i;j<=n/i;j++) p[i*j]=1; }就是筛到素数时,将它的倍数筛去但是某些合数,例如12能被质数2,3筛去,这样就会重复筛了而欧拉线性筛就很好的解决了这个问题为了保证每个合数只被筛一次,它只会被最小原创 2021-07-19 15:55:46 · 252 阅读 · 0 评论 -
【洛谷 P4774】 【扩欧】【同余】 屠龙勇士
【洛谷 P4774】 【扩欧】【同余】 屠龙勇士题目解题思路由题意可得xb[i]-a[i]/p[i]=0也就是xb[i]≡a[i](mod p[i])因为只有当x*b[i]和a[i]mod p[i]的部分相等,才能减掉,余下的是p[i]的倍数那么我们要求的x是这n条式子的通解首先考虑一下b[i]=1的情况式子将变为x ≡a[i](mod p[i])挺眼熟的吧,中国剩余定理呢设ans是前i-1条的通解,m为lcm(p1,p2…pi-1)那么到前i条时, 找一个最小的x,原创 2021-07-19 09:29:47 · 130 阅读 · 2 评论