自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AtCoder Beginner Contest 366

题目大意:给你总的比赛场次数,再给你目前的比分,问你这场比赛的结果是不是已经出来了。也就是有一个人的分数达到n/2+1就代表结束了题目大意:给你n个字符串,让你按列的顺序逆序输出,在同一列长度下部分字符串是没有的,就用星号*来表示,并且删除后缀的星号。模拟。

2024-08-12 19:45:27 574

原创 AtCoder Beginner Contest 364

题目大意:不能吃到连续的两个甜菜,如果遇到连续的两个sweet的话,那就不能吃了,问你能不能把所有的菜全部吃光。按顺序遍历一遍最后判断下标走到哪里退出就行了。

2024-07-29 22:00:25 832

原创 AtCoder Beginner Contest 363

题目大意:给你四个区间,分别是1-99,100-199,200-299,300-399,然后给你一个数小于299,问你这个数到下一个区间的大小是多少直接判断在哪个区间然后输出下一个区间起点减去这个数就行了题目大意:每个人的都有n个头发值,每天每个头发都会+1长度,你要输出至少有p个头发的值大于等于t的时候的天数,如果一开始就有至少p个头发值大于等于t,那么输出0就行了。暴力模拟头发增长的天数,如果满足条件就退出输出当前天数就好了。

2024-07-22 23:30:41 520

原创 AtCoder Beginner Contest 357

等比数列的求和公式:a【1】*(1-q^n)/(1-q),a【1】就是n本身,那么q是什么,能发现每次N往前堆的时候都会增加N字符数量的长度,比如9每次都会多一个0,也就是10^1,10每次都会多两个0,也就是10^2,所以这个等比公式就能写出来了。题目大意:输入一个n,输出一个3^n行3^n列的图形,这个图形由九个部分组成,外围八个部分是由前一个3^(n-1)行3^(n-1)列的图形拼凑而成,中间那个部分则全部用。首先,直接走一遍最起码也要1e18,这个数字只能用log(n)的方法去写,或者说有个结论。

2024-06-09 10:12:02 473

原创 AtCoder Beginner Contest 356

由于钥匙一共就15把,我们枚举每一把钥匙为真的可能性,一共就是2的15次方,只需要判断当前钥匙排列是否能通过这m种是否开门的尝试方案,全部通过则说明当前钥匙的组合是可能的,就把ans++。题目大意是一共有n个钥匙,编号为1到n,需要k个真钥匙才能开门,然后给出了m个关系,也就是在某次尝试中用了这些钥匙开门,并且给了你是否开门的结果,问一共有多少种真钥匙的可能。也是简单题,输入包含n个项以及m行,在第二行输入第i个是第i列应该达到的目标,之后m行每行n个,要求每一列相加的和大于对应的第i列。

2024-06-04 09:13:52 366

原创 线性DP:经典题目

初始化dp【0】【0】【0】为合法,初始化为0,dp【0】【0】【1】和dp【0】【1】【0】非法,初始化负的最大值。dp【i】【j】【1】由dp【i-1】【j】【1】和dp【i-1】【j-1】【0】-a【i】转换。dp【i】【0】【1】就由dp【i-1】【0】【0】-a【i】以及dp【i-1】【0】【1】转换。dp【i】【j】【0】由dp【i-1】【j】【0】和dp【i-1】【j】【1】+a【i】转换。那么dp【i】【0】【0】就由dp【i-1】【0】【0】和dp【i-1】【1】【0】转换。

2024-06-01 11:22:48 953

原创 最短路算法(模板)

TZOJ:8537求一个点到其他所有点的最短距离,无负权边用一个小顶堆去优化,每次弹出一个未标记过的最近的点,不能处理有负权边的情况。

2024-05-28 14:18:04 406

原创 贪心算法:Buy Low Sell High(贪心+反悔)

所以如果之后的利润更高,那我只需要把当前第i天的股票价格更新成利润之后,再把第i天的股票价格再放进一次小顶堆,用来为之后有更高利润的情况反悔的机会,就可以使利润最大化。我们把每天的股票价格都放在一个大顶堆里,如果第i天的股票价格高于小顶堆里的最小值,那么就说明第i天卖出股票是有利润赚的,并且。题意是已知n天的股票价格,你只能持有一股,每天只能卖出或者买进一股,或者什么都不做,问n天后的利润是多少。一般要用反悔的方法都是要用到小顶堆或者大顶堆。

2024-05-23 21:41:14 201 1

原创 贪心算法:Greedy Gift Takers(二分+贪心)

但是其实实际上x-1位上如果有出现插到x之前的位置上,x也有可能最后到达队头,那么我们就使x之前的c【i】排一个升序,然后按照上面的顺序使x逐渐往前移,如果c【1】<=num,就把num++,也就是c【1】这个值最后会到x之后,成为x之后的一个数字之一,一直到x-1之前,如果都可行,就返回true,否则就返回false。假设如果第i位能拿到礼物,i+1位拿不到礼物,那么i+1以及i+1之后的所有牛应该也都拿不到礼物,所以这个题目具有二分性,所以可以用二分去做。询问最后一共有多少头牛是拿不到礼物的。

2024-05-23 21:33:52 281 1

原创 贪心算法:货币系统(贪心+完全背包)

实际上这题的目的是缩小货币系统,比如3 19 10 6这一套货币系统,其中6可以被3表示,19可以被10和3表示,所以实际上这一套货币系统只有3和10是有价值的,其余两个是可以被忽略的,因此等价于这套货币系统的货币种类最少为2.题目大意是给定一套货币系统,你能否找到小于等于n的货币种类,使得其给定的货币与你找到的货币完全等价,等价的条件是对于任何一个数字,两个货币系统都可以表示或者都不能表示才算等价。

2024-05-21 20:48:14 218

原创 贪心算法:分组(贪心+二分)

遇到当前数字a【i】就二分各个组别的最大值,如果能搜到组别最大值为a【i】-1,那么就更新那个组的最大值,并且人数+1,如果找不到就新建一个组别,使这个组别最大值为a【i】,人数为1。关键是每次二分都要找到最后一个符合条件的值,因为最大值相同的情况下,后面的组别人数一定是比前面的组别人数少的,所以我们把符合条件的值放到后面的组别可以维护整体的平衡。题解是首先将整个a数组排升序,那么遇到相同的数字的情况就可以开新的组别,保存每个组别的最大值以及各个组别的人数大小,a数组排序就是为了让组别最大值也是升序的。

2024-05-21 20:40:51 196

原创 贪心算法:建筑抢修(贪心+反悔)

反悔就是将每次循环过的建筑时间都放进一个容器中,如果当前时间加上建筑抢修的持续时间小于等于当前建筑的截止时间,那么可抢修建筑数量num++即可,否则我们将从容器中弹出最大的持续时间,并把这段时间减去,替换成当前建筑的持续时间,证明结果如下。这就是我们需要排序的结果,但是单单只排序一个截止时间是完全不够的,如果同一截止时间条件下一定是持续时间更短的更优,或者说如果之后有一个建筑所需要的抢修时间更短,那么实际上去选取那个建筑是更优的,所以我们需要用的反悔的方法。得到交换前与交换后的结果,化简得到。

2024-05-21 20:31:44 313

原创 贪心算法:国王游戏

然后左边的s/R【i】是一定比s*L【i+1】/R【i】小的,那么就能得到左边式子里s*L【i】/R【i+1】是比较大的,再把他们两个取出来得到s*l【i】/R【i+1】<s*L【i+1】/R【i】,两边同时除s,得到。l【i】/R【i+1】<L【i+1】/R【i】,两边同乘R【i】*R【i+1】得到L【i】*R【i】<L【i+1】*R【i+1】,所以就推出了将L【i】*R【i】当作排序方法,使得这个值越小排在越前面。写的时候就想到高精度除低精度了,用的还是高精度乘高精度的板子。

2024-05-20 11:31:00 144

原创 贪心算法:糖果传递

x【i】实际上是一个前缀和,由前面一个状态加上pos-a【j】得到当前状态,所以问题就变成了一堆常数和一个未知数的差值之和怎么样才能更小,这个时候就要用到中位数,只要取到这堆数的中间数作为x【1】的值,那么其他点到这个数的距离之和就是最小的。可以发现其中x【i】都是未知数,如果把他们全部相加会得到没有x数组的一条等式,也就是n条方程只有n-1条是有效的,因此n-1条方程可以解出n-1个未知数,所以就用x【1】去表示其他x。我们先设x【i】为第i个人给左边的人糖果数量,如果是正数就是给,如果是负数就是拿。

2024-05-19 11:39:15 341 1

原创 分式规划问题(二分+Bellman图论(spfa))3

其中dfs就是bellman算法,存储也要用稀疏图去存储,遍历每一条边的情况,如果出现更短的路,就要继续dfs下去,直到没有更短路被更新或者被更新点已经走过,就说明有最短路产生。求负环的方法,需要用的bellman(spfa)算法,用于判断图内有无负环产生,并求出起点到各个点的最小值。所以,Wi-x就可以作为他的权值使用,那么我们只需要发现至少一个负环,就说明当前二分答案是可行的。由于权值的累加要减掉x*k,实际上就是每个边权值都减去k,就得到了。首先可以得到这个公式。

2024-05-17 22:38:38 291

原创 分式规划问题(二分)2

首先,分式规划问题的思路一般都是二分,所以先把二分模板写出来,之后就是判断在当前二分答案是否可行,我们可以将每个点之间的权值当成他们之间的距离,那么我们只需要用prime最小生成树来生成一颗n-1条边的树,就可以得到总距离的最小值,从而判断该二分答案是否可行。不过实际好像1e6也能过,有可能是数据比较水,也可能是这种情况应该是不会出现的。题目大意是给定n个点的二维坐标,每个点都有一个高度h值,将这n个点通过n-1条边相连,并求和每条边相连的两个点之间的水平距离X,和两点的高度差H,最终要使得H/X最小。

2024-05-16 22:36:26 279 1

原创 分数规划问题(二分)

首先最后得到的答案范围是0到100%,并且四舍五入到最大整数,所以我们可以二分这个范围,到最后小数点后两位为结束条件,二分条件确定好了,接下来我们就要选择n-k个项去得到当前最优的情况才能判断是否可行,如果可行就把左端点往右移动,否则把右端点往左移动。通过推导可以得到当前二分的答案x与各个项之间的权值,只要保证最后选取的最优n-k个的总权值是>=0的就能证明当前x是可行的,返回true。首先用c数组存储n个项的权值,然后排个序,在按从大到小的顺序n-k个就行了。

2024-05-15 21:44:33 139

原创 二分类算法

一般来说,我们要暴力去求出他的最优解,这是一定会超时的,但是不难发现,他的答案是有一定的规律的,如果说能通过这个答案的规律,再结合二分的方法,就能得到巧妙地组合。比如,要得到一个最优解x,而小于x的答案是通不过的,大于x的值是通过的,二分就能体现出他的用途,所以我们要在题目中发现这种规律,就可以很好的用二分去写了。二分,小到二分查找固定值,大到二分查答案,都可以用二分解决,二分的题目包含了许多类型,在贪心,图论,深搜,广搜中都能见到。如果直接暴力的话,复杂度就是1e6*1e6*1e6。

2024-05-14 22:03:22 264

原创 堆排序中的算法

堆排序可以直接用priority_queue<int >(默认为大顶堆)去直接实现这个大顶堆以及小顶堆,那么我们用一个大顶堆和一个小顶堆,小顶堆中装大于x的数,则小顶堆的堆顶就是大于x的最小值,大顶堆中放比x小的值,则大顶堆的堆顶是小于x的最大值,我们通过两个堆就得到了与x最相近的两个值。同样的,也可以维护小顶堆的大小,使得小顶堆永远小于某个数K,则这两个堆的作用就是维护所有数中第K大的值,而且是一种动态维护的方法,动态的得到放入的数中第K大的值(或第K小)。这一题大意就是动态维护第K大的值。

2024-05-13 21:05:46 155 1

原创 各种排序算法

在L,R区间内通过一个中间值来使左边的数比中间值小,右边的值比中间值大,对于中间值来说,是有序的,再递归排序(L,mid-1)和(mid+1,R)即可。对于排序的过程,用一个双指针来查询左边区间不合法的值和右边区间不合法值,然后再进行交换。总的复杂度是O(nlogn)。不过一般用sort会更快,也会更方便。

2024-05-12 22:01:15 145

原创 双指针(尺取法)算法

当我们L固定在某一点时,右移R来使R能达到当前L为左端点时的最大符合区间,此时的num可能数量就加上R-L+1,表示以L这一点为左端点时,一共有多少种情况是符合条件的,之后在L++,再去寻找最大右端点,一直循环到L走到底的时候结束。题目大意就是给定一个全是int值的数组,要求出一共有多少种L,R的可能使得从L到R的这一段连续区间之内Al xor Al+1 xor Al+2....xor Ar = Al + Al+1 + Al+2....+ Ar。注意异或^符号的优先级很低,所以要加个括号。

2024-05-11 19:48:50 219 1

原创 快速幂题解

但是不知道为什么在定义Mod前面不加const导致超时,洛谷上面跑了一下要3s,加了const的话就是0.9s左右,不是很懂为什么,不过之后遇到这种全局变量不变的定义就直接加const好了,视频给的板子是重载乘号来实现的,代码更简洁。裴波那契数列的第n项以前写过,但是忘了,看到用矩阵实现就想起来的,本质上就是用矩阵的方法来通过矩阵快速幂从而直接得到第N项的值,之后那个题也是通过矩阵快速幂去实现的,只是后面那题是Fn=Fn-1+Fn-3。通过快速幂结合高精度乘法。

2024-05-10 20:46:12 136

原创 高精度运算方法

高精度加法就是一位一位的运算,很简单的道理,但是自己用数组模拟出来的代码非常繁杂,就直接用他的高精度加法模板了,根据这个模板可以写出减法和乘法,只需要改动子程序部分就可以了。减法多一项比较环节,将所有减法全部转换为较大数减去较小数,更方便计算。高精度除法有两种情况,一种是高精度除以低精度,一种是高精度除以高精度,而高精度除以高精度的方法也同样可以解决高精度除以低精度,所以就直接用高精度除以高精度的方法去完成就行了,复杂度等同于高精度除以低精度,为O(n)。

2024-05-09 20:35:54 189

原创 TZOJ 3348: 线段相交Ⅲ

之后再用叉乘判断一条线段的两个端点是否在另一条线段的两端,也就是两个叉乘再相乘<0的情况,如果=0,那就是相交点是端点,就直接输出YES就行了,如果两次叉乘判断都是<0的情况,那就要确定交点(交点这个我看不明白,请教队友做的,讲的挺清楚的)线段相交有两种情形:一种是“规范相交”,另一种是“非规范相交”。题目大意:就是给你两个线段,让你判断是否相交,如果相交到端点,就输出YES,如果相交是中间点的,就输出点坐标。规范相交认为a,b两种情况都是不相交的,而非规范相交认为a,b两种情况都是相交的。

2023-08-14 22:15:23 53

原创 TZOJ 5103: Electric Fence

我用(0,0)和(2,2)带入得到2,但是实际上是三个点,我就打算gcd然后+1的,但是最后结果就错了,之后把+1删了后才对了,后面发现我算三条边每次都+1的话就是把三个顶点重复算了,导致最后整数点多了2个才导致的错误,后面是代码。代码引用的格式不知道为什么一直不对,就直接复制到文本里去了,我写的时候想到三角形面积可能会出现小数部分,就用的double,但是求gcd又要int类型,所以写的比较麻烦,但是写完看后附代码的时候他们直接int就完事了,也不知道为什么。

2023-08-14 21:01:21 34

空空如也

空空如也

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

TA关注的人

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