c++
文章平均质量分 59
奈白咕咕咕
这个作者很懒,什么都没留下…
展开
-
线段树(优雅暴力)从入门到入坟
当OI考试想不到正解,抓耳挠腮,准备爆零或者打表的时候你或许可以考虑用线段树来打个暴力卡过或者拿60分当然,如果你随便打个暴力,能卡个20分就算是信仰极高 幸运的玩家了所以废物来讲一下线段树的入门,真就是入门,没学过c++也会的那种先从思路入手,假设我们要维护一个数组(序列),假设让你在某个区间同时加上一个数或者求和区间乘一个数的时候,大多数人选择暴力求解那你AC 寄了,单次的查询需要O(N)的复杂度,但是线段树只有O(logN),嘎嘎快正文--------------------------原创 2022-03-03 20:50:59 · 179 阅读 · 0 评论 -
Dijkstra----图论最短路算法/Dijkstra堆/优先队列优化
Dijkstra是图论最常用的最短路算法,floyed复杂度是O(n^3),显然是超时的,Bellman-Ford也是超时问题,SPFA更不用说,已经死了 菊花图给你拿捏的死死的所以万众瞩目的Dijkstra单源最短路径你怎么能不会呢,我也不会先从未优化的dij开始讲起大概的思路就是讲=将图上的点分为两类,一类是找到最短路的节点,一类是未找到最短路的节点(建议用一个bool数组就行,不同并查集)那么讲讲准备,首先未优化的dij是通过;邻接矩阵存储的图,所以我们需要一个数组A[][]表示i和j直接连接原创 2022-02-09 19:45:06 · 434 阅读 · 0 评论 -
堆排序(建堆及向下调整)
首先,堆排序顾名思义,它的数据存储的像一个堆一样,那么想一下,像堆的数据类型都有什么?树形结构!所以,堆排序的存储就是通过一颗完全二叉树实现的,可以理解成满了,但没完全满 为什么这样说,原因很简单,它的n-1层组成的二叉树必须是满二叉树,但是叶子结点组成的第n层可以不满,但是有一个前提条件假设根节点编号为1,两个子节点为2,3,那么2和3的子节点空余的顺序必须有序,就是说,4,5,6这三个叶子结点必须满足按顺序(也即是说,若6这个叶子结点存在,那么前面的说有叶子结点不可以空缺)讲完了基本的性质,考原创 2021-11-05 17:34:17 · 1400 阅读 · 0 评论 -
空间与时间的超级优化----背包问题的滚动数组
动态规划(Dynamic Programming 简称DP)是解决“多阶段决策问题”的一种高效算法。• 通过合理组合子问题的解从而解决整个问题解。其中的子问题并不是独立的,这些子问题又包含有公共的子子问题。……• 动态规划算法就是对每个子问题只求一次,并将其结果保存在一张表中(数组),以后再用到时直接从表中拿过来使用,避免重复计算相同的子问题。• “不做无用功”的求解模式,大大提高了程序的效率。• 常用于解决统计类问题(统计方案总数)和最优值问题(最大值或最小值)原创 2021-08-21 09:48:32 · 307 阅读 · 0 评论 -
洛谷三谴救援代码
#include<bits/stdc++.h>#define ll long longusing namespace std;ll n,m;ll f(ll x){ if(x==1)return 0; if(x>3*m){ll k=(x-3*m-1)/(2*m)+1;return f(x-k*2*m)+k;} return f((x-1)/3+1)+1;}int main(){ scanf("%lld%lld",&n,&m); printf("%ll原创 2021-08-18 09:22:22 · 101 阅读 · 0 评论 -
三谴救援--洛谷
小学数学题(代码在后面)这题的关键点是如果将猪分成三组且前两组猪数量相等,那么只要将前两组猪分别放在天平两侧进行一次称量,即可知道要找的猪在三组中的哪一组。设 f(x)f(x) 为猪的数量为 xx 时的答案。显然 f(1)=0f(1)=0,且当 mm 不变时,f(x)f(x) 单调不下降。可以发现每次分组时让三组中猪数量最多的那组猪数量最小时更优,考虑如何分组。先不考虑 mm 的限制。n=3kn=3k显然此时令三组猪的数量均为 kk 时是最优的。n=3k+1n=3k+1此时令前两组猪数量为原创 2021-08-18 09:19:46 · 216 阅读 · 1 评论