摘要: Description: 使得 x^x 达到或超过 n 位数字的最小正整数 x 是多少? Input: 一个正整数 n Output: 使得 x^x 达到 n 位数字的最小正整数 x Example Input: 11 Example Output 10 Data Range: n 看到如此之大的数 阅读全文
posted @ 2017-06-29 18:10 箜瑟_qi 阅读(332) 评论(0) 推荐(1) 编辑
摘要: Description: 一个P进制的N位数A,将A的最后一位放到最高位得到新的N位数B,如果满足B = 2 A(P进制下),那么称A为P进制下的双倍数。现给出进制P,求该进制下的最小双倍数M。 Input: 共k行,每行一个整数Pi,表示进制为Pi。 Output: 共k行,每行一个对应Pi进制下 阅读全文
posted @ 2017-06-25 10:22 箜瑟_qi 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 序 求 最短路径 的算法有很多,各有优劣。 比如Dijkstra(及其堆(STL priority_queue)优化),但是无法处理负环的情况; 比如O(n^3)的Floyd算法;比如Bellman Ford算法,可以处理负环的情况。 SPFA算法就是基于Bellman Ford算法的改进。 SPF 阅读全文
posted @ 2017-05-25 10:16 箜瑟_qi 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 序: 在OI比赛中,很多情况下我们可以能通过打表(找规律)或者某些方式发现一个递归式。 例如:f(n) = f(n 1)+f(n 2),(斐波那契数列)。 通常情况下,我们计算f(n)的时间复杂度就是O(n)(分别计算f(1), f(2) ... f(n 1)). 但是当n很大又或者还有其他处理的复 阅读全文
posted @ 2017-05-25 08:52 箜瑟_qi 阅读(1050) 评论(0) 推荐(0) 编辑
摘要: 序: 今天做一道题,由于递归函数比较恶心,如果用记忆化搜索,数据范围极大却又用不全(二维数组存的话直接炸)。所以决定干脆使用stl::map存储(反正有O2优化),但是执行insert的时候,编译器却莫名其妙的报错,跳到stl的某个库之中。一脸懵逼,弄了半天才搞明白原因。 结构体像这样: 插入语句是 阅读全文
posted @ 2017-05-07 19:42 箜瑟_qi 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 序 : 早上做了一个”高级“难度的数独发现真是难到爆炸,于是乎决定写一个暴力程序枚举一下,于是出现此文。 思路很简单,深搜即可,每次check一下,不行就回溯。 话不多说,很简单,直接上代码。 水了一篇... 箜瑟_qi 2017/05/05 11:55 阅读全文
posted @ 2017-05-05 11:57 箜瑟_qi 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 序: 在之前的博文中,我解释了关于最大流的EK与Dinic算法,以及它们的STL/非STL的实现(其实没什么区别)。本次讲解的是ISAP算法。‘I’,指 improved,也就是说ISAP其实是SAP算法的改进。目前没有官方名称。 经过测试,ISAP的效率在洛谷的板子题中远胜于EK和Dinic的,速 阅读全文
posted @ 2017-04-30 23:22 箜瑟_qi 阅读(858) 评论(0) 推荐(0) 编辑
摘要: 序: 二分搜索是很常见的一种算法,用来在有序序列中寻找某数(或者小于大于它的最*值的某数)。 二分答案也比较常见,估算出答案范围后二分缩小范围逼近答案。 二分推进与二分答案很像,不同之处是二分推进并非得到答案的范围,而是通过缩小答案对应的数据的范围,逼近答案对应的数据(通常求最值)… 举个例子: 平 阅读全文
posted @ 2017-04-29 23:48 箜瑟_qi 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 序: 关于最长相同不重叠子串,本文提供的是一个DP做法。 算法时间复杂度O(n^2),空间复杂度O(n)(滚动数组)。 举个例子: string x = “**abcabc**abcabcabc” 最长相同不重叠子串长度为6。 由于要求不重叠,所以边界除首尾外需要增加一条。 即字串长度小于|j-i| 阅读全文
posted @ 2017-04-29 22:34 箜瑟_qi 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 题意: 逆序对指在一个序列中ai>aj && i < j,也就是一前一后两个数,当大的在前面的时候即算一对。 题目求在一个由1…n组成的序列中逆序对为k的序列的个数。 出题人很良心,不需要写高精度,答案对10000取模即可。 思路: 这道题的前面其实还有一道很类似的题,也是求逆序对。不同的是那道题给 阅读全文
posted @ 2017-04-27 12:34 箜瑟_qi 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 序: LCIS即求两序列的最长公共不下降子序列。思路于LCS基本一致。 用dp[i][j]记录当前最大值。 代码实现: /* About: LCIS O(mn) Auther: kongse_qi Date:2017/04/26 */ #include <bits/stdc++.h> #define 阅读全文
posted @ 2017-04-26 09:37 箜瑟_qi 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 序: LIS与LCS分别是求一个序列的最长不下降序列序列与两个序列的最长公共子序列。 朴素法都可以以O(n^2)实现。 LCS借助LIS实现O(nlogn)的复杂度,而LIS则是通过二分搜索将复杂度从n^2中的朴素查找导致的n降至logn使之整体达到O(nlogn)的复杂度。 具体解析: http: 阅读全文
posted @ 2017-04-26 09:00 箜瑟_qi 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 裸题: 给两串序列,求其中最长的公共子序列的长度。 如: A:1232193 B:482914132 最长公共子序列:232/213/293…总之长度为3。 当然也有一种变式,题意如下。 两条平行线上各有n,m个点,已知每个点的坐标,一个点只能与另一条线上的点连一条线段,两点连成的线段不能相交。问最 阅读全文
posted @ 2017-04-25 17:59 箜瑟_qi 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 序: 在之前的文章中实现了不利用STL实现EK算法,效率也较高。这次我们企图简化代码,减少变量的使用与手写模拟的代码。 注意:vector等STL的container在不开O2优化的时候实现同一个效果普遍比手写要慢。 源代码如下: /* About: Max_flow_EK_vector Authe 阅读全文
posted @ 2017-04-22 22:15 箜瑟_qi 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 序: 既然是个图,并且求边数的最大值。那么这就可以转化为网络流的求最大流问题。 只需要将源点与其中一子集的所有节点相连,汇点与另一子集的所有节点相连,将所有弧的流量限制置为1,那么最大流 == 最大匹配。(感谢yulemao大神的指点) 只需要在初始化的时候修改一下,就可以直接用求最大流的算法模板了 阅读全文
posted @ 2017-04-22 16:05 箜瑟_qi 阅读(1176) 评论(0) 推荐(0) 编辑
摘要: 背景知识: 什么是二分图? 二分图就是一种特殊的图。这个图可以将整个集合分成了两个子集,满足所有弧都是从其中一子集的顶点射向另一个子集的顶点。同一个子集中的点没有弧相连。 二分图的最大匹配: 二分图的最大匹配就是使两个集合的点尽可能多的一一对应。 本次介绍的是匈牙利算法。 匈牙利算法的原理就是寻找增 阅读全文
posted @ 2017-04-22 15:50 箜瑟_qi 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 序: 我们在使用vector的时候可以自定义里面的数据类型。例如这样: struct Edge{ int from; int to; int weight; }; vector<Edge> edge; 使用vector的使用我们有时会用到resize和reserve函数进行内存的分配。在之前的测试中 阅读全文
posted @ 2017-04-22 11:36 箜瑟_qi 阅读(9380) 评论(1) 推荐(0) 编辑
摘要: 题目描述: 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:7 阅读全文
posted @ 2017-04-21 12:18 箜瑟_qi 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 序:难度标签是普及-,便觉得应该非常简单,结果发现有一个弯半天没绕过来,所以认为这道题对于第一次做的人来讲还是很是比较有意义的。 题目描述: 长度为len的桥上有n个士兵,你不知道他们的初始方向。已知每单位时间每个士兵能走距离1,如果两个士兵碰面则立刻转身往回走,转身不花费时间。问所有士兵离开桥(左 阅读全文
posted @ 2017-04-21 10:41 箜瑟_qi 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 序: 很多时候我们要处理两个数的最大公因数,比如分数化简。因此需要一种高效率的方法找到最大公因数。 朴素法: void Gcd(int &a, int &b) { int i, j, curr = min(a,b); //从两数最小值开始 for(unsigned j = 1; j != 21; + 阅读全文
posted @ 2017-04-20 11:08 箜瑟_qi 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 序: 在之前的测试中,我们比较了四种读入方式,发现使用读入优化是最快的选择,但是我们知道fread()是比它更快的方法。这一次,我们对比四种读入优化,探寻C++读取速度的极限。 分别是getchar()两种方式以及fread()两种方式。 测试数据为1e5,1e6,1e7的大小,每次测试循环5次或7 阅读全文
posted @ 2017-04-17 20:39 箜瑟_qi 阅读(1549) 评论(0) 推荐(0) 编辑
摘要: 序: 相信很多OIer在读取大量数据的时候普遍采取读入优化的方式读入(代码如下,基本类似): inline void read()//无符号型 { static char c; input = 0; c = getchar(); while(c < '0' || c > '9') c = getch 阅读全文
posted @ 2017-04-15 17:23 箜瑟_qi 阅读(2105) 评论(0) 推荐(0) 编辑
摘要: 序: 在上文中对比了四种读入方式的效率,这次将对比三种输出方式的效率。 三种方式分别是:printf(),cout,输出优化(字符输出)。 测试时间依然适用time.h的库函数。 输出代码: inline void print(int curr)//输出优化,递归到最高位,依次输出 { if(cur 阅读全文
posted @ 2017-04-15 17:10 箜瑟_qi 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 序: 之前在一篇关于vector的push_back和resize()等方式读取数据的效率对比中,我们发现最快的是通过读入优化。这次将测试四种读入方式的效率对比: 两种读入优化,scanf与fscanf。 测试数据采用随机生成的10000000个int型整数,在windows环境下运行。 测试时间由 阅读全文
posted @ 2017-04-15 14:21 箜瑟_qi 阅读(477) 评论(0) 推荐(0) 编辑
摘要: 上一次是通过指针进行链表的构建与维护。这一次不使用链表,将原本的指针通过l(left)[]和r(right)[]来实现。 建树的过程中有两种方式,一是朴素数组的方式,而是STL-stack的方式。分别探究三者(还有链表)的效率。 如果不明白具体原理,请看上一节。 朴素数组: /* About: bi 阅读全文
posted @ 2017-04-15 10:57 箜瑟_qi 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 序: 构造出一棵二叉树的方法有很多,基于*序拓展序列也可以构造出亦可唯一的一棵二叉树,本文给出基于后序拓展序列生成二叉树(基于链表实现)。 何谓后续拓展序列? 后续拓展序列指在二叉树的后续遍历序列中增加空节点的序号。 Input 一行字符,即扩展后序序列 Output 输出对应的前序遍历结果 思路: 阅读全文
posted @ 2017-04-13 21:22 箜瑟_qi 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 引言: 有时因为文件版本的更新,后缀名会发生变化,例如Word13的docx到Word16的doc,又例如我们想修改音频文件的后缀。一个一个修改后缀名往往很麻烦,于是我们便可以写一个Python的脚本来批量处理。 代码: import os files = os.listdir(".")#获取当前目 阅读全文
posted @ 2017-04-11 10:48 箜瑟_qi 阅读(2808) 评论(0) 推荐(0) 编辑
摘要: 引子: 我现在想知道1——1e8的范围内有多少个素数(质数),有什么方法? 朴素法,对于每一个数n,我们判断它是否是素数。 像这样: bool check(int curr) { int i; for(i = 2; i < sqrt(curr)+1; ++i) { if(curr % i == 0) 阅读全文
posted @ 2017-04-10 00:49 箜瑟_qi 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 引子: 现在来看这样一个经典问题: 亲戚 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。 怎么做? 阅读全文
posted @ 2017-04-10 00:00 箜瑟_qi 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 引言: 在最大流(一)中我们讨论了关于EK算法的原理与代码实现,此文将讨论与EK算法同级别复杂度(O(N^2M))的算法——Dinic算法。 Dinic算法用到的思想是图的分层结构,通过BFS将每一个节点标出层次后DFS得到当前增广路。然后继续在残留网络中进行BFS分层,当汇点不在层次网络时(没有连 阅读全文
posted @ 2017-04-09 20:45 箜瑟_qi 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 原文地址:http://blog.csdn.net/wall_f/article/details/8373395 原文只附代码,没有解析,本文增加了一些对代码的解释。 请注意:本模板不涉及实数运算与负数运算,使用减法a-b时请保证, a >= b;所有用本模板来转化的数需保证a >0 && a无小数 阅读全文
posted @ 2017-04-08 09:57 箜瑟_qi 阅读(743) 评论(0) 推荐(0) 编辑
摘要: 引言: 在读取大量数据(数组)时,使用vector会尽量保证不会炸空间(MLE),但是相比于scanf的读取方式会慢上不少。但到底效率相差有多大,我们将通过对比测试得到结果。 测试数据:利用srand()函数生成1e7的随机数组(x[i] ∈ (0, 115000]),最终结果将是读取这1e7(一千 阅读全文
posted @ 2017-04-07 14:04 箜瑟_qi 阅读(1461) 评论(0) 推荐(0) 编辑
摘要: 这是网络流最基础的部分——求出源点到汇点的最大流(Max-Flow)。 最大流的算法有比较多,本次介绍的是其中复杂度较高,但是比较好写的EK算法。(不涉及分层,纯粹靠BFS找汇点及回溯找最小流量得到最终的答案) EK算法,全名Edmonds-Karp算法(最短路径增广算法)。 首先简单介绍一下网络流 阅读全文
posted @ 2017-04-07 02:32 箜瑟_qi 阅读(1521) 评论(0) 推荐(0) 编辑
摘要: USACO section1.1:DONE 2017.03.03 TEXT Submitting Solutions DONE 2017.03.04 PROB Your Ride Is Here [ANALYSIS] DONE 2017.03.04 TEXT Contest Problem Type 阅读全文
posted @ 2017-03-04 20:35 箜瑟_qi 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 快速幂原理解析与其他方法回顾 目录: 一.回顾朴素法与使用库函数,分析利弊。 二.引例:指数的分解,即快速幂的原理。 三.源代码。 正文: 一.回顾 1.1.已知的方法 关于求a的n次方,有几种做法呐?对于初学者来说有两种。如下所示 观察poww1,一个明显的问题便是它的时间复杂度比较高,是O(n) 阅读全文
posted @ 2017-02-18 13:36 箜瑟_qi 阅读(1997) 评论(0) 推荐(0) 编辑