
时间优化
leoxry
天道酬勤,拼搏一个最好的自己送给未来的自己,每天开开心心敲代码就是一种幸福,不计得失,回归刚开始学习时内心的单纯
展开
-
I - Keylogger Gym - 101078I——模拟队列+栈
Think: 1知识点:模拟队列+栈 2题意分析:字母输入移动,分别用队列记录输入光标之前内容,用栈记录光标之后可能存在的内容vjudge题目链接以下为Accepted代码#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace std;int op, tp;char li原创 2017-08-01 21:06:02 · 453 阅读 · 0 评论 -
【数位DP】C~K的幸运数字
Think: 1知识点:数位DP+记忆化搜索 2思考: (1):dp数组记录状态应记录[数位][是否已经含有47][前一位数值] (2):dp数组初始化位置应在总的查询前(所有的dfs搜索之前),进而通过记忆化搜索记录状态,优化时间复杂度 (3):记忆化搜索记录之前已经搜索得到的状态 (4):dfs初始传入的状态C~K的幸运数字——SDUT题目链接 Time Limit: 1000MS原创 2017-09-20 21:53:44 · 695 阅读 · 0 评论 -
【dp+桶】Sorting Railway Cars CodeForces - 606C
Think: 1知识点:dp+桶 2反思: (1):认真读题,理解题意,补题过程中发现题目的一些关键点之前自己做的时候都没有发现,比如按照递增顺序和1<=Pi<=n这两个关键条件 (2):不要固话思维,要经常反思和思考如何将知识点巧妙地结合在一起,将一些好的思想互相融合,进而尝试去创造新的算法 3方法: 最终状态为递增顺序,题目提示数据1<=Pi<=n,因此最终状态为按照1递增的等差数列原创 2017-09-21 10:41:02 · 408 阅读 · 0 评论 -
【单调栈】数据结构实验之栈与队列六:下一较大值(二)
Think: 1知识点:单调栈 2题意:输入一个序列(1<=n<=100000),输出序列中当前数以及序列中大于这个数的第一个数, 3解题思路:数据量较大,暴力会超时,可通过维护一个单调栈 第一步:若栈为空或者栈顶大于等于当前元素,当前元素进栈 第二步:若栈不为空且栈顶小于当前元素,栈顶出栈 第三步:重复第一步和第二步,直至所有元素处理完成 4反思: (1):数组开小了导致超时错误-原创 2017-10-04 12:04:54 · 816 阅读 · 0 评论 -
【暴力预处理+剪枝/bitset】Golf Bot UVALive - 6886
Think: 1知识点:暴力预处理+剪枝/bitset 2题意:输入n个数,查询m次,每次查询输入一个元素,判断这个元素是否可以由最初输入的n个数通过两个数相加或单独一个数得到,两个数相加时可选择同一元素进行相加vjudge题目链接以下为Accepted代码——暴力预处理+剪枝-9363ms#include <cstdio>#include <cstring>#include <algori原创 2017-08-11 20:42:39 · 422 阅读 · 0 评论 -
【map/桶记录/基础dp】Ignatius and the Princess IV HDU - 1029
Think: 1知识点:map/桶记录/基础dp 2题意:输入n个数,输出出现次数大于等于(n+1)/2的那个数vjudge题目链接以下为Accepted代码——map-421ms#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;int main(){ i原创 2017-08-07 10:08:56 · 385 阅读 · 0 评论 -
【矩阵快速幂】Experienced Endeavour
Think: 1知识点:矩阵快速幂 2题意:初始时输入一个序列a(0), a(1), … a(n-1),之后不断构造一个新序列,新序列构造规则为每次选取上次序列的固定位置元素累加 3题意分析: (1):构造系数矩阵,矩阵快速幂.因为每次对于新序列结点ci,其值与上次序列的固定位置有关系,因此可思考是否可以构造一个0,1系数矩阵,之后每次重复构造新序列时,每构造一次,就乘以0,1系数矩阵一次.原创 2017-10-12 11:19:46 · 516 阅读 · 0 评论 -
【kmp算法】Substrings HDU - 1238
Think: 1知识点:kmp算法 2题意:T组测试数据,每组测试数据输入n个字符串,询问最长长度的子串x,要求子串x或者子串x的翻转串在每个字符串中都会出现 3思路:找到最小的字符串,然后暴力枚举子串查询,剪枝优化 4反思: (1):字符串长度为1的字符串不要忘记vjudge题目链接以下为Wrong Answer代码——未枚举字符串长度为1的字符串#include <cstdio>#i原创 2017-10-11 15:29:00 · 417 阅读 · 0 评论 -
【算数基本定理(唯一分解定理)】Aladdin and the Flying Carpet LightOJ - 1341
Think: 1知识点:算数基本定理(唯一分解定理) 算术基本定理的几个应用: 注:p1, p2, pi都是素数 同时全体正因数的和也可以写作: ——“算数基本定理”参考博客地址2题意:输入a, b(1 ≤ b ≤ a ≤ 1e12),a代表一个矩形的面积,b表示矩形中最小的那条边至少长度为b,询问有多少个符合条件的矩形 注:题意要去本题目中的矩形不是正方形 3解题思路:原创 2017-10-11 12:04:23 · 655 阅读 · 0 评论 -
【kmp】Corporate Identity HDU - 2328
Think: 1知识点:kmp算法+暴力枚举 2题意:输入一组字符串,寻找最长公共子串,长度相同时选择字典序最小的 3解题思路: (1):找到字符串组中长度最短的字符串,然后根据左右区间枚举查询 (2):找到字符串组中长度最短的字符串,然后根据长度从大至小枚举,若在当前长度梯度已经找到串,则结束枚举(因为从大至小枚举的长度梯度级,因此下面枚举的长度梯度级要小于当前已经枚举完成的长度梯度级)原创 2017-10-11 19:30:00 · 384 阅读 · 0 评论 -
【矩阵幂的和+矩阵快速幂】Power of Matrix UVA - 11149
Think: 1知识点:矩阵幂的和+矩阵快速幂 2题意:输入矩阵A,求A^1 + A^2 + … + A^(n) 3题意分析: (1):倍增法求矩阵幂的和,eg: 求:A^1 + A^2 + A^3 + A^4 + A^5 + A^6 + A^7 + A^8 + A^9 + A^10 (1):A^1 + A^2 + A^3 + A^4 + A^5 + A^6 + A^7 + A^8 +原创 2017-10-12 17:31:19 · 1213 阅读 · 0 评论 -
【尺取法/二分+优化】Audition SPOJ - CRAN04
Think: 1知识点:尺取法/二分+优化(k == 0时判断小区间长度进而通过公式计算)2题意: (1):判断在一个长度为n(n <= 1e6)的01序列中判断有多少个区间内的1的数量为k 3思路: (1):尺取法+(k == 0时特殊判定) (2):二分+(k == 0时特殊判定) 4反思: (1):尺取法需要加强理解 (2):未考虑到临界数据(eg:k == 0)时的时间复杂度原创 2017-12-04 17:44:04 · 426 阅读 · 0 评论 -
【dp/二分+暴力】MAGRID UVALive - 5983
Think: 1知识点:dp/二分+暴力 2题意:从(1, 1)点到达(n, m)点,每经过一个点可能会失去能量或者得到能量,询问最小的出发能量使得存在一条路径,路径经过每一点时能量值大于0,已知出发点(1, 1)和终点(n, m)点可获得或者会失去能量为零 3思路: 1>dp: 状态转移方程: (1)i == n && j == m:dp[i][j] = 1; else (2)i =原创 2017-09-07 17:16:03 · 343 阅读 · 0 评论 -
Multiplying Digits Gym - 101490H
Think: 1知识点:map + 思维 + 剪枝 2题意:y为x在b进制下的各位数的乘积,输入b y,求满足的最小x 3方法: (1):先得到y小于b的因子,然后在因子乘积等于y的约束下组合因子,得到最小的x以下为Accepted代码#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL Inf =原创 2017-09-14 16:54:23 · 629 阅读 · 0 评论 -
【位运算知识+前缀思路+后缀思路】CS Course HDU - 6186
Think: 1知识点:位运算 2题意:输入一个序列,询问当暂时取出一个数之后,输出剩下的所有数的从左区间至右区间的与/或/异或的值 3思路: 1>记录序列内所有数的在每一位上的累加值,进而通过与运算(同为1才为1)/或运算(存在1即为1)/异或运算(“撤销功能”:异或一个数2遍等于不异或这个数)的性质进行求解 2>记录前缀+记录后缀 4思考: 1>注意如何将一个十进制数转化为其对应的原创 2017-09-04 18:13:55 · 527 阅读 · 0 评论 -
【离散化】【转载】
如果说今年这时候OIBH问得最多的问题是二分图,那么去年这时候问得最多的算是离散化了。对于“什么是离散化”,搜索帖子你会发现有各种说法,比如“排序后处理”、“对坐标的近似处理”等等。哪个是对的呢?哪个都对。关键在于,这需要一些例子和不少的讲解才能完全解释清楚。 离散化是程序设计中一个非常常用的技巧,它可以有效的降低时间复杂度。其基本思想就是在众多可能的情况中“只考虑我需要用的值”。下面我将用转载 2017-08-16 10:09:31 · 689 阅读 · 0 评论 -
I - 最少拦截系统 HDU - 1257——dp/数组模拟+二分
I - 最少拦截系统 HDU - 1257——dp/数组模拟+二分 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 怎么办呢?多搞几套系统呗!你说说倒蛮容易,原创 2017-08-09 11:28:02 · 394 阅读 · 0 评论 -
P - FatMouse and Cheese HDU - 1078——dfs+记忆化搜索
Think: 1知识点:dfs+记忆化搜索 2题意:输入一个邻接矩阵,求一条递增路径,满足沿四个方向直线移动最多k步的条件,使得路径经过的点权之和最大vjudge题目链接以下为Accepted代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0x3f3f3f原创 2017-08-09 17:33:50 · 428 阅读 · 0 评论 -
【矩阵快速幂+二分】Matrix Power Series POJ - 3233
Think: 1知识点:矩阵快速幂+二分求解等比矩阵前n项和 2题意:输入一个矩阵,求解矩阵前n项和(S = A^1 + A^2 + A^3 + … + A^k.),模modvjudge题目链接以下为Accepted代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N原创 2017-08-16 20:48:04 · 419 阅读 · 0 评论 -
E - Just a Hook HDU - 1698——线段树区间更新+lazy标记
Think: 1知识点:线段树区间更新+lazy标记 2题意:在n个初始化点权为1的点的基础上进行区间更新,询问最终状态n个点的点权之和 3反思:当前题目lazy标记赋值更新vjudge题目链接以下为Wrong Answer代码——lazy标记更新错误#include <cstdio>#include <cstring>#include <algorithm>using namespace原创 2017-08-10 11:02:14 · 398 阅读 · 0 评论 -
C - A Simple Problem with Integers ——线段树_区间更新
Think: 1知识点:线段树-区间更新-区间查询-lazy标记 2题意分析:区间更新+区间查询 3反思: 1>单点更新会超时 2>lazy标记区间更新ACvjudge题目链接以下为Time Limit Exceeded代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef原创 2017-08-03 10:51:32 · 297 阅读 · 0 评论 -
I - The old Padawan Gym - 100285I——二分查找
Think: 1知识点:二分查找+前缀和 2题意:n个石子,m次发呆,每次发呆若手中石子足够掉落石子大于k,询问将所有石子拾到手中所需要的时间 3反思:多理解,多反思,多思考vjudge题目链接以下为Accepted代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef lon原创 2017-08-10 20:58:00 · 392 阅读 · 0 评论 -
J - Intelligent IME HDU - 4287——桶思想
Think: 1知识点:桶思想,字符串处理 2反思:多思考,寻找题目特点,进而选择解题方法vjudge题目链接以下为Accepted代码——78ms#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int bk[5014], vis[1000000];int red[44] = {2,2,2,原创 2017-07-26 20:29:22 · 373 阅读 · 0 评论 -
【贪心+二分查找】Office Keys CodeForces - 830A
Think: 1知识点:贪心+二分查找 2题意:n个人初始出发位置,m把钥匙放置位置,办公室位置p,询问在所有人取到钥匙之后到达办公室的最短时间 3反思: 1>初始忘记排序 2>最初选择的贪心策略无法得到全局最优解 4解题方法: 二分枚举逼近可能的最短时间,然后试探当前选择的时间是否可以满足所有人取到钥匙后到达办公室vjudge题目链接可参考博客以下为Accepted代码#includ原创 2017-08-22 10:55:39 · 524 阅读 · 0 评论 -
【线段问题创新思路】Hacker, pack your bags! CodeForces - 822C
Think: 1知识点:线段问题 2题意:n条线段,从其中选择2条线段长度(线段长度计算公式为r-l+1)之和为x的边权为最小的,若没有2条线段长度之和为x的,输出-1 3思路: 2 ≤ n, x ≤ 2e5,双重for循环暴力会超时,因此思考如何优化,借鉴前辈的思路,把所有的边正反记录两次,用sum[t]数组记录之前的可以作为前置匹配区间的区间长度为t的区间的最小权值 4提示(注意typ原创 2017-08-21 21:40:43 · 492 阅读 · 0 评论 -
【单调队列】1012: [JSOI2008]最大数maxnumber
Think: 1知识点:单调队列单调栈 2题意:两种操作, 操作1:查询当前数列中末尾x个数中的最大值; 操作2:输入数x,将x加上前一次查询结果t(初始t默认为0)取模mod后插入到数列末尾 3方法分析: 1>维护一个不严格的单调递减队列,每次插入数x之后进行更新维护(重点),查询时直接输出link[tp-x](后x个数中的最大值),并记录输出值(查询值)1012: [JSOI2008原创 2017-08-25 11:33:16 · 426 阅读 · 0 评论 -
【二分优化】Preparing for Merge Sort CodeForces - 847B
Think: 1知识点:二分优化 2题意:输入一个长度最长可达到2e5的序列,序列中的每一个数各不相同,要求按照步骤分组,分组步骤为: (1):从左到右在序列中选取第一个未使用的数 (2):从(1)步找到的数开始向右继续寻找,每次选取一个未使用的且大于前一个被选取的数的数 (3):若无法进行第(1)步即序列中元素已全部分组,结束分组; 若无法进行第(2)步,进行下一次分组; 3解题思路原创 2017-11-27 09:31:10 · 467 阅读 · 0 评论