- 博客(120)
- 收藏
- 关注
原创 更新——————
v5zsq,HeartFireY,lahlah_,Code92007,小蒟蒻yyb,繁凡さん。以后可能会更一些数学,C++开发,项目经验之类的东西在那里,有趣或无趣。人生若只如初见,何事秋风悲画扇。等闲变却故人心,却道故人心易变。
2023-03-16 13:44:22 288 1
原创 牛客练习赛D(换根dp)
然后我们要计算 fx+1 的乘积,并且不能计算当前k的值。不能先乘再除,我们就需要前缀积和后缀积。主要是当x和y中的祖先节点计数时,需要得到以该点为根的信息。
2022-09-07 16:32:53 329
原创 UVA1316 Supermarket
并查集做法我们维护每个日期的最后一个空日期,如果没被占用,就直接用了。然后按收益排序,贪心即可。其他的并查集用法多见于维护集合连通性,如kruskal算法。
2022-07-29 16:56:24 244
原创 B. Integral Array (思维 一点点数学)
Problem - B - Codeforces题意:给你一个数组,判断是否每两个数的向下取整相除的值也在数组中。 n
2022-06-30 22:22:16 199
原创 D. Guess The String(思维 二分)
Problem - D - Codeforces给你两种操作来还原一个原本未知的字符串,一种是询问l到r区间里有多少不同的字符,一种是询问第i个位置是什么字符。操作1次数小于6000次,操作2次数小于27次。首先第一个我们肯定要询问出来是什么。然后考虑从左到右求解第i个字符;我们用操作1来问出1到i和1到i-1的不同字符数。如果二者相同,就说明第i个在前面出现过;那么我们就可以二分j到i和j到i-1,用操作2,直到二者相同;如果询问出来(mid到i-mid到i-1)==0,说明在mid右边还有这个字符;如果
2022-06-30 18:19:54 283
原创 C. awoo‘s Favorite Problem(思维)
Problem - C - Codeforces我们发现a只能往右移,c只能往左移,且ac的不能互相换位置。b作为移动媒介其实是不影响答案的。那么我们可以把b去掉,看看剩下的二者是否相同;还有就是,相对于t串,s的a不能在后面,c不能在前面,不然也换不回来。//jiangly的代码太优美了qaq...
2022-06-30 12:13:38 263
原创 D. Tree Queries
Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round A - D - 知乎 Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(A-E) - 知乎orz,orz
2022-06-29 22:31:27 167
原创 C. Zero Path
Problem - C - Codeforces额,感觉是很妙妙的题。首先n+m为偶数那么就不能结果为偶数,即0.而且结果要是能为0,那么所有路上到结果的肯定都是偶数。那么判断可能的最大值和最小值,假如最大值大于0且最小值小于0,那么就说明可能为0的。......
2022-06-29 22:00:55 247
原创 树状数组套权值线段树
给定一个含有 nnn 个数的序列 a1,a2…ana_1,a_2 \dots a_na1,a2…an,需要支持两种操作:第一行两个正整数 n,mn,mn,m,表示序列长度与操作个数。第二行 nnn 个整数,表示 a1,a2…ana_1,a_2 \dots a_na1,a2…an。接下来 mmm 行,每行表示一个操作,都为上述两种中的一个。对于每一次询问,输出一行一个整数表示答案。样例输出 #1提示【数据范围】对于 10%10\%10% 的数据,1≤n,m≤1001\le n,m \l
2022-06-28 11:34:37 482
原创 虚树 (模板)
[SDOI2011] 消耗战 - 洛谷虚树,就是用来在图上dp时,避免无用的点太多影响时间的一种优化方式,它新建了一张图,从而减少无关点的遍历,在稀疏图上时能大大优化时间。具体做法就是,把所有关键点按dfs序排序,然后一条链一条链地遍历,其中会出现4中情况,参考大佬博客:题解 P2495 【[SDOI2011]消耗战】 - Rhodoks 的博客 - 洛谷博客 我们按照栈来遍历就正好符合由一条链跳到另一条链的过程,叶节点先出栈,根节点不变,再入新的链,按照不同情况连点,目的是保证这些关键点互相连接。参考代码
2022-06-26 14:08:49 177
原创 P3387 【模板】缩点
给定一个 nnn 个点 mmm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。第一行两个正整数 n,mn,mn,m第二行 nnn 个整数,其中第 iii 个数 aia_iai 表示点 iii 的点权。第三至 m+2m+2m+2 行,每行两个整数 u,vu,vu,v,表示一条 u→vu\rightarrow vu→v 的有向边。共一行,最大的点权之和。样例输出 #1提示对于 100%10
2022-06-23 12:24:19 175
原创 单调栈 单调队列 尺取法
1:包含长度覆盖问题:C. Paint - 上海市大学生程序设计竞赛 - 十二月赛 - ECNU Online Judge2:区间求以该元素为最值的区间范围,求最大值就维护单调增栈,出栈时就代表该元素为最大值的右边界为此。反向再求一遍即可得到左右边界。求最小值时就维护单调减栈。例题:CodeCraft-22 and Codeforces Round #795 (Div. 2) D. Max GEQ Sum(单调栈+区间最值)_Jack_00_的博客-CSDN博客适合求滑动窗口型最值,也
2022-06-22 17:17:04 125
原创 CodeCraft-22 and Codeforces Round #795 (Div. 2) D. Max GEQ Sum(单调栈+区间最值)
一眼就是比较经典的区间最大值,就是单调栈题。那么再考虑举反例:就是找出以这个数为最大值的区间内,区间和大于这个数。那么就转化为单调栈+区间最大值了。由于区间左右可伸缩,那么,我们找左半区间的时候,就可以固定查找右区间为,然后在区间内找最值,线段树维护的是后缀和;那么右半区间同理,前缀和找最值即可。最后在两半区间和找有没有大于0的,有即存在反例,无则满足条件。...
2022-06-21 23:46:36 154
原创 乘法逆元
【模板】乘法逆元 - 洛谷乘法逆元就是类似倒数一样的东西,适用于求模意义下的除法运算,即求导数后转换为乘法。,即求倒数的意思。那么我们要求 /a 的情况,就求出a的逆元,然后乘上逆元即可。对于上面的同余方程,我们有三种求法:1:扩欧即把上面的式子转化为:,求解即可。 2:3:递推O(1) 求连续逆元......
2022-06-03 22:20:35 149
原创 P3384 线段树维护树链剖分
【模板】轻重链剖分/树链剖分 - 洛谷树剖学习地址:树链剖分详解(洛谷模板 P3384) - ChinHhh - 博客园这次学只用了一个多小时,感觉还好,树剖也不是很难嘛~(就是代码超长没什么好讲的,人家的详解已经说得比较清楚啦,就是重新按DFS序建一棵线段树,然后在树链上跳跳,再在线段树上搞搞就行了。ps:找了好一会bug,发现是线段树上的标记改错了qaq
2022-06-02 12:48:37 147
原创 Codeforces Round #793 (Div. 2) D(构造)
/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<(#x)<<" "<<(x)<<" "<<endl;#define endl "\n"#define fast std::ios::sync_...
2022-05-30 23:18:21 178
原创 P2633 Count on a tree (树上主席树 LCA)
Count on a tree - 洛谷## 题目描述给定一棵 n个节点的树,每个点有一个权值。有 m个询问,每次给你 u,v,k,你需要回答 $u \text{ xor last和 v这两个节点间第 k小的点权。其中 last是上一个询问的答案,定义其初始为 0,即第一个询问的 u是明文。## 输入格式第一行两个整数 $n,m$。第二行有 $n$ 个整数,其中第 $i$ 个整数表示点 $i$ 的权值。后面 $n-1$ 行每行两个整数 $x,y$,表示点 $x$ 到...
2022-05-30 10:13:07 174
原创 Div1 序列和 (差分)
(DP/差分)代码源每日一题 Div1 序列和 - 知乎ygg yyds。不难发现其实翻转也就是交换奇偶的目的。那么就有两种情况。如yggblog所述。那么做一个最大子段和即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<.
2022-05-30 09:42:33 282
原创 P3629 [APIO2010]巡逻 (树的直径 思维)
[APIO2010]巡逻 - 洛谷感觉有点偏思维把,但是仔细想想还是可做的。首先每条路都要走,那么我们把最长的路首位连接,就可以少最长的路的距离-1.因为不用来回走了。即求直径。那么如果是两条路,我们也要求另外一条直径。但是此时,第一条和第二条中重合的部分就不能算了,算就是只走一次的意思,但重合导致我们要走两遍,所以反而还要把边权变负。那么再求一次直径即可。数据比较好搞。前一次可以用dfs,顺便求出直径信息;后一次有负边,只能dp求。dp好像也能求直径信息吧,不会啊。/*keep
2022-05-30 09:41:43 158
原创 P1972 [SDOI2009] HH的项链 (离线树状数组)
[SDOI2009] HH的项链 - 洛谷## 题目描述HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。 有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答…… 因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。## 输入格式一行一个正整数 $n$,表示项链长度。 第二行 $n$ 个正整数 $...
2022-05-29 15:09:12 372
原创 P3243 [HNOI2015]菜肴制作 (拓扑排序)
[HNOI2015]菜肴制作 - 洛谷建反图跑字典序最大top_sort即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<(#x)<<" "<<(x)<<" "<<endl;#defi
2022-05-29 14:34:52 189
原创 CF1268B Domino for Young (黑白染色)
Problem - 1268B - Codeforces给出一个不规则的网格。共 nn 列,每列有 a_iai 个格子。现在要将 1 \times 21×2 的骨牌不重叠的覆盖在网格上,求最多能放的骨牌数量。网格满足条件 高度左到右递减。题解:比较经典的骨牌填棋盘问题。有神仙结论就是假如黑白间隔染色后,那么染出来的东西就一定可以用1*2的骨牌填满。那么考虑填上即可。假如都一样高,那么直接横着放就行了;如果有差,那么就竖着填上差的部分再横着放;/*keep o.
2022-05-28 22:35:36 164
原创 P1395 会议 (树的重心)
会议 - 洛谷题目描述有一个村庄居住着 nn 个村民,有 n-1n−1 条路径使得这 nn 个村民的家联通,每条路径的长度都为 11。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。输入格式第一行,一个数 nn,表示有 nn 个村民。接下来 n-1n−1 行,每行两个数字 aa 和 bb,表示村民 aa 的家和村民 bb 的家之间
2022-05-26 21:39:38 211
原创 P3975 [TJOI2015]弦论 (SAM)
[TJOI2015]弦论 - 洛谷感觉位置不同算相同还是比较好想的,我们top排序后算每个点后面连接了多少点就知道里面有多少字串了,然后求k大就行了;考了位置不同算不同的话,我们就要考虑endpos了。那么具体体现在SAM上,就是后缀链接。如果有链接,就说明出现过相同后缀,我们才把他们连接在一起对吧;不然后缀链接就会接在根节点,这是性质。那么我们初始值就不设为1,在后缀链接上一样跑一次求和,就把位置不同的也考虑上了。那么最后求k小还有一点,就是假如k小于后缀链接上的和,就说明这里的点不需要考虑,
2022-05-26 20:45:17 209
原创 树网的核加强版 (树的直径 尺取法 思维)
树网的核加强版 - 洛谷比较明显的就是求出直径,这样路径最远的即为端点,比较好求;那么我们求出直径后可以尺取直径,统计答案。最后还有一种情况:路径上的一个分支的偏心距大于答案,这是完全可能的。那么我们再对直径上的点dfs一次,再统计一次答案即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll lo
2022-05-26 13:11:15 109
原创 组合数问题
[NOIP2016 提高组] 组合数问题 - 洛谷被提高+爆杀哩(快哭了)。看这么大的数据范围,以为是结论题,但是我弱爆的数学功底根本不支持我猜出来。结果搞搞预处理就行了555.看到2e3的n,范围,发现是可以预处理出杨辉三角的。那么考虑预处理杨辉三角的同时用二维前缀和记录答案,到时候就可以查询了。查询问题都可以这么搞呀。/*keep on going and never give up*/#include<bits/stdc++.h>using names
2022-05-25 21:44:03 70
原创 可持续化权值线段树
可持久化线段树 - OI Wiki看图是很好理解的。但具体的实现逻辑见代码注释。例题:【模板】可持久化线段树 2 - 洛谷/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<(#x)<<" "<<(x)<&l
2022-05-25 13:01:56 128
原创 欧拉路
/*图中经过所有边恰好一次的路径叫欧拉路径(也就是一笔画)。如果此路径的起点和终点相同,则称其为一条欧拉回路。2.2. 欧拉路径判定(是否存在):有向图欧拉路径:图中恰好存在 11 个点出度比入度多 11(这个点即为 起点 SS),11 个点入度比出度多 11(这个点即为 终点 TT),其余节点出度=入度。有向图欧拉回路:所有点的入度=出度(起点 SS 和终点 TT 可以为任意点)。无向图欧拉路径:图中恰好存在 22 个点的度数是奇数,其余节点的度数为偶数,这两个度数为奇数的点即为欧拉路径.
2022-05-22 11:42:10 317
原创 K短路 A*算法 假 可持续化可并堆 真
学了一会k短路,发现是板子题,但是有A*的假算法,可持久化可并堆优化的真算法。理解了A*的,就是单调队列里bfs,第k次访问到的点就是第k大。单调队列里用一个估价函数,为已经走过的距离+到终点的距离。后者用终点跑个最短路即可。可持久化可并堆。。。。。看都看不懂。用什么路径树搞搞,在用什么优化,前置只是还是左偏树,这还算好学,但是useless啊。算了,回头抄个可持久化可并堆优化,学学怎么改就行了。先贴个过不了题的 A*做参考:/*keep on going and never give
2022-05-22 11:41:15 105
原创 树状数组
算是重新梳理了一下吧,搞了点优化,和k大/小的trick。今天再把主席树搞下来,数据结构就不想多搞了,去搞图论,寄算寄何,字符串了。哦对,还有st表。算了,感觉可以用树状数组平替掉。哦还有二维线段树,树套树,二维数点什么的不会。真让人头秃。来个板子:/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define M
2022-05-22 11:30:10 50
原创 权值线段树
可以参考这篇博客的易懂图解。数据结构 线段树--权值线段树 详解_HeartFireY的博客-CSDN博客_权值线段树权值线段树即维护数出现的次数的线段树。区间可设为数的大小,为了减小复杂度,可以离散化。由于是动态维护,需要像扫描线一样动态开点。这样的线段树主要用来下求第k大/小的信息。板子:/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define i
2022-05-21 21:04:50 1436
原创 扫描线 (线段树)
【模板】扫描线 - 洛谷昨天脑子不好使,拖了一天才搞懂啊。其实就是按高度排序后维护行的宽度吧。那么只有两种情况:当前节点的cnt>0和==0的情况。前一种对应整段都覆盖,因为我们只对全覆盖的线段++cnt;所以都加上。后一种对应其他情况,统计子节点即可。因为我们最多更改到当前节点,所以子节点的信息是正确的。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;
2022-05-18 20:00:04 167
原创 P4588 [TJOI2018]数学计算 (思维 线段树)
[TJOI2018]数学计算 - 洛谷直接模拟,显然是不行的,精度肯定会出问题,连续搞两个1e9的数据就回不来了。考虑把时间作为坐标,那么乘以一个数和除一个数就是单点修改,求当前x就是区间查询,得解。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr&
2022-05-17 20:37:07 176
原创 P1368 【模板】最小表示法 (后缀自动机)
【模板】最小表示法 - 洛谷正解是线性的,但是这题s的范围好像不是很大,后缀自动机也能水过去qaq。虽然学的时候很痛苦,但是用起来真爽啊hhhh咳咳,回到正题。这道题求字典序最小,又是最后一个移到第一个的典中典,无疑就是把数组复制一份接上找字典序最小啦。此时上后缀自动机可以快速解决。map一维表示这点上的数字,二维是下一个点的下标。/*keep on going and never give up*/#include<bits/stdc++.h>using namesp
2022-05-16 12:29:51 274 1
原创 醉漾轻舟,信流引到花深处 (二分 折半搜索)
登录—专业IT笔试面试备考平台_牛客网考虑二分w,然后对前一半和后一半搜索,在统计有多少情况合法。和今天做的一道题很像。总算有思路了,比没思路要好,但还是很菜#include<bits/stdc++.h>using namespace std;long long n,m,k;long long a[35],b[35];bool check(long long mid) { vector<long long>l,r; for(int i=0;i
2022-05-15 23:54:17 141
原创 花空烟水流 (hash 搜索)
登录—专业IT笔试面试备考平台_牛客网考虑枚举答案长度,然后把原串所有该长度的子串hash一下,再搜索该长度下的字典序最小。随便想想发现不会太长。但写的时候并没想到/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define inf 1e14#define fast std::ios:
2022-05-15 23:41:24 101
原创 花非花 (manacher算法)
登录—专业IT笔试面试备考平台_牛客网给一个数组,问从每个i往后有多少回文串以i为左端点。考虑manacher,用p数组做差分,对每一个最长的回文串的左端点加一,右端点减一,跑一遍即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define inf 1e14#define f
2022-05-15 22:40:06 209
原创 D. Toss a Coin to Your Graph...(图论 二分)
Problem - D - Codeforces要在一个有向图找长度大于k的路径,且最大点权最小,一眼二分。考虑在图中把小于的点找出一条路径长度大于k,或是有环。那么我们每次扫一遍,只在点权小于的部分跑拓扑排序即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define i
2022-05-15 15:36:00 385 1
原创 Moving Chips (dp)
Problem - E - Codeforces本来想叫他状压dp的,但是总共也就压了4个状态,不压也就是码量大亿些。但是它也压成二进制了,而且状压更具普适性,还是当状压dp吧。不过没写出来还是怪可惜的。我们可以把每一列的四种情况当作二进制的00,01,10,11。考虑从左向右合并,由于只能横竖移动,我们可以每次把前一次的状态平移过来,然后再考虑如何在本列上下合并。那么我们把前一列平移的时候,有几个一就代表要产生多少贡献。差不多就是这样了。/*keep on going and never
2022-05-15 14:26:58 232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人