算法题
AndyFlyingZZZ
讨厌全局变量
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Vijos 1067Warcraft III 守望者的烦恼(动态规划+矩阵快速幂)
背景守望者warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看完所有的监狱,只是从入口进入,然后再从出口出来就算完成任务了。描述头脑并不发达的warden最近在思考一个问题,她的闪烁技能是可以升级的,k级的闪烁技能最多可以向前移动k个监狱,一共有n个监狱要视察...原创 2019-10-30 23:48:18 · 750 阅读 · 0 评论 -
Bubble Cup 11 - Finals [Online Mirror, Div. 2], problem (H) Palindrome Pairs 字符处理优化
此题是字符处理,两两枚举判断时间复杂度为O(n2),不能满足要求,可以利用小写字母只有26个可以优化时间复杂度。如果字符串字母都为偶数或者只有一个字母为奇数,则两两符合条件。统计每个字符串奇数字母并记录再根据上述条件求解即可,时间复杂度为O(n)。ac代码:#include <bits/stdc++.h> #define FOR(I,A,B) for(int I = (A); I...原创 2018-10-31 20:24:43 · 329 阅读 · 0 评论 -
Codeforces Round #510 (Div. 2), problem (D) Petya and Array 分治
本题如果采用两层for循环遍历每个l和r,时间复杂度为O(n2),将会超时。所以可以采用分治的算法,将数组二分递归,完成一个分支之后将此次l和r之间的数进行排序,目的是能以O(n)的时间复杂度统计出此分支符合要求的个数。ac代码:#include <bits/stdc++.h>#define FOR(I,A,B) for(int I = (A); I < (B); I++)...原创 2018-10-31 20:38:05 · 206 阅读 · 0 评论 -
Codeforces Round #511 (Div. 2), problem: (C) Enlarge GCD 数论
思路大体是先找到an取值范围内的质数并保存,求出输入的数据中最大公倍数并将a数组都除以最大公倍数,然后遍历an的取值范围(从2开始,1不算),如果是质数就统计这个质数和它的倍数,就是使最小公倍数增加所需要去掉的数的个数,遍历过程中取最小值即可。并注意判定特殊情况。这个方法几乎要超时了似乎有更好的办法,但是我没想到。ac代码:#include <bits/stdc++.h>#def...原创 2018-10-31 20:40:05 · 251 阅读 · 0 评论 -
Codeforces Round #517 (Div. 2), problem (D) Minimum path 贪心
本题运用贪心算法,需要按照字典序输出路径,路径包含2n-1个字符,只需要按正序求出当前情况下的最优解即可。需要注意的是当最优解相同的时候需要保留剩余更改次数更大的那个路径。在求解本题的过程中由于构思的偏差出现了Runtime error、Memory limit exceeded等错误。在这里记录一下错误原因。Runtime error的错误原因主要有数组访问越界(我就是)、发生除零错误、大数...原创 2018-11-03 17:55:31 · 299 阅读 · 0 评论 -
Educational Codeforces Round 51 (Rated for Div. 2), problem: (D) Bicolorings(DP)
每加一列的组合个数可以递推得到,显然具有最优子结构,可用DP的方法。每加一列有四种可能的情况,所以状态转移方程为:dp[i][j][0]=(dp[i-1][j][0]+dp[i-1][j][1]+dp[i-1][j][2]+dp[i-1][j-1][3])%998244353dp[i][j][1]=(dp[i-1][j-1][0]+dp[i-1][j][1]+dp[i-1][j-2][2]+d...原创 2018-11-05 10:50:21 · 205 阅读 · 0 评论 -
Intel Code Challenge Elimination Round (Div. 1 + Div. 2, combined), problem: (C) Destroying Array并查集
我本题的思路是反过来考虑,即应该从全部销毁的状态,一个一个的恢复这些数字。这样可以用并查集的思想解决问题,不至于导致Time Limit Exceeded。ac代码:#include &lt;bits/stdc++.h&gt;#define FOR(I,A,B) for(int I = (A); I &lt; (B); I++)#define FORE(I,A,B) for(int I =...原创 2018-11-17 14:40:18 · 277 阅读 · 0 评论 -
Codeforces Round #539 (Div. 2), problem (C) Sasha and a Bit of Relax
本题异或“⊕”应想到如果连续数组段前一半和后一半异或结果相等,则整个段异或应为零,所以从数组初始位置开始累积异或,碰到和前边相同的数字就说明中间段异或为零,如果开始和结束的地方同为奇数或偶数,则符合题目(l+r-1)/2为偶数的要求。Ac代码:#include <bits/stdc++.h>#define FOR(I,A,B) for(int I = (A); I < (B...原创 2019-02-22 14:56:56 · 212 阅读 · 0 评论 -
Educational Codeforces Round 60 (Rated for Div. 2), problem: (C) Magic Ship 二分法
本题分析可知每天风向加自主航行可保证船不远离目标。可以知道最大天数应为m*(x1+y1),如果这些天不能抵达目的地则为永远不能到达,可以将本题转化为二分法查找类问题,用二分法查找找到可以到达目的地坐标的最小的天数即可,算法复杂度为O(log(mx))。ac代码:#include <bits/stdc++.h>#define FOR(I,A,B) for(int I = (A); ...原创 2019-03-03 17:28:03 · 272 阅读 · 0 评论
分享