![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
Mavis code
这个作者很懒,什么都没留下…
展开
-
To the Max-POJ1050-二维区间前缀和
题意:给你一个方阵,求其子矩阵和的最大值。思路:如果朴素枚举的话,复杂度O(n4),如果使用前缀和,可以降一维,所以O(n3);。枚举就是枚举当前行i,然后枚举后面的行j(j>=i),然后再枚举列k(1,n).但是可能会有问题,因为这样枚举,中间的子矩阵看似没有枚举到。按照这样的枚举方式,如果最大子矩阵在中间,那么前面的列的元素和肯定<0,所以我们将前面<0的部分删去,就...原创 2019-03-09 20:51:42 · 203 阅读 · 0 评论 -
最小生成树-Kruskal-Conscription-poj3723
思路: 首先是转化,男生与女生之间有关系,那么他们之间就有一条边,那么求最大生成树就可以了,不过问题来了,男生与男生之间也可以进行移动,所以我们换一种思维,既然正着无法干,那么就看能减少多少话费,最后减去就可以了。将权重改为负值,因为这样就可以求出最小生成树。 另外,使用kruskal算法,使用并查集高效判断边是否处于同一个联通分支。 具体看大妈注释。AC code:#includ...原创 2018-09-07 11:39:16 · 104 阅读 · 0 评论 -
最小生成树-Kruskal-Conscription-poj3723
思路: 首先是转化,男生与女生之间有关系,那么他们之间就有一条边,那么求最大生成树就可以了,不过问题来了,男生与男生之间也可以进行移动,所以我们换一种思维,既然正着无法干,那么就看能减少多少话费,最后减去就可以了。将权重改为负值,因为这样就可以求出最小生成树。 另外,使用kruskal算法,使用并查集高效判断边是否处于同一个联通分支。 具体看大妈注释。AC code:#include&...原创 2018-09-05 23:56:08 · 175 阅读 · 0 评论 -
次短路-DJ-好题
题意: 给你一个图,求次短路(路径可以重复)。 思路: DJ同时进行最短路和次短路的更新。 具体看代码注释。 推荐一个详细的解释:传送门。AC code:#include&amp;lt;iostream&amp;gt;#include&amp;lt;cstdio&amp;gt; #include&amp;lt;algorithm&amp;gt;#include&amp;l原创 2018-09-05 22:23:23 · 127 阅读 · 0 评论 -
二分搜索中的边界问题
现在讨论二分搜索时的边界问题. 首先是第一个模板:int binarySearch(int key){ int left = 0,right = n; while(left &lt; right){//这里是&lt;,与下面的r = mid,l = mid+1,和数组从0-&gt;n-1 //还有l,r的初始值l = 0,r =...原创 2018-09-08 15:14:33 · 188 阅读 · 0 评论 -
优先队列(贪心)-Fence Repair -POJ3253
题意: 将一根长n的木棍,看成符合要求的木棍。每次砍木棍的开销是被砍木棍的长度。求最小代价。 思路: 如果正向思考,那么就是将一根木棍砍成若干根木棍,这个过程可以形成无数种可能,复杂度高。我们不妨逆向思考,已经知道目标和原始状态,由于从原始状态到目标,可能性太多了。不妨从复杂的状态到原始状态,由多归一。 这道题提醒了我们逆向思维的重要性。 具体看代码注释。AC code:#in...原创 2018-08-31 21:17:01 · 209 阅读 · 0 评论 -
优先队列-Expedition -POJ2431
题意: 起点和终点有n个加油站(每个可以加一定数量的油),问能否到达终点。 思路: 我们转换一下思考方式,问题转化为:在到达加油站i时,就获得了一次在以后的任何时候都可以加i加油站的油的权利。然后我们将终点和起点看成一条数轴,终点是原点0,起点坐标就是起点离终点的距离。 具体看代码,看不懂我也没办法了。AC code:#include<iostream>#inclu...原创 2018-08-31 21:06:08 · 126 阅读 · 0 评论 -
Cow Contest - Floyd(好题)-POJ3660
题意: 有n头牛,强的牛的编号在前,弱的牛的编号在后,问有多少头牛的排名可以根据输入的数据确定? 思路: 本题思维转化比较巧妙,所以算是一道好题。输入a b,则建立一条从b指向a的有向边,本题数据量比较少,用Floyd算法判断两头牛之间的最短距离,最短距离不等于INF的表示这两个点建立了关系。如果一头牛与另外n-1头牛都建立了关系,则它的排名就已经确定了。AC code:#includ...原创 2018-08-24 18:40:46 · 153 阅读 · 0 评论 -
HDU 4734(数位dp)- F(x)
具体思路看代码注释。AC code:/*思路:数位dp。主要在于状态转移不好想。dp[i][j]表示i位数比j小的数的个数。用递归完成的话就只需要思考边界和状态转移。边界:dp[i][j]如果j小于0,显然是dp[i][j]=0的,如果i==0,说明就是0,显然任何数都比0大,所以dp[i][j]对于j>=0的时候dp[i][j]=1,否则dp[i][j]=0。状态转...原创 2018-08-21 15:46:11 · 121 阅读 · 0 评论 -
HDU1874-畅通工程续 -最短路-水题
思路: 模板题,但是要注意要要取重复的边的最小值。AC code:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#define INF 0x3f3f3f3f//刚才又是这里设置太小了 using namespace std;const i...原创 2018-08-24 15:28:23 · 144 阅读 · 0 评论 -
Silver Cow Party -(两次Dijikstra)- POJ 3268
思路: 第一次从终点X使用迪杰斯特拉,求出从终点X返回 所有点的 最短路。然后求各个点到X的最短路时,将路径反转,转化为从X到其他的点的最短路。两次使用迪杰斯特拉,与次小生成树那道题有异曲同工之妙。AC code:#include<iostream>#include<cstdio>#include<cstring>#include<alg...原创 2018-08-24 15:24:48 · 114 阅读 · 0 评论 -
折半搜索-Subset
题意:从n个数里面选取几个数,使得他们和的绝对值最小。AC code:#include&amp;lt;iostream&amp;gt;#include&amp;lt;cstdio&amp;gt;#include&amp;lt;vector&amp;gt;#include&amp;lt;bitset&amp;gt;#include&amp;lt;stac原创 2018-09-24 23:34:18 · 147 阅读 · 0 评论 -
UVA 11582 Colossal Fibonacci Numbers!(数论)
思路: 所有计算都对n取模。余数存在周期规律,最多n2项就会重复。然后快速幂判断目标处于周期的那个位置即可。注意用cin,而不是scanf,之前这里改了好久。AC code:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;using namespace std;const int maxn...原创 2018-09-15 15:57:22 · 122 阅读 · 0 评论 -
UVA140-Bandwidth(回溯法-双剪枝)
经典的回溯做法,紫书上196-197剪枝:1,最优性剪枝:目前的结果已经比已知的最优解还差时,剪枝。2,最理想化剪枝:从当前结果出发,后面的情况都是最理想的(预测),但是都比已知的最优解还差,剪枝。本题要注意的是一直WA的原因是题目所给的字母不一定是相邻的,所以字母范围不是A-H,有可能是A和Z两个字母 ,所以要映射或者压缩。#include&lt;iostream&gt;#inclu...原创 2019-02-17 10:11:49 · 503 阅读 · 0 评论 -
sqrt()函数参数的问题 - dev c++
题目传送门ACM一般习惯用DEV C++,简单方便,但有时也会被它坑。sqrt()函数参数只能是float和double类型,int会报错,pow()也是的,但是dev c++容错性强,不会报错 。#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#...原创 2019-02-10 09:55:58 · 3227 阅读 · 1 评论 -
牛客第三场-D-处女座的训练-(性价比)贪心
官方题解传送门这道题要么贪心要么动态规划,显然贪心更简单,首先尝试一下,按照b[i]从大到小,然后再a[i]从小到大排序,贪心取前面的,结果WA。然后思考,则是两个变量的贪心,很可能是性价比或者是乘积。到底是哪种我们可以去特例,只有两个题目的时候,设其时间和疲倦值分别为a1,b1,a2,b2.如果先做第一题,则总代价为b2a1,如果先做第二题,则总代价为b1a2.所以当b2a1 < ...原创 2019-01-27 10:05:20 · 230 阅读 · 0 评论 -
CF-C-DIV525-Ehab and a 2-operation task-还是思维太局限了
题意:给你一个序列,要你进行一下两种操作:1 j x 表示从1到j的所有数都加上x(0<= x <= 1e5);2 j x 表示从1到j的所有数都%x(0< x <= 1e5);要你在最多在n+1步操作后,能够将改序列转化为严格单调递增序列。输出操作步数然后输出操作。如果本身就满足条件,就输出0。题目传送门思路:昨天真的是被好好教育了,感觉智商被虐。。。...原创 2018-12-05 17:16:19 · 122 阅读 · 0 评论 -
Think myself - 无后效性(贪心+DP)
最近做了一些题,让我对之前我的思维方式产生很大的质疑。我也通过这些问题,思考我之前的思维方式,做出自己的反思,提出新的思维方式。先通过一道题引入。简单解决问题固然简单,关键是我们要发现背后的通性,思想的奥秘。题目传送门题意:一个工厂生产一个物品,每天的生产成不尽相同,要求的产量也不尽相同。后面的产品可以在之前的时间生产,但是每天的存储费用固定为S。要你求最小的成本。思路:贪心记录最小...原创 2018-11-30 17:01:28 · 883 阅读 · 0 评论 -
N的倍数-抽屉原理-前缀和
题目传送门题意:给你N个数,要你从这N个数中选出几个数,他们的和恰好是N的整数倍。输出所选数的个数,和数。思路:这道题要用到容斥原理。首先,N个数有N个前缀和,他们%N的余数,要么全部不相同,即0-&gt;N-1,这种情况,余数为0的前缀和就是所求的区间。另外一种情况就是,至少有2个前缀和%N的余数是相同的,那么他们之间的差值就是N的倍数。他们之间的区间就是所求区间。教训:思考问题时...原创 2018-10-30 20:54:57 · 328 阅读 · 0 评论 -
POJ2429 GCD & LCM Inverse pollard_rho大整数分解-好题
题意:给出两个数的最大公约数和最小公倍数,找出这两个数,并使它们的和最小。思路:设gcd = a1a2…an,lcm = a1a2*…ank;则lcm/gcd = k;现在题目转化为:求两个互质的数a,b满足a*b =k,且a+b最小。这里首先想到质因数分解,但是平时的埃式筛选法还有欧拉筛选法都不行,空间太大。这里要用到一种很巧妙的随机算法-Pollard_rho(大整数质因数分解)还有...原创 2018-09-30 14:32:14 · 196 阅读 · 0 评论 -
Six Degrees of Cowvin Bacon-POJ2139-最短路(优先队列)
题意:牛在同一部影片里,则距离为1,通过1个中间牛传递则是2,然后就想节点之间的距离一样传递。此外该图是连通图。然后就是对每头牛都用Dijikstra跑一遍。所以要用优先队列优化,否则会TLE。水题AC CODE:#include<iostream>#include<cstdio>#include<vector>#include<bitset...原创 2018-10-07 16:22:10 · 148 阅读 · 0 评论 -
Silver Cow Party-Dijikstra(队列优化+路径反转)-逆向思维好题
题意:给你一张有向图,要你求其他点到目标点x并且从目标点返回出发点的距离最小值的最大值。思路:我们学的是单源最短路,所以算其他点到目标点的距离不太现实,我们不妨转换视角,来个逆向思维,从其他点到目标点相当于把有向图反转后,从目标点到其他点。这样就可以解决去的问题,回的问题就是常规思路。所以先算回的最短路,然后路径反转,算去的最短路,然后两者相加就是往返最小值。最后比较即可。这里我写了两个版...原创 2018-10-07 11:31:11 · 187 阅读 · 0 评论 -
Prime Path-POJ3126-1欧拉筛选法+BFS-好题
题意:给你两个四位数的质数m,n(m&amp;lt;=n),每次变化只能改变当前数的一个数字,并且过程中的数字全是四位数的质数,求最小的步数。思路:先欧拉筛选法求出素数,然后从m开始BFS,每次只改变一个数位,如何只改变一个数位(这个很关键),这里用一个dir数组,dir[4] = {1,10,100,1000},具体看代码注释理解。AC code:#include&amp;lt;iostream&amp;gt...原创 2018-10-03 11:42:19 · 175 阅读 · 0 评论 -
Dead Fraction-POJ1930-辗转相除法-小数化为分数的技巧
题目传送门题意:将一个无限循环小数化为分数,但是循环节不定,省略号…可以是任何数字。比如0.474612399…循环节可能是从第一位开始就循环,也可能从第二位开始循环,但是最后一位(省略号前一位至少循环)。所以,可以枚举非循环的部分从0(第一位开始循环)到size-1(最后一位循环)。具体如何将无限循环小数化为分数,有数论的知识技巧。无限循环小数化为分数的技巧具体细节看代码注释。AC ...原创 2018-10-02 21:42:43 · 327 阅读 · 0 评论 -
数位DP- [hdu 3652] B-number
转载 [hdu 3652] B-number A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string...转载 2018-08-21 11:53:35 · 99 阅读 · 0 评论 -
Heavy Transportation - dijkstra
思路比较简单,每次选取最大的边,然后取路径上边的最小值,具体过程看代码注释。AC code:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define INF 1e6 + 10//之前设置为1e5,而边的最大值是1e6,所以不能保证说先便利的...原创 2018-08-24 10:41:10 · 477 阅读 · 0 评论 -
Codeforces Round #503 (by SIS, Div. 2)C. Elections
AC code:#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;int n, m, x, y;long long res, ans = 1e18;multiset&amp;lt;int&amp;gt; v, p[3005];int main(){ scanf(&quot;%d %d&quot;, &am原创 2018-08-15 19:13:05 · 99 阅读 · 0 评论 -
Win or Freeze - Codeforce 151C
这道题转化为当q有两个或以上的质因数时,1获胜。这比先把q所有的因数求出来, 既省空间,又省时间。注意分类讨论要全面。具体分类看代码注释。AC code:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;string&gt;#include&am原创 2018-08-13 11:08:39 · 194 阅读 · 0 评论 -
Quantity of Strings - codeforce 151
这道题就是找规律,注意当k是奇数时,ans = m*m,而不是ans = m的(k+1)/2次方,不信你可以在草稿本上画一下,比如 7 2 5 ,答案是4不是8。 其他规律看代码,还要注意不能用pow函数,会有精度问题。注意用cin ,cout ,代替scanf,printf. 废话少说,看AC代码,另外附上python代码(python不用考虑精度问题还有溢出)AC code:#inc...原创 2018-08-13 10:14:28 · 184 阅读 · 0 评论 -
String Problem HDU - 3374(字符串的最大最小表示 + kmp求循环节)
思路:求最大最小表示的位置,直接模板,求次数的话,先用KMP求出循环节的大小,再判断一下,最大最小表示出现次数相同,具体看代码注释。AC code:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>...原创 2018-08-15 11:46:39 · 201 阅读 · 0 评论 -
HDU-2609 How many (最小表示法)
题目传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意: 给出n个01串,通过循环可以相同的串算一类,求一共有几类串。 思路: 暴力,把所有串都变成最小表示法,然后排个序扫一遍就行了。AC code:#include<iostream>#include<cstdio>#include<...原创 2018-08-15 14:57:40 · 97 阅读 · 0 评论 -
Hotaru's problem超详细解释(hdu5371+Manacher)
详细解释看代码注释和题解报告 AC code:#include&amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;gt;#include&amp;lt;vector&amp;gt;#include&amp;lt;cstring&amp;gt; #include&amp;lt;algorithm&am原创 2018-08-14 19:23:44 · 339 阅读 · 0 评论 -
Hidden Password -(超详细解释)字符串最小表示法 O(n)算法
网上看了这篇文章后还是感觉有些地方有点小错误,红色字是博主写的求字符串的循环最小表示:&amp;nbsp;上面说的两个字符串同构的,并没有直接先求出Min(s),而是通过指针移动,当某次匹配串长时,那个位置就是Min(s)。而这里的问题就是:不是给定两个串,而是给出一个串,求它的Min...转载 2018-08-14 16:17:54 · 409 阅读 · 0 评论 -
HDU 4513 + Manacher- 吉哥系列故事——完美队形II - acm
本题就是模板提的变式,只要稍微更改一下就行了,具体看代码注释 注意要用scanf,printf代替cin ,cout,否则会超时。AC code:#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;string&amp;amp;gt;#include&amp;amp;lt;vector&amp;amp;gt;#include&a原创 2018-08-14 11:28:36 · 174 阅读 · 0 评论 -
POJ1679--The Unique MST(次小生成树)-超详细的解释
题目传送门:https://vjudge.net/problem/POJ-1679 大致思路 : 首先用Kruskal算法获得最初的最小生成树,得到最小生成树的权值和 ans ,把这一最小生成树用到的边标记,然后枚举原图去掉用过的一条边之后的情况,若能找到最小生成树且该树边权值和与之前的相等,则最小生成树不唯一。你好代码:#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;...原创 2018-08-10 15:14:05 · 167 阅读 · 0 评论 -
Cheapest Palindrome - POJ 3280(简单动态规划)
解题思路:区间DP,注意对于回文串,删除与增加一个字母效果是一样的,所以,只需要存储增删两者的最小值即可,然后区间DP,我之前想太复杂了,用的是非动态规划思维去思考的,所以刚开始感觉好难。 首先,用递归的思维去推状态转移方程,比如i到j区间的最优解是由i+1-j,i-j-1,i+1-j-1这三个子问题转移过来的,详细解释看code这里写代码片#include<iostream>...转载 2018-08-05 21:45:33 · 164 阅读 · 0 评论 -
简单动态规划解题思路
1, 动态规划的解题思路:首先判断问题是否具有最优子结构和无后效性,是否应用动态规划。然后提取问题的状态,比如POJ2385,状态有时间,步数,而由这两个状态所确定的苹果树是唯一确定的,好比映射,多元函数。同时,时间和步数这两个状态也有差别,时间是一个不受人的选择影响的均匀流逝的变量。 强调内容以时间为外重循环,因为一个时间对应唯一位置,而同一位置可以对应不同时间。 Dp[i][j] = m...原创 2018-08-05 21:31:12 · 377 阅读 · 0 评论 -
The Phone Number-Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)-C 找数学规律,构造
题目传送门:超链接在此 具体解析看代码注释。AC code:/*构造方法:以最平均的方法(使得1-n平均分为sqrt(n)个模块,使得模块数和模块大小两者最大值最小),以这种构造方法构造出来的数列的答案取决于模块数(递增子序列的最大长度)和每个模块的大小(递减子序列的最大长度)之和 */#include&amp;lt;bits/stdc++.h&amp;gt;using namespace s...原创 2018-08-13 15:05:29 · 125 阅读 · 0 评论 -
[ACM] hdu 1251 统计难题 (字典树)
题目要求统计出以某个字符串为前缀的单词数量,字典树入门模板题。AC code:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>using namespace std;const int maxn ...原创 2018-08-16 10:54:05 · 142 阅读 · 0 评论 -
HDU 5373 The shortest problem - 数论
思路: 第一种思路就是利用数论知识:若一个数的奇位数字之和与偶位数字之和的差能被11整除,则这个数可以被11整除。 第二种思路就是模拟。 提交时要选G++,选c++会超时,之前WA了那么多次,就是这个原因,想哭 。。。AC code://第一种思路的代码(递归写法)#include<iostream>#include<cstdio>#include<...原创 2018-08-23 21:59:45 · 393 阅读 · 0 评论