自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 学习笔记20:牛客周赛32

2.之前出现过的奇偶性质中有一个不同的(奇-偶=奇 偶-奇=奇,这样会有一个值出现次数为奇数,就行 39993 393 ……我们思考如果当前可以和之前的点重排成一个回文数,那么有两种情况。1.之前出现过的奇偶性质完全相等的(奇-奇=偶 偶-偶=偶)如果对于j和k,如果不冲突则可以直接转化。也就是,在自己这列中,相邻不相等的状态?统计子节点中1的个数即可(类似树形dp。最终答案就是min(dp[m-1][k])1.首先枚举自己可行的转变的状态j。2.然后再枚举上一列的状态k。

2024-02-13 18:23:03 436 1

原创 学习笔记19:牛客寒假训练营(DFHJK)

部分题目连接在一起可以形成一个环(加上其他连向环的边形成基环树,这里如果环内确定下来,那么环外的选择就已经确定了,可以反推,所有只需要考虑环内的数量即可),如果环头和环尾不一致则不成一个方案。所以如果超过60(30*2)个数字,那么一定不能构成查询的数,而如果小于60个则可以暴力预处理一下,求出并记录,每个值变化时数组的乘积,在查询中直接查询。需要注意的是0是一定可以达到的,只需把一个数变成0,那么数组的乘积都是0。我们注意到如果把最高位的1改成0,我们就可以把更低的位全部变成1。

2024-02-12 18:17:59 413 1

原创 学习笔记18:Codeforces Round 923 (Div. 3)

预处理,ans[i]记录一a[i]后面第一个与a[i]相等的值(如果没有,则需要特殊判断或者初始化成一个极大值)每次询问时,可以直接看ans[l]是否大于r,如果大于则不存在,如果小于则存在。然后bfs一下,求出起点到各个点的最短距离,根据终点反推出整个路径。如果成环记录一下此时的起点start和终点end以及边长w。一眼看上去没有头绪,实际上手玩一下样例即可。类似于最小生成树的求法。用并查集判断是否成环。

2024-02-12 17:34:07 364 1

原创 学习笔记17:AtCoder Beginner Contest 340

然后给整个数组加上sum/n,特殊情况还有剩余的手玩一下模拟即可。这个公式的x,y的一组解(无解的情况:2%gcd(a,b)!这时候将x*gcd(a,b),y*gcd(a,b)即可得到答案。操作:查询在位置上的值sum,然后修改这个该位置的值为y。模拟暴力的过程我们发现很多运算是重复的。这道题中x1=0,y1=0,S=1。通过扩展欧几里得我们可以算出。现在x2和y2我们已经知道。1e17暴力肯定不行。

2024-02-12 17:11:28 471 1

原创 学习笔记16:abc337

这个有一个细节,如果一个数超过k个,并且还有空的盒子,那么它后续的数可以放进这个空的盒子里(当然也不能超过k个)盒子1已经装了3个1,这是又来一个1那就是(4-1)/3+1=2,在第二个盒子里。感觉这个题的数据很弱啊,之前一次提交把a[r] 误写成a[i]只错了一个数据。题目说明了只有 ABC三种字符,那么只要判断下当前字符是否比前一个小即可。分析:手动模拟一下这个过程,我们会发现操作的过程可以用双指针模拟。之后输入的字符串组成一个二进制数,把它转化成十进制即是答案。在维护的时候可以用数学的小技巧。

2024-01-21 15:54:44 394 2

原创 学习笔记15:(AtCoder Beginner Contest 317 F)

0-N的上下限是数位dp的基本操作,分别是a1,a2,a3的倍数也可以在过程中取模操作(在最后判断一下是否都是0)根据题意得知三数异或的结果为0,那么也就是说每一数位(二进制)上的1的个数 非0即2(异或的性质)分析:需要维护三个小于N并且分别是a1,a2,a3倍数的数,同时三个数异或的结果是0。0-N是上下限,a1,a2,a3是每个数的限制,三个数异或为0是三个数一起的限制。位运算,不同于普通的数组dp,以十进制为标准进行dp,这里通过二进制进行dp。重点在于三个数异或的结果是0。

2024-01-20 17:12:35 321

原创 学习笔记14:AtCoder Beginner Contest 319(DEF)

dp[i]表示当前可以得到的最多的力量,在dp的过程中用优先队列维护一下,药的节点先出队,敌人节点后出队。这里我们可以预处理一下,有几种情况呢,0-pi的最大公倍数-1都可能产生影响。开始时间不同会影响到在车站1的等待时间,进而影响到后续到车站的等待时间。我们思考不同的开始时间为什么会使得答案不同(除了直接上的初始时间差)对于每一个答案暴力显然是不可取的。

2024-01-19 17:36:00 450 1

原创 学习笔记13:Codeforces Round 920 (Div. 3)

所以其实两点纵坐标相遇的时间点我们是知道的(如果Alice在Bob下面或同一横坐标,那么一定是平局),abs(Alice y-Bob y) 这是纵坐标距离,如果是奇数,Alice才有取胜的可能,,如果是偶数,Bob才有赢的可能,然后我们直接算出在最后一步时,可能取胜方能到的横坐标是否能完全包含另一方即可,如果不能包含,取胜的机会就没有了(只有这一次机会),另一方可以选择从一开始就直接向着没有被包含的区间走。用a数组的最小和b数组的最大,和a数组的最大和b数组的最小比较,取最大值,然后把两个数去除。

2024-01-18 00:55:10 522 1

原创 学习笔记12:牛客周赛21

我们对于每一个前缀和1求有几个其他前缀和是符合这个公式的,这就可以用树状数组(离散化后的数据,添加和查询,都是对排序并且去重的数组下标进行的。的前缀和,下标减1就是所要求的位置),在添加到树状数组中时,要注意下标0不能直接添加,可以加一个偏移量。分析:如果a[i]数据比较小(而实际上我们也只需要离散化一下就可以了)我们假设(x,y)是每次要删的方格(不一定存在)观察得出如果被删的行x>h[y]才是 有效删除。一旦确定了开头后续的状态也是确定的。所以只有一种简单计算一下即可。记录一下每一列被删了几个。

2024-01-16 20:23:50 751 1

原创 学习笔记11:abc336

环境很重要,你周围的环境(周围的环境只支持你到达这一高度)和你自己的高度(如果自己不努力那么环境再好也没用)取一个最小值。分析:数据最高是1e14,那么可能的数位之和只有1-9*14,将每一种可能的数位之和dp,求出答案。当然周期的下标是从0开始的,所以我们可以在刚开始把 k--分析:仔细观察我们可以发现所谓第k位的规律。人要有自信,人有了自信才会拥有一切。这是5个为一个周期的循环。用一个数组记录一下周期。

2024-01-16 14:29:46 408 1

原创 学习笔记10:Codeforces Round 919 (Div. 2)(B-D)

分解一下因子,我们假设现在是因子x,每个块的长度都是x,我们需要关心的是是否存在一个m使得 (1,1+x,1+2x……)(2,2+x,2+2x。我们可以把每个块中的差(相邻两数,不是也没关系但一定要保证数与数之间的联通性,因为这样我们可以保证这个正确性),求gcd,因为m对于所有块是固定不会变的,这时gcd不是1,就存在m。情况2:其他点,说明k是一次翻倍的点,且不是节点,直接对dp数组取模,可以得到k在翻倍前的位置,这时就继续判断如果是情况1则跳出,如果是情况2就继续即可。思考:如何凑出这样一个m。

2024-01-14 12:47:46 370 1

原创 学习笔记9:Codeforces Round 739 (Div. 3)

分析,如果前m位的不同字符个数超过k,那么改后面的字符会没有意义,那么我吗应该试着改前面几位,因为要保持>=n的最小值,所以我们直接改超过k的个字符的那一位即可,如果是9就进行进位,因为题目保证了k是大于等于1的所以如果从小往上进位是不会使得最高位变成10的。一直循环这一过程,会发现超过k个不同字符的位置,该位置上的字符会变成它前面的字符之一,然后继续下一个循环,如果到我们改变的字符0的位置上,超过k个不同字符了,则继续这一过程,0也会变成之前的字符之一。我们知道每种字符出现的次数以及字符的个数。

2024-01-13 15:01:42 331 1

原创 学习笔记8:abc321的CDEF

对于情况2,我们每次将查询节点的编号/2,得到祖先节点,需要注意,祖先节点向下扩大范围时,会包含住之前已经前一个的祖先节点(或者原查询节点)这时的当前答案,就需要再减去,前一个祖先节点下的k-1次扩大的结果,因为是简单路径(不重复) ,所以不应该包括前一个节点下的k-1次扩大的结果,而且前一个节点的k+1次贡献已经统计,所以直接减去即可。分析:纯纯暴力(1~9876543210)肯定不行,我们可以爆搜预处理出所有的合法数字,然后排序,在查询时直接输出。情况2:节点是祖先节点或者是祖先节点的另一侧子节点。

2024-01-12 13:10:17 349 1

原创 学习笔记7:线段树(懒标记+合并子信息)

当前节点的 区间1 除了左右节点的区间1,还可以是左节点的后缀1+右节点的前缀1。当前节点的左节点 前缀1 等于左节点对应 长度 时,需要接上右节点的 前缀1。当前节点的右节点 后缀1 等于右节点对应 长度 时,需要接上左节点的 后缀1。当前节点的左节点 前缀0 等于左节点对应 长度 时,需要接上右节点的 前缀0。当前节点的右节点 后缀0 等于左节点对应 长度 时,需要接上左节点的 前缀0。难点在于如何维护合并时的信息,看似简单的信息维护,但是细节也很多。在本题中我使用了7个变量来维护当前的信息。

2024-01-11 20:32:09 408

原创 学习笔记6:01分数规划

分析:给了我们一个图,图中每条边有一个美观度和成本,要求我们找到从点1到点n的最大贡献(贡献为sum路径上美观度/sum路径上成本和)dist[n]<=0说明ans的最大解一定大于等于当前的尝试的比率,反而则一定小于等于(由于是小数二分记得限定二分次数)二分的判断条件 check()具体实现:由于所有的边都是从小的点连向大的点,并且一定存在一条1-n的路径,符合拓扑序。而我们就是希望求得一个最大的ans,所以我们求n的最短路使得式子的值尽可能小。,求出1-n的最短路(为什么是求最短路?如何求解这样的式子?

2024-01-11 13:18:42 321

原创 学习笔记5:dp的应用

F - Sensor Optimization Dilemma (atcoder.jp)分析:一共两种物品,有n个需要覆盖的区间。我们思考,如果成功方案存在时,对于一个区间,我们只需要知道在这个区间中,其中一种物品的个数就可以推算出另一种,数据范围个数为1e3,对于每个区间枚举个数是可行的,这时我们可以设计状态 dp[i][j] 到第 i 个区间时用了j 个物品1时需要的物品2的个数。转移方程是dp[i][j+k] =min(dp[i][j+k],dp[i-1][j]+tt) tt为当前

2024-01-10 15:18:36 321

原创 学习笔记4:(AtCoder Beginner Contest 326)DEF

我们仔细观察会发现在奇数次操作时,只能向上或向下,在偶数则只能左右,分开爆搜2*2^40还是会超时,这是我们可以把单纯爆搜替换成双向搜索(2*2^20)*(2*2^20),这个事件复杂度是可以接受的。首先,我们预处理出所有合法字符串x,也就是包含一个A,B,C,其余是"."的字符串x,把它放入它的第一个非"."首字符对应的数组v [ x [ i ] - ' A ' ]中。然后搜索,在搜索的过程中用到了位运算优化,1111为一个字符位,前三位判断的是 A B C,最后一位判断的是是否是该列首个非"."字符。

2024-01-10 11:28:42 398 1

原创 学习笔记3:扫描线线段树的应用

我们考虑离线处理,先将数据预处理,这里用到了前缀和的思想。其实我们知道苹果对时间的贡献范围是(t[i],min(N,t[i]+d-1)),和右端点贡献范围同理,你需要在(t[i],min(N,t[i]+d-1))放盆才有可能接到这个苹果,如果我们可以实现区间修改,那么就可以转换成。t[i]的时间节点+1,t[i]+d的时间节点-1(苹果只会影响到 t[i]+d-1 所以t[i]+d直接-1)我们设t[i]是苹果落下的时间,x[i]是苹果落下的地点,d是盆的耐久/时间,w是盆的长度。

2024-01-09 09:06:34 547

原创 学习笔记2:dp应用(ABC327的E)

我们可以将当前 arr[i]能影响到的 dp[j] (1<=j<=n) 范围变成 dp[j] (1<=j<=i) ,当然,也是要像01背包那样倒着循环,然后转移方程也需要改变 dp[j] = max ( dp[j] , dp[j-1]*0.9 + arr[i] ),因为固定了顺序,最新加入的数永远是*1滴,然后之前的值都要*0.9,vp时就是这个出了问题,没想明白。分析:提取题意,我们需要选择一些比赛,然后根据已经选择的比赛的场次先后顺序(这是重点),通过公式计算出最大值。

2024-01-08 19:34:10 342

原创 学习笔记1:图论解决数学问题

abc335的E

2024-01-08 13:14:40 351

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除