01 2020 档案

摘要:思路: 知道什么东西在变化,什么东西没有变化。 关于超时(cf上大概能跑1e8): 写之前先算算复杂度,如果$n^2$超时了,那可以考虑一下$nlog(n)$,用二分可以降低复杂度 当可以由一个东西或者两个东西确定另外一个东西的时候,我们最优办法是直接得到我们要的东西,然后看总量中是否存在这样一个东 阅读全文
posted @ 2020-01-31 23:08 caoanda 阅读(99) 评论(0) 推荐(0)
摘要:"D.小李打怪兽" 参考: "小李打怪兽——01背包" 通过化简可以得到最后所求东西为$sum (sum 2x)$(注:$sum=S_1+S_2,x=S_1 S_2$),当$S_1$与$S_2$最接近时,所求值最小。那么就只需要求出用$sum/2$的代价能够换得的最大值即可 代码: 阅读全文
posted @ 2020-01-31 21:33 caoanda 阅读(469) 评论(0) 推荐(0)
摘要:欧拉函数和欧拉定理 参考: "欧拉函数" 欧拉函数: 欧拉函数,即$\varphi(n)$,表示的是小于等于$n$和$n$互质的数的个数。 比如$\varphi(1)=1$。 利用唯一分解定理,我们可以把一个整数唯一地分解为质数幂次的乘积, 设 $n=p_1^{k_1}p_2^{k_2}...p_s 阅读全文
posted @ 2020-01-31 14:11 caoanda 阅读(275) 评论(0) 推荐(0)
摘要:"D Same GCDs" 参考: "欧拉函数" "CF1295D Same GCDs" 题意很明显要求出当$k\in [a,a+m),gcd=gcd(a,m)$时,满足$gcd(k,m)=gcd$的$k$的个数,由欧拉函数可以转换为$gcd(k/gcd,m/gcd)=1,k\in [a,a+m)$ 阅读全文
posted @ 2020-01-31 10:52 caoanda 阅读(238) 评论(0) 推荐(0)
摘要:区间筛法 对$[2,\sqrt{b}]$进行埃氏筛法的同时对区间$[a,b]$进行筛选 阅读全文
posted @ 2020-01-28 18:24 caoanda 阅读(285) 评论(0) 推荐(0)
摘要:埃氏筛法 复杂度:$O(nlog(log(n)))$ 模板: 阅读全文
posted @ 2020-01-28 11:28 caoanda 阅读(141) 评论(0) 推荐(0)
摘要:线性同余方程 参考: "线性同余方程" 同余方程$ax\equiv b(mod c)$ 定理1: 方程$ax+by=c$与方程$ax\equiv c(mod b)$是等价的,有整数解的充要条件为$gcd(a,b)|c$。 根据定理1,我们可以先利用扩展欧几里得算法求出$ax+by=gcd(a,b)$ 阅读全文
posted @ 2020-01-27 12:40 caoanda 阅读(224) 评论(0) 推荐(0)
摘要:"E Obtain a Permutation" 参考: "Codeforces Round 615 (Div. 3) Editorial" 其实这个算法的本质也就是暴力,只不过是更为有效的暴力 每一列之间不互相影响,那么只需要求出每一列的最小值即可 对于每一列:进行贪心,具体的贪心代码: 代码: 阅读全文
posted @ 2020-01-25 20:47 caoanda 阅读(281) 评论(0) 推荐(0)
摘要:"C Hacker, pack your bags!" 谨记 函数是$O(nlog(n))$的复杂度。 我们对每一个旅途进行遍历,分别找到开始符合条件的那一个旅途,这里的复杂度可以用二分来降低,但是我们还需要找到一个满足条件而且权值最大的旅途,如果我们此时进行遍历的话,就是$O(n^2)$的复杂度了 阅读全文
posted @ 2020-01-22 00:14 caoanda 阅读(190) 评论(0) 推荐(0)
摘要:"D. Aroma's Search" 首先根据数据范围可以知道,数据点最多只有50多个,因此这道题可以暴力来解 另外我们还知道,最优解的数据点一定是连续的,因为第$i+1$个点必然在第$i$个点的右上方。 因为其数据范围很小,所以我们只需要遍历所有的情况即可。 代码: 阅读全文
posted @ 2020-01-21 23:47 caoanda 阅读(232) 评论(0) 推荐(0)
摘要:gcd(a,b)和exgcd(a,b,x,y) : 当然也可以使用头文件 __gcd(a,b)` : 证明: 假设有 ①$ax_1+by_1=gcd(a,b)$ ②$a'x_2+b'y_2=gcd(a,b)$ 先假设②是在①的下面,也就是说,在递归顺序中②是先执行完的。 我们由$gcd(a,b)$的 阅读全文
posted @ 2020-01-19 19:43 caoanda 阅读(366) 评论(0) 推荐(0)
摘要:"Conscription" 如果两个人之间有关系,且动用了这一段关系,那么我们就把这两个人连起来,很明显最后得到的肯定是一个无环图,而最后的答案就是 ,要使 ans 最小,那么就要使图中总的权值最大,那么只需要根据已知边求一个最大生成树即可。 代码: 阅读全文
posted @ 2020-01-19 16:02 caoanda 阅读(342) 评论(0) 推荐(0)
摘要:"B Bits" 这是一个很经典的汉诺塔问题,该题主要难点在于输出和递归思想。 主要的递归代码: 表示完成第 x 个圆盘的移动,是从支柱 a 借助支柱 b 的力量移向支柱 c 的 代码: 阅读全文
posted @ 2020-01-19 14:16 caoanda 阅读(335) 评论(0) 推荐(0)
摘要:三点共圆 三点: `(x[2].y[2]) x[3].y[3]` 圆心则为 ,半径可以根据两点之间距离公式进行计算 阅读全文
posted @ 2020-01-19 12:00 caoanda 阅读(821) 评论(0) 推荐(0)
摘要:"Jelly" 在遍历一张地图,求最短路径的时候,最简便的方法就是用 来写 代码: 阅读全文
posted @ 2020-01-19 10:14 caoanda 阅读(313) 评论(0) 推荐(0)
摘要:"Roadblocks" 该题的难点在于求次短路,而次短路的求法与最短路基本一致,更新的方式就是当当前权重比最短路大且比次短路小的时候就更新它,如果它比最短路小,那么就把它和最短路交换一下 关键代码: 代码: 阅读全文
posted @ 2020-01-18 17:53 caoanda 阅读(305) 评论(0) 推荐(0)
摘要:路径还原 例如在求解最短路等等问题时,只需用一个 数组在更新我们要求的数据时,记录一下前驱顶点即可 阅读全文
posted @ 2020-01-18 09:11 caoanda 阅读(318) 评论(0) 推荐(0)
摘要:string的插入和删除 参考: "string插入和删除" 插入(字符串和字符): 删除: 阅读全文
posted @ 2020-01-18 08:44 caoanda 阅读(879) 评论(0) 推荐(0)
摘要:string中find()和substr()的用法 查找从指定位置开始的 当找不到的时候,函数会返回一个 找第一个目标字符串的位置和最后一个的位置(不是全匹配): 在使用 函数的时候一定要注意里面的参数,第一个是起点,第二个是长度! 阅读全文
posted @ 2020-01-17 19:45 caoanda 阅读(642) 评论(0) 推荐(0)
摘要:Bellman Ford BF算法求的是单源最短路问题,即每一个点到起点 的最短距离。 算法的思想在于$d[i]=min(d[i],d[j]+e(j,i))$ 表示点 到`s d[i]`不断进行更新,知道不能更新为止,复杂度为$O(nm)$ 代码: 如果不存在负圈则 的循环是有限的,最多只执行 次, 阅读全文
posted @ 2020-01-17 10:16 caoanda 阅读(139) 评论(0) 推荐(0)
摘要:"C. Elections" 证明自己赢的时候获得的票数与贿赂所需的最小代价的函数是一个凸函数: 从自己赢的票数等于 n 的时候往小推,每一次减去一个最大的代价,但是要保证在该情况下能赢 刚开始是单调递增的,但是随着自己的票数越来越少以及某些人的票数越来越多,我们想要自己赢的票数再少一点,那么就应该 阅读全文
posted @ 2020-01-17 09:40 caoanda 阅读(247) 评论(0) 推荐(0)
摘要:"食物链" 因为不知道要输入的 x ,是属于A,B,C,哪个位置上的,所以把空间开了三倍,每一种状态都保存一下 如果 x 与 y 同类,那么 为`true`。 如果 x 吃 y 那么, 为`true` 这个题卡的点在于, 会卡 ,所以应该用 进行读入 代码: 阅读全文
posted @ 2020-01-15 16:46 caoanda 阅读(352) 评论(0) 推荐(0)
摘要:next_permutation(begin,end) 当排列还存在下一种(以字典序排列)排法时,返回 ,否则返回 返回 的同时,把数组变成字典序中的下一种排法。 测试代码: 输出: 阅读全文
posted @ 2020-01-15 15:44 caoanda 阅读(207) 评论(0) 推荐(0)
摘要:并查集(防退化) 防退化的关键操作在于,记录每一个点的高度,合并的时候,将高度较小的点并到高度较大的点上去。 同时还有一个优化技巧就是路径压缩,它会改变树的高度,但是为了方便起见,也不修改 high 的值 合并操作: 阅读全文
posted @ 2020-01-15 14:54 caoanda 阅读(155) 评论(0) 推荐(0)
摘要:"D Minimax Problem" 首先先排除最暴力的$O(n^2)$做法。 当没有思路的时候,看看能不能够对答案进行二分,但是这个题是输出一对数组的下标,所以我们可以对最小值的最大值进行二分,看这个最大值存不存在。 对于每一行对 mid 的关系,我们可以对其进行状态压缩,大于等于的那一位就为1 阅读全文
posted @ 2020-01-15 13:11 caoanda 阅读(368) 评论(0) 推荐(0)
摘要:"C. Two Arrays" $dp[i][j]$表示有$j$个数每个数的范围为$1~i$时的非递减排列种数,因为 n 和 m 的数据范围也不大,用记忆化搜索很快可以得出每一个值。 再来看满足条件时的$(a,b)$,$a$为非递减序列,$b$为非递增序列,所以$b$的最后一个数大于等于$a$的最后 阅读全文
posted @ 2020-01-15 12:20 caoanda 阅读(432) 评论(0) 推荐(0)
摘要:取整 共包括三个函数,都在``头文件下 向下取整 向上取整 四舍五入 这些函数很显然只对小数有用,而当要运算两个整型数之间的除法时,要乘一个 1.0,以此来进行浮点数运算。 阅读全文
posted @ 2020-01-15 11:51 caoanda 阅读(544) 评论(0) 推荐(0)
摘要:背包问题 当范围很小的背包问题是很容易解决的,而当范围很大$(例如:1\le n\le 100,1\le w_i\le10^7,1\le v_i\le 100,1\le W\le 10^9)$时,就应该换一种 dp 的表示方式,这样才能够降低其复杂度。 $dp[i+1][j]$表示前 i 个物品中挑 阅读全文
posted @ 2020-01-14 19:38 caoanda 阅读(153) 评论(0) 推荐(0)
摘要:完全背包问题 $\begin{cases}dp[0][j]=0\\dp[i+1][j]=max(dp[i][j k w[i]]+k v[i]) \end{cases}$ 代码: cpp for(int i=0;i 同时出于节省内存的考虑,可以将其用一维数组表示 cpp for(int i=0;i=w 阅读全文
posted @ 2020-01-14 19:14 caoanda 阅读(154) 评论(0) 推荐(0)
摘要:最长公共子序列 注:子序列是可以不连续的。 递推公式: $dp[i+1][j+1]=\begin{cases}dp[i][j]+1&(s_{i+1}=t_{j+1})\\max(dp[i][j+1],dp[i+1][j])&(其 他)\end{cases}$ 代码: 阅读全文
posted @ 2020-01-14 18:19 caoanda 阅读(92) 评论(0) 推荐(0)
摘要:"C. Petya and Exam" 重要的事情说三遍!认真读题!认真读题!认真读题! 思维要开阔一点,不要被局限住了。 因为 t 很大,所以我们不能遍历 t,但是 n 只有1e5,所以我们可以遍历每道题的截止时间。然后在其多余的时间内尽可能多的做后面还没有做过的简单题,做完了再做难题。 对于这组 阅读全文
posted @ 2020-01-14 16:12 caoanda 阅读(192) 评论(0) 推荐(0)
摘要:"B. K for the Price of One (Hard Version)" 赛时失手推错了规律... 这个题不是单调递增的 但是它有一个规律:当买同样多的东西时,优先买便宜的 所以我们可以求出买 i 个东西时最便宜的价格 因为考虑到 n 只有2e5的范围,所以把每一个$dp[i]$都遍历一 阅读全文
posted @ 2020-01-14 12:26 caoanda 阅读(148) 评论(0) 推荐(0)
摘要:"C. Mafia" 参考: "Editorial for Codeforces Round 202" 假设最终答案为$x$,则$(x a[i])$表示的是第$i$个人可以充当监护者的局数,而$\sum^n_{i=1}{(x a_i)}$表示得则是在进行$x$局游戏保证每一个人完过瘾的情况下,可以用 阅读全文
posted @ 2020-01-13 16:58 caoanda 阅读(291) 评论(0) 推荐(0)
摘要:三分 亲测wa了无数遍得到的板子.... 模板: 阅读全文
posted @ 2020-01-13 14:11 caoanda 阅读(160) 评论(0) 推荐(0)
摘要:"C. Molly's Chemicals" 这道题的思路跟 "C. Summarize to the Power of Two" 十分的相似。都是要求关于某个数的倍数。 优化方式都是用一个 map 来储存存在的数字,然后用某个数的幂次方减去当前遍历数字,看 map 是否存在有这个值。因为转化为幂次 阅读全文
posted @ 2020-01-12 19:52 caoanda 阅读(198) 评论(0) 推荐(0)
摘要:"C. DNA Alignment" 来推导一下这个题: 假设在给定的 s 串中,A,T,C,G分别有 a,b,c,d 个,而要匹配的串中有 A,B,C,D 个,所以其 ρ 值为$Aa+Bb+Cc+Dd$,而 $A+B+C+D=a+b+c+d=n$,我们可以自己掌控 A B C D 的多少, 试想一 阅读全文
posted @ 2020-01-12 18:52 caoanda 阅读(274) 评论(0) 推荐(0)
摘要:"C. Vasya and Robot" 关键算法:二分、前缀和 刚看到题的时候一点想法都没有... 先观察一下数据范围$(1≤n≤2⋅10^5)(−10^9≤x,y≤10^9) $ 可以用两个数组$x[i],y[i]$来表示在$i$操作完之后的机器人的位置 然后可以发现题目要求的是最大位置和最小位 阅读全文
posted @ 2020-01-12 16:18 caoanda 阅读(198) 评论(0) 推荐(0)
摘要:"Monitor" 该题的目标对象是一个二维数组 ①该题没有给出二维数组的具体范围,而只是给出了$n m 不能够直接定义数组,那么就可以进行动态开辟数组 相当于 ②该题对二维数组会进行多次矩形操作,直接暴力操作会导致超时,因而我们可以使用差分来优化 ③之后会有多次询问,因而也不能够直接求解矩形内非零 阅读全文
posted @ 2020-01-12 15:08 caoanda 阅读(310) 评论(0) 推荐(0)
摘要:前缀和 一维: 构建前缀数组: 应用场景: ①求 $a[1]~a[i]$的累加和 ②求$a "i]~a[j" $的累加和 二维: 构建前缀数组: 应用场景: 求$(x_1 阅读全文
posted @ 2020-01-12 14:43 caoanda 阅读(207) 评论(0) 推荐(0)
摘要:差分 一维: 原数组:$c[i]$ 差分数组$a[i]$:表示$i{\sim}n$的数,每一个数$c[j](i ①把从第$k~n$位的数都加上一个$w$ ②把从第$i$位到第$j$位的数都加上一个$w$ 前提是需要对数组,进行多次①②这样的操作,使用差分才有意义,不然直接暴力就可以了 要注意的是①② 阅读全文
posted @ 2020-01-12 14:11 caoanda 阅读(248) 评论(0) 推荐(0)
摘要:"E1. Median on Segments (Permutations Edition)" 参考: "CF1005E1 Median on Segments (Permutations Edition) 思维" 中位数为m的条件为,在那一段中,小于 m 的数的个数为 x 个,大于 m 的数有 y 阅读全文
posted @ 2020-01-11 16:53 caoanda 阅读(180) 评论(0) 推荐(0)
摘要:"D. Polycarp and Div 3" 参考: "1005D Polycarp and Div 3" 做这道题要明白一些东西: 能够被3整除的数,其数位之和为3的倍数 如果把数分成一位一位,相邻三个不为0位置一定能够组成一个被3整除的数(111,112,121,122,211,212,221 阅读全文
posted @ 2020-01-11 15:08 caoanda 阅读(177) 评论(0) 推荐(0)
摘要:"D Dr. Evil Underscores" 参考: "Codeforces Round 613 (Div. 2) Editorial" 其实比赛的时候就已经想到了基本上一样的解法,可是最后还是没有写出来... 具体思路就是分治,在二进制中,如果$a_1{\sim}a_n$,在该位上既有1又有0 阅读全文
posted @ 2020-01-11 11:59 caoanda 阅读(706) 评论(0) 推荐(0)
摘要:"C Garland" 参考: "Codeforces Round 612 (Div. 2) A~E2 题解" 试了试暴力的方法,感觉不大行,所以转战dp 总共有四个状态$dp[x][i][j][bj]$,表示还有 i 个奇数,j 个偶数可以使用,x~n 位置的复杂度之和的最小值,且位置 x 1 的 阅读全文
posted @ 2020-01-08 21:37 caoanda 阅读(264) 评论(0) 推荐(0)
摘要:"B Hyperset" "Codeforces Round 612 (Div. 2) A~E2 题解" 如果直接枚举的话,复杂度是$O(n^3)$,显而易见会超时,但是我们会发现一个道理,当其中两个确定的时候,另外一个也就已经确定下来了,而我们要做的工作只是去寻找有没有这样一个东西,与其遍历每一个 阅读全文
posted @ 2020-01-07 23:58 caoanda 阅读(427) 评论(0) 推荐(0)
摘要:"D Portals" 参考: "CF1271D Portals dp 贪心" 主要要明白两点: 如果a和b都能够派兵前去把守c,且a b,那么从a派兵去把守c是更优解 派兵要派往分数最大的地方,要把有限的派兵机会用在最值的地方 要实现这两步,要学会反悔贪心法,即如果当前兵力不足以攻打下一个城池,那 阅读全文
posted @ 2020-01-07 14:54 caoanda 阅读(261) 评论(0) 推荐(0)
摘要:"C. New Year and Permutation" 参考: "Codeforces Round Hello 2020 A~E 题解" 发现了一个网站 "OEIS" ,如果打表找规律的话会很方便,虽然这道题没有用上.... 具体思路可看参考视频。 一般数学题都是打表找规律,如果找不出规律,例如 阅读全文
posted @ 2020-01-06 23:17 caoanda 阅读(217) 评论(0) 推荐(0)
摘要:"E Common Number" 参考: "Codeforces Round 608 (Div. 2) E Common Number (二分 思维 树结构)" 具体做法可详见参考博客。 关键在于在分了奇偶之后,就是有序的了 在数据范围很大的时候,要尝试降低其复杂度,对答案进行二分就是一种降低复杂 阅读全文
posted @ 2020-01-04 19:35 caoanda 阅读(195) 评论(0) 推荐(0)