- 博客(36)
- 收藏
- 关注
转载 二分图的最大匹配、完美匹配和匈牙利算法
这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为
2014-07-22 10:02:28 568
转载 求二进制数中1的个数
算法-求二进制数中1的个数问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到
2014-07-10 11:02:07 474
原创 HDU1166 敌兵布阵 非递归线段树 & 递归线段树 & 树状数组
参考文献:http://wenku.baidu.com/link?url=e5vw-nZ5JdwcoaQbkc4ygNSRKZg0GxPgFKttADPFf2J5zaTpx0g8a2EMu7Y94nhm75pxBSiDES8lCN4e-Xb1Xu3W5TeT5OBv5rKPJmZnimC
2014-07-05 19:33:36 588
原创 离散化模板
scanf("%d",&P); for (int i=0; i!=P; i++) { scanf("%d",&A[i]); B[i]=A[i]; } sort(B,B+P); int size=unique(B,B+P)-B; for (int i=0; i!=P; i++) A[i]=lower_b
2014-07-05 15:56:52 590
转载 树状数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构,可以很高效的进行区间统计。在思想上类似于线段树,比线段树节省空间,编程复杂度比线段树低,但适用范围比线段树小。 来观察这个图[数组下标是从1开始]: 令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的值的总和,那么容易发现:C1 = A1C2 = A1 + A2C3 = A3C4 = A
2014-07-04 16:53:16 380
转载 我的算法学习之路
原文链接:http://zh.lucida.me/blog/on-learning-algorithms/原文作者:Lucida这篇文章讲了什么?我这些年学习数据结构和算法的总结。一些不错的算法书籍和教程。算法的重要性。初学第一次接触数据结构是在大二下学期的数据结构课程。然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课
2014-07-04 10:44:32 546
原创 3979 分数加减法
11888556NUCwangzhiqiang3979Accepted172K16MSC++698B2013-07-31 10:16:43水题,模拟。题意:如题。解题思路:分子分母都只有一位,简单模拟即可,注意结果是整数的情况。
2013-07-31 10:19:40 541
原创 1125 Stockbroker Grapevine
11888263NUCwangzhiqiang1125Accepted208K0MSC++1066B2013-07-31 09:33:35水题,floyd秒过。题意:第一行读入n,表示n个人传送消息, 下面n行,第一个数表示每个人能消息的人数j,然后读入j组数据,传递给的人,传送时间。 求从那个人开
2013-07-31 09:42:55 595
原创 1083 Moving Tables DP
#include #include int main(){ //freopen("input.txt","r",stdin); int T; scanf("%d",&T); while (T--) { int f[402],n,x,y; memset(f,0,sizeof(f)); scanf("%d",
2013-07-29 17:06:42 603
原创 1050 To the Max DP
求最大子矩阵和。#include int main(){ int sum[101][101],n,ans=0,tmp; scanf("%d",&n); for (int i=1; i<=n; i++) { sum[i][0]=0; for (int j=1; j<=n; j++) { scan
2013-07-29 16:32:04 594
原创 1018 Communication System 枚举+剪枝
#include #include #include using namespace std;struct node{ int b,p,id; //带宽,价格,设备号码};node a[10001];bool cmp(node x, node y) { return x.b<y.b || (x.b==y.b && x.p<y.p) || (x.b==y.b && x.p==
2013-07-29 15:56:04 628
转载 AC自动机
Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。要学会AC自动机,我们必须知道什么是Trie,也就是字母树。Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希
2013-07-26 18:44:56 419
转载 【完全版】线段树
from:http://www.notonlysuccess.com/index.php/segment-tree-complete/很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉得当时的代码风格实在是太丑了,很多线段树的初学者可能就是看着这篇文章来练习的,如果不小心被我培养出了这么糟糕
2013-07-26 17:15:57 972
原创 3264 Balanced Lineup 线段树
#include #include #include using namespace std;#define MY_MIN 99999999#define MY_MAX -99999999struct CNode{ int L,R; int nMin,nMax; CNode * pLeft, * pRight;};int nMax, nMin;CNode Tree[1
2013-07-26 08:34:40 478
原创 3468 A Simple Problem with Integers 线段树
#include struct node{ int L,R; __int64 sum,inc;};node tree[500000];void build(int k,int left, int right){ tree[k].L=left; tree[k].R=right; tree[k].sum=0; tree[k].inc=0; if (left==ri
2013-07-26 08:34:27 744
原创 GCD 扩展GCD 快速GCD 模线性方程 模线性方程组 单独求欧拉函数 递推求欧拉函数
GCD:int GCD(int x, int y){ if (!x || !y) return x>y ? x: y; for (int t; t=x%y; x=y,y=t) ; return y;}扩展GCD: 求 x,y 使 gcd(a,b)=a*x+b*y;int extGCD(int a, int b, int &x, int
2013-07-26 08:34:01 816
原创 筛素数 时间复杂度:O(N)
#include #include const int MAXN = 100;int primes[MAXN/3],num=0;void getprime(){ bool flag[MAXN]; memset(flag, false, sizeof(flag)); for (int i=2; i < MAXN; i++) { if (!fl
2013-07-26 08:33:43 1108
原创 2769 Reduced ID Numbers 同余问题
#include #include #include using namespace std;bool p[100001];int d[100001];int main(){ int ncase; cin >> ncase; while (ncase--) { int num; cin >> num; f
2013-07-25 20:23:17 641
原创 2586 Y2K Accounting Bug 贪心 枚举
根据经验,贪心选择往往都在极端处(临界点)选择。(其实这题不用贪心,单纯枚举也可以AC,) 不难证明,每连续5个月中,在保证这5个月经营之和为亏损的情况下,亏损的月数肯定应尽量往后选,盈利的月数应尽量往前选。先处理处理完1~5月后,剩下的月份可以根据“连续5个月经营之和为亏损”这个条件进行确定亏损还是盈利。本题的贪心选择每次仅仅选取其中一种情况(1~5月),因为之后月份无需再选
2013-07-25 20:22:28 688
原创 2109 Power of Cryptography 数学
一般思路:二分+高精度算法 但是本题还有一个更加巧妙的办法去处理:首先需要明确:double类型虽然能表示10^(-307)~10^308,(远大于题意的1前16位,因此必须慎用!那么为了避免double对输入的数在运算过程中进行精确,那么我们必须让double的运算第一步就得到一个int(即小数点尾数全为0),这个不难理解。然后根据题意,是求指数k,一般人自然想到利用对数l
2013-07-25 20:15:36 554
原创 1328 Radar Installation 贪心
把每个点的放置雷达的区间求出,然后按照区间排序。排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一。忽视前面走过的所有点后,对后面进行相同的操作(从左至右看,当发现下一个区间的起始点大于左边未被忽视的所有区间的最小结束点的时候,答案加一)。直到结束.#include #include #include using namespace
2013-07-25 20:13:31 578
原创 1061 青蛙的约会 数论 扩展GCD
#include __int64 extGCD(__int64 a, __int64 b, __int64 &x, __int64 &y){ if (!b) {x=1; y=0; return a; } int d=extGCD(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return d;}int main(){
2013-07-25 20:11:22 712
原创 1035 Spell checker 暴力模拟
基本思路就是逐个比较 待查单词 与 字典单词 的长度,当且仅当两者长度之差的绝对值#include #include bool change(char* word, char* dict) //检查字符串word能否通过变换得到dict{ int dif=0; while (*word && *dict) if(*(word++)!=*(dict++))
2013-07-25 20:10:35 805
原创 1020 Anniversary Cake DFS
本题的难点不在于怎样去DFS,而是每放入一个蛋糕后,怎样去标记盒子已经放有蛋糕的位置?#include #include int boxsize,n,sizenum[11],col[41]; //col[i]记录第i列被填充了的格子数bool DFS(int fillnum){ if (fillnum==n) return true; int min=
2013-07-25 20:08:45 595
原创 1019 Number Sequence 数论
#include #include #define N 31269unsigned a[N+1]; //a[i] 表示前i组数字序列的长度void init(){ a[1]=1; for (int i=2; i<N; i++) a[i]=a[i-1]+(int)log10((double)i)+1; //log10(i)+1 表示第i组数字列的长度 比 第
2013-07-25 20:06:28 638
原创 1017 Packets 贪心
#include int main(){ while(true) { int a[7],t=0; for (int i=1; i<=6; i++) { scanf("%d",&a[i]); t+=a[i]; } if (t==0) break;
2013-07-25 20:05:26 562
原创 1016 Numbers That Count 模拟
#include #include using namespace std;/*压缩数字串n,存放到t*/void R(char* n,char* t){ int i,j; int time[10]={0}; //记录n中各个数字出现的次数 for (int i=0;n[i];i++) time[ n[i]-'0' ]+
2013-07-25 20:04:43 612
原创 1014 Dividing 多重背包
#include #include using namespace std;int n[7]; //价值为i的物品的个数int v; //背包容量int SumValue; //物品总价值bool flag; //标记是否能平分SumValueint dp[100000]; //状态数组int max(int a,int b){ return a>b?a
2013-07-25 20:04:06 510
原创 1014 Dividing DFS
#includeusing namespace std;int n[7]; //价值为i的物品的个数int SumValue; //物品总价值int HalfValue; //物品平分价值bool flag; //标记是否能平分SumValuevoid DFS(int value,int pre){ if (flag) return; if (value==Ha
2013-07-25 20:03:32 538
原创 1013 Counterfeit Dollar
数学逻辑#include int main(){ int k,joseph[15]={0}; while (scanf("%d",&k) && k) { if (joseph[k]!=0) { printf("%d\n",joseph[k]); continue; }
2013-07-25 20:02:46 627
原创 1012 约瑟夫变形
#include int main(){ int k,joseph[15]={0}; while (scanf("%d",&k) && k) { if (joseph[k]!=0) { printf("%d\n",joseph[k]); continue; }
2013-07-25 20:02:01 679
原创 1011 Sticks
经典搜索#include #include #include using namespace std;#define N 100int used[N],len[N],sum,n,Min;bool find(int p, int rest, int trest){ if (trest==Min) return true; for (int i=p; i!=n; i+
2013-07-25 19:58:26 636
原创 1006 Biorhythms
水题。#include int main(){ int t=1,p,e,i,d; while(scanf("%d%d%d%d",&p,&e,&i,&d) && p!=-1 && e!=-1 && i!=-1 && d!=-1) { p%=23; e%=28; i%=33; for (int j=0; ; j++)
2013-07-25 19:57:14 533
原创 1002 487-3279
字符串处理#include const int ch[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0};int a[10000001],max=0;void work(char s[]){ int k=0; for (int i=0; s[i]!='\0'; i++) if (s[i]>='
2013-07-25 19:56:08 687
转载 如何在自己电脑上搭建一个无线网络 from 百度
开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网,节省网费和路由器购买费。iphone4亲测通过,比conncetify方便,稳定,网速好!以操作系统为win7的笔记本或装有无线网卡的台式机作为主机。主机设置如下:1、以管理员身份运行命令提示符:“开始”---在搜索栏输入“cmd”----右键以“管理员身份
2013-07-25 17:40:02 1300
原创 1001 Exponentiation
#include #include #define MAX 200void mul(int ans[], int a[], int len2){ int b[MAX],len1; memset (b,0,sizeof(b)); for (len1=MAX-1; len1>=0; len1--) if (ans[len1]!=0) break;
2013-07-25 17:19:26 574
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人