- 博客(21)
- 收藏
- 关注
原创 mac安装文件损坏
随着版本更新,苹果默认隐藏了任何来源选项。把XXX改成你要打开的程序名称就可以了。允许任何来源之后,继续在终端输入。先打开防火墙权限,允许任何来源。打开终端输入,输入一下代码。接着输入你的锁屏密码就ok。
2024-09-05 13:39:29
211
原创 差分的差分
步骤是:原数组->差分数组->差分的差分->差分->原数组。所以差分的差分也是利用差分思想,对差分数组差分。在对连续上升的数组中我们可以使用差分的差分。差分的位置也是后移一位。
2024-06-08 23:00:11
239
原创 D. Dark LaTeX vs. Light LaTeX
题目给两个字符串S和T,分别截取子串p和q,要求p+q==平方串。做完这种可能之后直接交换两串就可以得出另一种可能的数量了。有一个特殊情况就是aba形式时a为空串,需要额外的加上。先枚举p的长大于q的长,就会是aba+b的形式。差分预处理后求出前缀和皆可以直接统计出答案。所以可以差分预处理出所有的lcs和lcp。那么a的最大长度就是LCP(S,T)B的最大长度就是LCS。
2024-06-04 21:33:00
416
原创 4895: 最优乘车
所以直接将前面的站点到后面站点的权值记录为1==>坐过一次公交车。我们只需要计算出从站点用到站点n需要做几辆公交车就行了。因为这里的公交车是单向的,只能从前面的站点往后坐。因为 换乘次数==乘坐公交车次数-1。这样建图就可以把先后顺序表示出来。然后跑一遍最短路进行了。
2024-05-30 18:34:07
229
原创 E. Boomerang
一开始想的是找辟谣树的树根来分析时间,后来发现太难了,就枚举时间。在计算树上每点的距离的时候,我们可以用倍增lca来快速求得。就能知道要在这一秒辟谣树要追上辟谣树至少需要多快的时间了。所以,不是对每一个k进行枚举,这样的话就太复杂了。辟谣树是一颗动态树,树根会在辟谣树直径的中点。这也需要在一开始以谣言发生点做根来构建一棵树。每一秒会多加一层,在相加的时候,跟新树的直径。我们只需要知道谣言树每一秒的直径。在构建树的时候,把每一层的点存储。对于谣言树的每一秒进行判断。
2024-05-29 23:21:31
279
原创 abc 354 d
通过观察可以发现,可以分成4*2的每一小块。所以我们可以直接让abcd偏移到第一象限。在计算时,我们不要去计算2*4的大块。这样就可以用二位数组构造一个基本块。题目数据给的范围是-1e9至1e9。否则在边界的计算上又是一大难事。而是计算8块中的每一小块。直接加上4的倍数4e9。
2024-05-19 10:42:48
210
1
原创 abc337_e Bad Juice
一定要输出endl,不然一直TLE,别问我咋知道的,还检查不出来!题意:有n杯果汁,有一杯喝了会拉肚子,最少找几个人,能测出哪一杯是坏的。我们需要几个人,每个人分别测的是2的几次方倍。因为如果所有人都没窜西,所以剩下的一定是坏的。通过看这些人共同喝了哪一杯就可以得出答案了。得到每个人需要喝哪些,和哪些人窜西之后。(一个人可以在不同的杯子里喝一口)这样就可以分清到底是那一杯出了问题。所以只需要和n-1杯就够了。
2024-05-16 22:06:24
274
原创 多项式乘法
两个多项式相乘,若暴力计算,进行系数乘法,时间复杂度为借助快速傅立叶变换FFT或NTT可以降至原理大家可以看-->多项式乘法本质上是对每一项进行精细的计算,所以我们也可以用它来求高精度乘法。
2024-05-16 18:44:22
687
原创 [ABC337D] Cheating Gomoku Narabe
因为形成的图形可以竖直也可以横放,所以需要将原先的图形旋转,得到一个新的图形。让ans=k+1,当你查找完发现ans不变的话就说明无论怎么操作都不可行。题意:给你一个高为n,宽为m,由('.','x','o')组成的二位图。问至少操作几次,可以有一个长为k,宽为1,由'o'组成的长条。我们可以利用前缀和之差去计算从该点到前k个三种符号各有几个。因为题目给出n*m<=2e5,所以只能进行一维的操作。你可以进行操作:将'.'转化为'o'
2024-05-16 18:25:01
251
原创 二分答案法
若该mid符合题目要求,我们就可以根据题目是需要最大值还是最小值,来对L或R进行偏移。在cheak函数中传递进入的只有一个mid值,也就是当前答案值。和二分查找一样,二分答案需要至少O(log)的时间复杂度。我们只需要模拟出该答案符不符合题目要求就可以返回0或1了。在用此方法之前,你需要证明题目所求的值是单调的。我们直接对答案进行二分,假设某个答案mid之后。在求一些最大最小的答案时可能会用到的一种方法。带入cheak函数进行求证。以此让mid最大(小)化。
2024-05-15 18:06:38
130
原创 abc352_d
这里引入一个cnt数组记录当前数是否应当在区间内。将区间内的数放进大小根堆中,从而实现快速的查询。最后在每次查询前,判断根堆顶是否为合法数据即可。所以可以先排序然后直接枚举区间,找到答案。因为最终需要形成连续子序列。
2024-05-14 15:13:55
138
1
原创 顶堆的原理
priority_queue<int,vecter<int>,greater<int> > 小顶堆。然后将该元素与他的父元素进行比较,若父节点大于他,那么就进行元素交换,并且进行递归。在push元素的时候,你先将数据放在数组最后面,相当于树的最下面。这是两个在c++STL库中可实现维护堆顶为最大(小)的两个容器。所以就要将两个子节点中更小的那个与当前树根进行交换。你需要维护一颗父节点小于等于子节点的一棵树。以下代码为小顶堆的实现,大顶堆相反就可。对该节点的左右子节点进行比较。因为我们要维护树根为最小。
2024-05-13 10:40:22
307
原创 双指针(尺取)
最后对慢指针进行移动,来求出每一次慢指针位置时的值。在求区间问题时可以用到的一种方法。对进入区间的数据可以进行判断记录。意为有两个指针,分别为快慢指针。当区间内的条件满足题目所需时。特别记录当他第一次进入时。可以对答案进行处理判断。首先你让快指针跑出去。
2024-05-13 10:16:44
105
原创 快速幂集合
在ksm开始时因为先使底数为1,所以在计算结束后要减去1。在某些给出类似斐波那契的递归函数题型时,可以使用矩阵加速。在幂对1与运算后若为1则运算,否则就跳过此次运算。这样就能使整个计算过程的时间复杂度缩减为logn。在进行矩阵乘法时,可以使用函数重载来使代码简便。意为基矩阵乘上几次加速矩阵便能得出第几个值。再创建一个加速矩阵最为需要乘的转换方程。过程表示为2的1次乘2的4次。将乘法改为高精度乘法就能达成。需要初始的前几位值组成基矩阵。分解成1次2次4次的形式。在原有的快速幂模版下。
2024-05-13 09:48:45
247
原创 TZOJ-6558
若这个点是割点,则去掉它,减少的点对个数不止2*(n-1),还需要将所有与他它通的大小两两相乘再相加。如果一个点不是割点,那么把它去掉,不会影响与它无关的点对,去掉它之后,减少的点对的个数即为2n-2。在深搜的同时就能够得到答案。
2023-08-15 20:13:03
86
原创 TZOJ-3348
我们以一条线段的一端点为起点,沿着线段方向看去(一条射线),在左手边为逆时针方向,右手边为顺时针方向。如果另一线段两端点分别在这一线段的两侧,那么线段可能相交(也可能在线段外),否则不可能相交。这个过程主要通过叉积来判断: 叉积大于 0 ,在点在向量的顺时针方向,小于 0 , 在逆时针方向;说到线段, 我们很自然想到直线,判断两条直线是否相交只需判断它们斜率是否相等,相等就为平行或重合, 不等就相交。然后,我们只需判断 d1 * d2 < 0 并且 d3 * d4 < 0 便可判断线段相交。
2023-08-13 11:54:52
90
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人