
算法浅析
文章平均质量分 74
「已注销」
这个作者很懒,什么都没留下…
展开
-
[算法浅析] hdu1709的一个优化版母函数
学习母函数期间看到的不错代码,留个帖子记录下来。#include#include#include#includeusing namespace std;int c1[10005],c2[10005];int num[110];int tot;void solve(int n){ memset(c1, 0, sizeof(c1)); memset(c2, 0, sizeof(c2)); c1[num原创 2014-04-14 14:40:45 · 606 阅读 · 0 评论 -
[模板] 大数相乘模板
#include#include#includeusing namespace std;#define MAXN 100#define pi acos(-1.0)struct digt { double r; double i;};digt bitRecv[2*MAXN];digt va[MAXN*2],vb[2*MAXN];int ans[MAXN*2]原创 2014-08-14 03:51:59 · 904 阅读 · 0 评论 -
[模板] 求两圆相交面积(模板)
两圆相交分三种情况:相离相切相交原创 2014-08-06 12:00:40 · 11988 阅读 · 3 评论 -
[2013百度软件研发笔试题] 求字符串中连续出现相同字符的最大值
题目完整描述为:用递归的方式实现一个求字符串中连续出现相同字符的最大值,如aaabbcc,连续出现a的最大值为3,abbc,连续出现字符最大的值为2。以下是我想出来的方法:#include using namespace std;#define MAX(a, b) (a) > (b) ? (a) : (b)int Get(char *s, int n, int m) /原创 2014-08-24 01:44:41 · 7121 阅读 · 9 评论 -
15个使用频率极高的基础算法题(附完整代码)
合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素一般来说,合并两个已经有序的数组,首先是开一个能存的下两个数组的第三个数组,但是题目中已经说了,其中一个数组能全部存的下,显然就不应该浪费空间了。从前往后扫的话,数据要存在大数组的前头,这样每次要把大数组的元素一次后移一位,显然不是什么好主意,所以我们从后往前存。#include#include原创 2014-08-23 07:33:42 · 5477 阅读 · 3 评论 -
[算法浅析] 用两个栈实现队列
基本的思路还是很清晰的,第一个原创 2014-08-22 02:10:15 · 1277 阅读 · 0 评论 -
[笔试题] 两个有趣的问题
两个有趣的笔试题,看看你是不是都能轻松搞定~有n瓶粉末,一瓶有毒。有毒的粉末融在水里一小时后水会变蓝。你有一些试管,问最少需要多少时间和多少试管就能确定毒粉末呢?不考虑粉末导入试管的时间。给定一个无环的单链表,如何快速定位位于链表中间的那个节点?返回值为指向中间节点的指针。原创 2014-08-08 02:19:21 · 2730 阅读 · 5 评论 -
[算法浅析] 如何在O(1)的时间里删除单链表的结点
题目是这样的:给你一个单链表的表头,再给你其中某个结点的指针,要你删除这个结点,条件是你的程序必须在O(1)的时间内完成删除。由于有的同学对链表还不是很熟悉,本文尽量描述的通俗易懂,老鸟请直接跳过前面一大段。链表结构如下:struct node{ int val; node* next;};题目不是很难,很快就能想到好办法:)首先回顾一下普通的删除方法,原创 2014-08-02 04:20:48 · 2881 阅读 · 9 评论 -
[笔试题] 不使用库函数sqrt实现求一个数的平方根
看到这题第一想法就是二分,同时很快就原创 2014-07-30 12:14:49 · 2833 阅读 · 0 评论 -
2-sat概括性总结
关于2-SAT网上有很多解析,在这里仅概括性的介绍一下。给定N个点,每个点都有两种状态,要或者不要。这样就有2*N个状态。然后再给出一些条件,例如要a点不要b点,不要a点的话b点也不要之类的信息。最后问在这些给定的条件下,存不存在可行解,即选取一种方案,哪些点要哪些点不要,能满足全部的条件。2-sat: 一个点a选和不选分别用a和a'表示。若选了a就不能选b,就称这种情况为a与b矛盾,若不选原创 2014-04-14 14:41:33 · 928 阅读 · 0 评论 -
Treap小解析(Part 2 of 2)
上文中我们熟悉了treap的旋转操作,接下来k原创 2014-04-30 00:12:36 · 904 阅读 · 0 评论 -
Treap小解析(Part 1 of 2)
这道题题面很长,大意是给n和m原创 2014-04-29 18:21:10 · 980 阅读 · 0 评论 -
[转载] 有向图强连通分量的Tarjan算法 ——byvoid
[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两原创 2014-04-14 14:41:31 · 1324 阅读 · 0 评论 -
[算法浅析] 计算循环节
整体的思路来自于这篇文章:http://hi.baidu.com/chu2rikka/item/59ff471961814ae45f53b1cf#include#include#includeusing namespace std;int gcd(int x, int y){ return y == 0 ? x : gcd(y, x % y);}int main(){ int x, y原创 2014-04-14 14:41:01 · 3109 阅读 · 0 评论 -
[算法浅析] Algorithm中Heap用法小结
/* 介绍algorithm头文件中根的相关函数 make_heap(首位置, 尾位置+1, 可选的cmp函数); -> 构造堆 push_heap(首位置, 尾位置+1, 可选的cmp函数); -> 添加元素到堆中 pop_heap(首位置, 尾位置+1, 可选的cmp函数); -> 从堆中移出元素 sort_heap(首位置, 尾位置+1, 可选的cmp函数)原创 2014-04-14 14:40:52 · 1004 阅读 · 0 评论 -
[算法浅析] 划分数组,使得两个集合之和最接近
给定一个数组,元素可重复,要求分成两个数组,使得这两个数组之和的差值最小。例如:1 2 3 4 5 6那么分成:1 2 3 5 和 4 6,差值为1。输出和值较大的集合在原数组的下标。思路:设原数组之和为sum,两个集合之和分别为A和B, half = sum/2。假设A A + B = sum|half - A| = |B - half| = |(B - A)/2|接下来只要去寻找大于等于hal原创 2014-04-14 14:40:38 · 2737 阅读 · 4 评论