
常用技巧
常用技巧
Authur_gyc
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
宏定义 for 循环
通过宏定义 for 循环,简化代码#define _for(i,a,b) for( int i=(a); i<(b); ++i)#define _rep(i,a,b) for( int i=(a); i<=(b); ++i)举例int num[10];_rep(i,1,5) cin >> num[i] >> endl;_rep(i,1,5)...原创 2020-04-28 21:43:23 · 3096 阅读 · 0 评论 -
求 线性递推式 的系数
有时候我们遇到找规律的题目,往往题目给出的数据范围会特别大,这时候我们往往能够用暴力算出前面的几个答案,但是对于后面的数据用暴力求解就无能为力了。这样我们手头就有几个正确的数据。假设这几个数据为F[1]、F[2]、F[3]、……、F[n - 1]那么,我们可以假设这道找规律题目的递推公式为F[n]=a∗F[n−1]+b∗F[n−2]+c∗F[n−3]+dF[n] = a * F[n - 1...原创 2019-10-06 17:55:49 · 214 阅读 · 0 评论 -
常用技巧 输入输出优化 + 输入输出外挂
输入输出外挂能够减少程序输入输出的时间。常用的printf,scanf都要比cin,cout快,但是,有时候用printf、scanf也会TLE,这时候我们就要用到外挂的输入输出方式了。外挂输入输出对于大数据量能够明显减少时间,其实它的快主要是因为 scanf和printf都是对缓冲区的读写操作,当程序执行的时候不会直接把要输出的内容输出到键盘上,或者说是从键盘读入的数据不会直接读到程序里,而...原创 2019-09-02 21:11:58 · 294 阅读 · 0 评论 -
OI / ACM对拍方法
有时候程序WA了,但是找不到错误的数据,可以用对拍找错误数据。用对拍一般有两种情况一种是比赛后拿到标答或者平时刷题能找到题解。还有一种情况,就是比赛的时候额外打一份暴力解法,把暴力解法当成标答进行对拍。当然数据量比较大的时候,暴力解法会跑的比较慢,对拍起来效率也比较低。对拍的具体做法这里用a + b程序举例首先在一个文件夹里面包含以下四个文件我们要测试的代码 test.cpp#i...原创 2019-08-25 14:38:33 · 401 阅读 · 0 评论 -
专题五 算法优化:求n^k的前三位和后三位 LightOJ - 12822
LightOJ - 1282http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1282题目You are given two integers: n and k, your task is to find the most significant three digits, and least signi...原创 2019-04-06 13:21:36 · 282 阅读 · 0 评论 -
2018第九届蓝桥杯 第五题 快速排序 O(n)实现取出数组第K大的数
师傅说:这个的实现和nth_element函数一样用快排的思想去选取第k大它排序后,在a[k]前面都是比它小的,后面都是比它大的题目标题:快速排序。以下代码可以从数组a[]中找出第k小的元素。它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。请仔细阅读分析源码,填写划线部分缺失的内容。#include <stdio.h>int quick_select...原创 2019-03-21 00:13:24 · 313 阅读 · 0 评论 -
差分数组
概念对于一个序列 a { } ,我们定义这样一个序列b { } ,其中b[i] = a[i] - a[i - 1]则称这个序列 b 为 a 的差分数组。性质1a[i] = prefix_b[i] 这里的prefix_b 为 b 的前缀和。举例A序列为 a, b, c, dB序列为A序列的差分数组 a, b - a, c - b, d - c则有a = aa + b = ...原创 2019-08-07 20:55:22 · 138 阅读 · 0 评论 -
算法 折半枚举
折半枚举传统的双向搜索https://zh.wikipedia.org/wiki/%E5%8F%8C%E5%90%91%E6%90%9C%E7%B4%A2折半枚举与传统的双向搜索不同,不过思想来源于传统的双向搜索。情况当数据量特别大的时候,无法枚举所有的组合,只够枚举一半的组合,这种情况下我们就可以用折半枚举解决问题。做法将原序列分成两半,分别枚举两个部分的组合,然后根据题目给出的条...原创 2019-08-15 23:28:50 · 584 阅读 · 0 评论 -
滚动数组的思想
没有专门学过滚动数组,在这里补充一下。(其实已经遇到过很多用到滚动数组的例子了)例子一比如做dp的题目时,经常会开二维数组,大小是n*m。有时候能够改成开一维的数组,大小是1*m,这样能够节省空间,避免卡内存。不过时间上往往没有差别甚至可能会更慢一些。例子二斐波那契数列如果我们要求斐波那契数列的第100项(暂时不考虑爆int 、long long),我们可以这样做 f[1] = 1...原创 2019-08-22 11:53:04 · 1287 阅读 · 4 评论 -
常用技巧 倍增
实际应用原来曾经学过的ST表就运用到了倍增算法,如果我当初先学习了倍增算法再学ST表,应该会更理解一些。Tarjan算法是解决离线LCA的高效算法,不过如果LCA要求强制在线,我们也可以用倍增算法去解决。个人理解个人认为倍增算是一种技巧/思想,没有什么具体的模板(就像贪心一样),代码具体如何还是要根据现实情况决定。举例这里用一个例子大概描述一下倍增算法的思路假设现在我们有100个格子...原创 2019-08-23 23:17:39 · 187 阅读 · 0 评论