05 2017 档案
摘要:法一:暴力$O({n^2})$看脸过 法二:map优化,存储sum数组的下标,复杂度$O(n\log n)$ 法三:二分复杂度$O(n\log n)$,特别注意二分时的判断条件,很容易出错,idx和sum不可以一起判断,只能判断完sum,再独自判断idx,否则答案会出错
阅读全文
摘要:解题关键:注意为什么上界是$\sqrt {2n} $ 因为函数是关于m的递减函数,而结果必须为正整数 $a = \frac{{2n + m - {m^2}}}{{2m}} = \frac{n}{m} + \frac{1}{2} - \frac{m}{2}$ 将$\sqrt {2n} $带入,结果为$
阅读全文
摘要:算法复杂度: 复杂度计算出来后有什么用? 估计程序能否在规定时间内处理题目指定规模的数据 ACM有时间限制1s “规模”的举例 1.给N个数排序 规模:N 2.判断字符串P是否是字符串T的子串 规模:串的长度|P|和|T| 3.判断一个整数是否属于整数集合S 规模:|S| 要判断多少次(查询次数)
阅读全文
摘要:解题关键:数位dp,对每一位进行考虑,通过过程得出每一位上1出现的次数 1位数的情况: 在解法二中已经分析过,大于等于1的时候,有1个,小于1就没有。 2位数的情况: N=13,个位数出现的1的次数为2,分别为1和11,十位数出现1的次数为4,分别为10,11,12,13,所以f(N) = 2+4。
阅读全文
摘要:解题关键:因为数字都为正整数,所以a[i]-i小于0一定需要修改,不须考虑; 从剩余的a[i]-i中找出LIS的数目,这是不需要修改的数目,总个数减去该数目,即为所求
阅读全文
摘要:解题关键: 1、此题用dp的方法可以看出,dp矩阵为杨辉三角,通过总结,可以得出 答案的解为$C_{n + m - 2}^{n - 1}$ 2、此题可用组合数学的思想考虑,总的步数一共有$n+m-2$步,在这所有的步数中,需要选择向下走的步数的位置,由此可得,答案的解为:$C_{n + m - 2}
阅读全文
摘要:解题关键:此题有多种解法 三条直线组成的矩阵delta为0,则共面,否则,不共面 Gauss消元法
阅读全文
摘要:给定两个点: typedef struct { double x, y; } Point; Point A1,A2,B1,B2; 首先引入两个实验: a.快速排斥实验 设以线段A1A2和线段B1B2为对角线的矩形为M,N; 若M,N 不相交,则两个线段显然不相交; 所以:满足第一个条件时:两个线段可
阅读全文
摘要:解题关键:此题不需要模拟,可以用数学方法解决。 无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。 为了讨论方便,先把问题稍微改变一下,并不影响原意: 问
阅读全文
摘要:解题关键:注意下标 解法一:prim算法
阅读全文
摘要:解题关键:注意爆long long $x \equiv {M_1}M_1^{ - 1}{a_1} + ... + {M_k}M_k^{ - 1}{a_k}(\bmod m)$ 其中,$m = \prod\limits_{j = 1}^k {{m_j}}$,$\forall 1 \le j \le k
阅读全文
摘要:法一:next_permutation函数,两个参数分别为起始指针和末尾指针。 法二:dfs 注意全排列一共有$n!$种,所以num数组一定要开的够大。
阅读全文
摘要:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1256 解题关键:设$m \in {N_ + }$,若$(a,m) = 1$,则$a$在模$m$的意义下存在唯一的逆元,若$(a,m) \ne 1$,则$a$没有模$m$的逆
阅读全文
摘要:解题关键: 根据质数的定义,在判断一个数n是否是质数时,我们只要用1至n-1去除n,看看能否整除即可。但我们有更好的办法。先找一个数m,使m的平方大于n,再用<=m的质数去除n(n即为被除数),如果都不能整除,则n必然是质数。如我们要判断1993是不是质数,50*50>1993,那么我们只要用199
阅读全文
摘要:法1:stirling公式近似 $n! \approx \sqrt {2\pi n} {(\frac{n}{e})^n}$ (如果怕n不够大下式不成立,可以当数小于10000时用for求阶层) 也可以用log10函数,不过直接使用log,e没有误差,一定注意longlong; 复杂度$O(1)$ 法
阅读全文
摘要:E 解题关键:二分时注意C函数的单调性。 1 #include<bits/stdc++.h> 2 #define eps 1e-8 3 #define INF 0x3f3f3f3f 4 using namespace std; 5 typedef long long ll; 6 double a[1
阅读全文
摘要:https://nanti.jisuanke.com/t/15428 题目大意:离散表示的字符串,求其最长回文串长度。 解题关键:若只用Manacher算法,在统计sum时会超时,所以加一个树状数组来维护前n项和,即可AC。 注意进行Manacher时,i是从1开始的,不要小也不要大。 n天后更新:
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目大意:求最长回文串的长度。 解题关键:Manacher算法 引用一个较好的解释 可以这么说,这行要是理解了,那么马拉车算法基本上就没啥问题了,那么这一行代码拆开来看就是 如果mx > i, 则 p[i]
阅读全文
摘要:1 #include 2 using namespace std; 3 typedef long long ll; 4 struct trie{ 5 int count; 6 trie *next[26]; 7 }*root; 8 trie *newtrie(){ 9 trie *t=(trie *)malloc(sizeof(struct tr...
阅读全文
摘要:https://nanti.jisuanke.com/t/15429 题目大意:给出平面内$n$个整数坐标点,保证无三点共线。可以进行若干次连线,每次选择一个点对连接线段,但是任意两条线段都不得在给定的$n$个点之外有交点。问连线完成后,最多能构造出多少个三角形。 解题关键: 小于三个点的情况答案为
阅读全文
摘要:http://codeforces.com/contest/799/problem/D 解题关键:因为3^11>100000,所以若只把2单独拿出,最多只需要暴力2^11次,故只需要dfs一下即可。
阅读全文
摘要:http://codeforces.com/contest/799/problem/C 解题关键:树状数组取最大值,注意先搜索,后加入,此种情况可以取出最大值。 为什么可以取到最大值? 1、当分别用两种硬币购买时,一定可以全部访问完。 2、用一种硬币时, 依然可以遍历完
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=23 题目大意:有$N$个任务需要执行,第$i$个任务计算时占$R[i]$个空间,而后会释放一部分,最后储存计算结果需要占据$O[i]$个空间$(O[i] < R[i])$。 例如:执行需要$5
阅读全文
摘要:题目大意:有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? 解题关键:策略: 按照开始时间排序优先安排活动,如果冲突,则加一个教室。 1、利用优先队列 2、求线段相交的次数
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=3 转移方程: 注意如何对齐的。 这个算法的特点是,S和T字符串左边始终是对齐的。为了更好地理解这个算法中的递推公式,我们把两个字符串按照特定方式对齐。 以字符串S=ALGORITHM和T=AL
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=4 复杂度:${\rm O}(nm)$ 转移方程:
阅读全文
摘要:http://www.51nod.com/tutorial/course.html#!courseId=15 解题关键:主要是一种思想 $dp[i] = dp[i - 1]*2$ 如果a[i]不在之前出现 $dp[i] = dp[i - 1]*2 - dp[j - 1]$,如果a[i]最近在j的位置
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=12 解题关键: 如果将子序列按照长度由短到长排列,将他们的最大元素放在一起,形成新序列$B\left\{ {{b_1},{b_2}, \ldots \ldots ,{b_j}} \right\
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=11&isCurrent=1 解题关键:1、注意i和j的最大取值都是n,k是i与j的和。 2、空间卡的很紧,多一位都不行。 转移方程:$dp[{x_1}][{y_1}][{x_2}][{y_2}
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=11 题目大意: 有$N$种物品和一个容量为$W$的背包。第$i$种物品最多有$c[i]$件可用,每件体积是$w[i]$,价值是$v[i]$。求解将哪些物品装 入背包可使这些物品的费用总和不超过
阅读全文
摘要:解题关键: 子序列和最大的两种情况:(1)子序列位于序列中间,不中断 (2)子序列分散在序列两端,此时中间部分的序列和最小,(因为序列总和一定),因此取子序列的最小值t,然后总值-t即为所求; 两种情况取max即可。
阅读全文
摘要:https://www.51nod.com/tutorial/course.html#!courseId=8 解题关键:利用最大子序列和,将矩阵预处理一下,就可以将其转化了。
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1003 解题关键:1、最大连续子序列和模板 2、max、end不能使用,在oj中会显示编译错误 3、注意模板中没有else if
阅读全文
摘要:http://oj.xjtuacm.com/problem/21/ 对13进行分析,每种价格出现的次数: $(C_m^1 + C_m^2 + ... + C_m^m)(C_{n - m}^0 + C_{n - m}^1 + C_{n - m}^2 + ... + C_{n - m}^{n - m})
阅读全文
摘要:解题关键:1、直接套kmp模板即可,注意最后输出的位置,需要在索引的位置+1。 2、next用作数组名在oj中会编译错误, 3、选用g++,只有g++才会接受bits/stdc++.h OJ中g++和c++的区别: 1、输出double类型时,如果采用G++提交,scanf采用%lf,printf采
阅读全文
摘要:【基本解题思路】 将n个相同的元素排成一行,n个元素之间出现了(n-1)个空档,现在我们用(m-1)个“档板”插入(n-1)个空档中,就把n个元素隔成有序的m份,每个组依次按组序号分到对应位置的几个元素(可能是1个、2个、3个、4个、….),这样不同的插入办法就对应着n个相同的元素分到m组的一种分法
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1754 解题关键:刚开始死活超时,最后发现竟然是ch,和t1、t2每次循环都定义的锅,以后养成建全局变量的习惯。 注意背模板时,find时最后无赋值
阅读全文
摘要:模拟退火的基本思想: (1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点),每个T值的迭代次数L (2) 对k=1,……,L做第(3)至第6步: (3) 产生新解$S\prime $ (4) 计算增量$\Delta t\prime = C\left( {S\prime } \rig
阅读全文
摘要:http://acm.xidian.edu.cn/problem.php?id=1158 解题关键:此题注意将$\sum\limits_{i = 0}^x {C_x^iC_y^{i + k}}$转化为$C_{x + y}^{x + k}$ 利用二项式定理, 一方面, ${(1 + a)^y}{(1
阅读全文

浙公网安备 33010602011771号