![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
吃瓜市民
这个作者很懒,什么都没留下…
展开
-
旋转数组专题
二分的核心思想就是干掉一半的解空间153. 寻找旋转排序数组中的最小值// 二分的核心思想就是干掉一半的解空间class Solution {public: int findMin(vector<int>& nums) { int len = nums.size(); int l = 0, r = len - 1; while (l < r) { int mid = l + (r - l) .原创 2022-03-01 18:39:01 · 60 阅读 · 0 评论 -
leetcode hot100刷题记录
树96 不同的二叉搜索树栈32 最长有效括号出现不匹配的右括号知道计数可以重新开始了但遇见左括号,无法确定未来是否会匹配,未来匹配不上计数应当重新开始,能匹配上计数应该继续()((),这个左括号就无法判断是否应该把第一对的2继续加上最后一对的2数组,串之类的题,最暴力的可以枚举两个边界...原创 2022-01-18 20:43:27 · 202 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
剑指 Offer 16. 数值的整数次方收获:对于输入要考虑它什么值都能取到,是否会有异常情况,异常情况可以用全局变量/返回值/error报出,可以和面试官讨论用哪种int的范围,-2147483648~+2147483647,负数比正数多一个(计算机中的正负数表示:正负号由第一位表示,例如8byte的数字,2^8=256可以表示256个数,正数最大01111111=127,以为0的正负都一样,没必要占用正负两种表示,所以10000000没有意义,因此设置了一种巧妙的表示负数的方法:补码:=负数对原创 2022-01-18 20:37:54 · 220 阅读 · 0 评论 -
【洛谷日报#13】浅谈二分的边界问题
Part1:二分的中心思想这是一个杯具,当你将二分的l+1<r写成l<r时,相信很多人都讨厌二分的边界,每次都弄不清楚二分的l和r要等于mid,还是mid-1,又或者是mid+1,这导致了很多人因此失分,那么,到底要怎么做才能区分二分的边界呢?二分的思想主要分三种:l和r代表的“成本值”均可行,且有一个ans变量记录当前的最优 l和r代表的“成本值”均可行,最后的答案是l或r l代表的“成本值”可行,r不可行,最后的答案是l下面我们将依次讲解1、2两种,第三种不推荐使用,比较容转载 2021-01-10 11:01:25 · 329 阅读 · 0 评论 -
KMP总结
应用1.求循环节: 循环节长 = len - Next[len],一定要注意,必须是len - Next[len] 例:没有循环的时候必错,因为比 len 还小的数-Next[len]<len,而结果是 len所以要注意,在求Next[]的时候,循环要(;i<len;)这样才能把Next[len]求到...原创 2019-09-14 14:19:10 · 97 阅读 · 0 评论 -
HDU - 1176 免费馅饼(kuangbin专题十二DP)
不以总结为目的刷题就是在耍流氓! 做这个专题的时候,我也一直在思考。如果是随便拿到一道题,那怎样才能判断出是否是DP题?以我现在的经验是首先思考问题规模能否缩小,像馅饼这个题,设馅饼总共掉了t秒,代码#include<cstdio>#include<algorithm>#include<cstring>#define maxn 100005...原创 2019-09-14 14:19:31 · 115 阅读 · 0 评论 -
图的邻接表存储方式
用链表应该是比较麻烦的,可以用结构+数组实现struct Edge{ int from,to,val,next;}edge[maxn];int edgenum;void addedge(int u,int v,int w){ edge[edgenum].from = u; edge[edgenum].to = v; edge[edgenum].val...原创 2019-09-16 19:33:19 · 320 阅读 · 0 评论 -
最短路径之dijistra
dijistra算法:跑过一边之后就把源点到所有点的最短距离都求出来了。算法思想其实应该属于DP,因为这个问题有着明显的最优子结构d[y]是指源点到y的最短距离,那显而易见:d[y] = min{d[x]+w(x,y)}这个和一般的dp题代码有点区别,因为一般的都是根据下标来推下一个,而这个点之间的连接要靠图来判断最重要的区别是初始化的时候只有一个值是已知的,就是所有源点直接相邻的...原创 2019-09-18 17:13:14 · 296 阅读 · 0 评论 -
最短路径之弗洛伊德
Floyd算法是大二到大三期间集训时候才算真正接触的,或许只有前一段时间DP的积累现在才算是真正理解这个算法需要充分理解DP的滚动数组思想才能算是真正的掌握Floyd算法又称为插点法算法的目标是要求图中所有两个点的最短距离,就用dis[i][j]来表示但是dis[i][j]是不够设置为状态的,因为这个状态比较粗略,状态之间无法转换这里就加了一个很神奇的限制条件,然后形成了这个状...原创 2019-09-17 23:44:53 · 169 阅读 · 0 评论 -
快速幂
要求a^b 最简单就是把a连×b次,所以复杂度是O(b)也就是O(n)看起来还行哈,但是当然有更好的啦一般人真很难直接想到还有这种操作:快速幂快的原因就是因为它充分利用之前的结果,零碎的东西在最前面先×上,到后面就越来越大ll ksm(ll a,ll b){ ll ans = 1,base = a; while(b) { if(b&1) { an...原创 2019-09-19 19:45:00 · 82 阅读 · 0 评论 -
DP的状态设定及状态转移方程总结
最长上升子序列:dp[i],以下标i为结尾的最大长度dp[i] = max{ dp[j]+1 | j<i,a[j]<a[i] }最长公共子序列:dp[i][j],串a的前i个和串b的前j个中最大的公共长度if(a[i-1]==b[j-1]) dp[i][j] = dp[i-1][j-1]+1;else dp[i][j] = max( dp[i-1][j] , d...原创 2019-09-14 14:18:26 · 608 阅读 · 0 评论 -
素数判定,素数筛
这些零碎的知识点每个都学过N次了,但隔一段时间就会忘,记录下来素数定义:只能被自身和1整除的大于1的正整数通过这个定义,我们就可以得出判断素数的第一种方法:将这个素数除以从 (2,sqrt(n)] 的数,若没有整除的就是素数(这里所用的最大除数是sqrt(n)而不是n-1的原因是:现在正过来想,num1*num2 = n,那当试到num1>sqrt(n)的情况时,num2一定就&l...原创 2019-09-14 14:14:45 · 238 阅读 · 0 评论 -
转载:C++字符串输入(读入整行等)
--------------------- 本文来自 good_luck512233 的CSDN 博客 ,全文地址请点击:原文链接:https://blog.csdn.net/good_luck512233/article/details/52791005关于在C++中字符串的输入整理笔记cincin是C++中最常用的输入语句,当遇到空格或者回车键即停止如:#include #in...转载 2019-09-05 20:22:17 · 508 阅读 · 0 评论 -
平衡等式 CSUOJ - 2144 (DFS)
猴开森学了两天第一次不看题解做出一道DFS题,至少看到自己的一点进步,也是很开心了,赶紧把题解写下来 (o゜▽゜)o☆[BINGO!]Description写一个程序要求当输入在整数范围内的一个整数R后, 计算机便会检查,在下式□处能否填上“+”、“-”或“×”号凑成相应等式。如能凑成,则印出所有这些等式的个数。注意,考虑符号的优先级。 1□2□3□4□5□6□7□8□9=RI...原创 2018-07-28 15:42:40 · 556 阅读 · 0 评论 -
Longest Regular Bracket Sequence(区间DP)
碎碎念这道题着实想了好久啊,自己做是不行了。看了大神的题解,就没有详细解释的,标着水题的人是有多可怕,最后只能按照计算机的执行步骤一步步演示才弄懂的。区间DP之前就会做石子合并的模板题,今天也算是又学会一种,距离我能理解这DP大概还有很长一段路要走。 思路石子合并那种题,就是最最模板的那种 :一次决策后就可以将一个大区间分成两个小区间,先解决小区间的问题再把小区间合并对于这...原创 2018-08-04 19:39:33 · 279 阅读 · 0 评论 -
Tri Tiling POJ - 2663(DP)
BALABALA比赛的时候想的还挺对的,一试样例错了,就懒得改了,当时是因为情况算重了,而且自己头脑也不是很清醒。听了校队的讲解之后觉得太有道理了hhh 思路把一个问题分解成子问题的时候要注意,得把所有情况都包含上像这个问题就可以分解成,先在n个单位中分割出去前2个单位,这种情况有3*f(n-2)种但2个单位的情况不包含分出去4个单位的情况完整的应该是f(n) =...原创 2018-08-04 20:25:26 · 138 阅读 · 0 评论 -
Can you find it? HDU-2141 (二分查找模版题)
总结思路这个神奇的题WA了8次,折在了各种奇葩的问题上,其实就是标准的二分查找模版题大数暴力会爆炸,枚举三个数组,时间复杂度O(N^3)。解决的方法是进行预处理操作。将本来同时进行,多层循环中的某些层拉出来,分部操作。首先将前两个数组进行枚举得到和数组,时间复杂度O(n^2),然后枚举第三个数组,在和数组中找值,查找为了节省时间,选用二分。错误首先是vector的使用,刚开始接...原创 2018-08-05 14:23:16 · 267 阅读 · 0 评论 -
Multiplication Puzzle POJ - 1651(区间DP)
碎碎念想了两天的一道题,顺着代码一步步演示才看懂的,现在的水平是真菜啊。就是想不明白这个状态设置以及转换,看来真的是要多做题体会一下了 思路状态设置:dp[i][j]表示以i,j为区间的左右端点的合并次数状态转换:dp[i][j] = min( dp[i][j] , dp[i][k]+dp[k][j]+a[i]*a[k]*a[j] );k是在这个区间最后一次抽出的卡片,在...原创 2018-08-05 14:56:03 · 119 阅读 · 0 评论 -
汉诺塔问题(递归)
Description汉诺塔:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,有三根柱子。印度教的主神梵天在创造世界的时候,在其中一根柱子上从下到上地穿好了由大到小的64片金盘,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金盘:一次只移动一片,不管在哪根柱子上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根柱子上移到另外...原创 2018-08-24 14:41:13 · 298 阅读 · 0 评论 -
ACM的从文件读入
非常简单啦,但总是记不住,记录下函数原型FILE * freopen ( const char * filename, const char * mode, FILE * stream );输入freopen("shuru.txt", "r", stdin);输出freopen("shuchu.txt", "r", stdout);把两个txt文件放在和c++文件...原创 2019-08-14 18:37:05 · 306 阅读 · 0 评论 -
HDU - 1421 搬寝室(经典DP)
Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2k件过去就行了.但还是会很累,因为2k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的...原创 2019-09-01 11:10:36 · 218 阅读 · 0 评论 -
二分+三分
二分理解while(left<=right),答案一定在[left,right]中。 思想有两种通过缩小范围来快速找到目标数的位置(应用1)--- 找到答案终止循环 不断舍弃答案不可能存在的区间来逼近真实答案,若答案为整数,则可以正好找到该答案,若为实数则会找到在某个精度内的答案(应用2,3)--- 把循环全走一边结束STL中给出的函数lower_boundup...原创 2019-09-14 14:20:03 · 169 阅读 · 0 评论