- 博客(122)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 《具体数学》第一章学习总结
在过去的两个星期内,断断续续的看完了《具体数学》第一章的大致内容,下面是这两个星期看书的流水帐。有时间了好好写一下课后习题答案的文档(数学公式很难编辑)第一章主要讲的是递归的问题,但是我赶脚有些问题和递推感觉很像。The Tower of HanoiHanoi塔的问题是一个很简单的递归入门问题,但是在《具体数学》中有很多这个问题变形。下面一一到来按时钟顺序移动每种大小的盘子都有
2014-03-02 21:29:03
2260
原创 UVa 10881 - Piotr's Ants - 水题
题目描述:lrj后白书第一章第五道例题题目分析:1)从宏观上看,蚂蚁碰撞并没有影响它们的爬行; 2) 蚂蚁的相对位置是不会变的。所以只需要处理初始状态和最后的状态即可。下面是代码:#include #include #include using namespace std;const int maxn = 10100;struct ant { int id; int
2013-12-18 22:13:34
870
原创 UVa 11248 - Frequency Hopping - 最大流 - 最小割
题目描述:lrj厚白书第5章第6节第一道例题题目分析:建图求最大流,如果最大流大于c,那么直接输出possible;如果最大流小于c,那么就要改变属于最小割边的值。下面是代码:(水过,有时间在优化吧)#include #include #include #include #include using namespace std;const int maxn_v = 110
2013-12-18 15:45:05
1453
原创 Hdu 3549 Flow Problem - 最大流
题目描述:裸的最大流题目分析:在刷UVa-11248-Frequency Hopping,一直wa,就拿这道题目来检测一下自己写的Dinic算法的zheng。所以题目是AC了,但是耗时严重啊,贴一下代码,囧。
2013-12-17 20:27:16
871
原创 Uva 1388 Graveyard - 水题
题目描述:lrj厚白书第一章第四到例题题目分析:如果插入点的个数是n的倍数,那么不需要移动这n个点。如果想要移动的距离最短,那么不难想象最多只需要要移动(n-1)个点。所以可以在这n个点中选取一个参照点,其它点的位置是相对于该参照点的。所以在没有加入m个点之前,这n个点都有一个相对与参照点的以为坐标pi,那么在插入m个点之后,这n个点会有确定的位置。然后在判断pi与这写位子的最短距离即可。
2013-12-11 22:36:33
1407
原创 Hdu 1853 Cyclic Tour - 最小费用最大流
题目描述:给定n个点和m条边,每条边都有权值。判断是否所有的点都在环中。如果是,则输出遍历这些环的最小值;如果没有,就输出-1题目分析:如果所有的点都在环中,那么这些点的出度等于入度。然后就是网路流了,囧!(orz!)下面是代码:#include #include #include #include using namespace std;const int maxn_v
2013-12-11 15:31:30
846
原创 Uva 11300 Spreading the Wealth - 模拟
题目描述:lrj厚白书第一章第三个例题题目分析:首先来模拟spreading。对于i,他只可能从他的左边得到xi-1枚金币,从他的右边得到xi+1枚金币,而最终的i只能拥有平均数的金币。将这写等式列出,就可以得到一个含有绝对值的多项式。这样就可以利用绝对值的集合意义得到这个多项式的取最小值的情况。注意:求c[i]时用递推,否则将会tle。下面是代码:#include #inc
2013-12-06 20:17:01
563
原创 Uva 11729 Commando War - 水题 - 贪心
题目描述:lrj厚白书第一章第二道例题题目分析:因为任务是可以并行的执行,所以直觉上是花费时间长的任务优先去部署。但是这到题目还给你交待任务的时间,所以容易让人想多了。不管有没有交待任务的时间,对于任务x和y,只可能有两种情况。x在y之前结束,和x在y之后结束。未交换x和y的位置时,完成时间为:B[x] + B[y] + J[y]交换h和y位置之后,完成时间为:B[y] + B
2013-12-04 19:07:01
928
原创 Uva 11292 Dragon of Loowater - 水题
题目描述: lrj厚白书第一章第一道例题。题目分析:感觉有点像这样的一道题,给定两个有序的链表,用最短的时间将对这两个链表的元素进行排序。这里也像归并排序的“并”的步骤。囧!说了这么多,思路很简单。下面是代码:#include #include #include using namespace std;const int maxn = 20005;int dra[maxn]
2013-12-04 18:37:42
605
原创 Hdu 1532 Drainage Ditches - 最大流入门
裸的最大流的题目,直接模版。下面是代码:#include #include #include #include using namespace std;const int maxn = 300;const int inf = 0xfffff;int g[maxn][maxn];int pre[maxn];int maxflow;int n,m;void Edmond
2013-12-03 16:55:25
649
原创 Hdu 4305 Lightning - 生成树计数 - 行列式求值
调试了很长的时间,orz!AC的代码,时间也蛮久的,o(╯□╰)o!首先需要建图,然后在构建矩阵,最后求行列式的值。就这么简单,可是代码各种bug。下面是AC代码:(可以优化的)#include #define maxn 305#define mod 10007int g[maxn][maxn];int d[maxn][maxn];int a[maxn][maxn];
2013-11-29 15:57:28
1151
原创 行列式求值
简单的行列式求值的模版题目:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1035下面是代码:#include #define maxn 11#define e 1e-6double c[maxn][maxn];bool zero(double a){ return a >
2013-11-25 22:16:19
3380
原创 ccnu 十一月半月赛 F题 会攻击的点 - 离散化 + 区间求和
好久没刷题了,刷下简单题练练。题目大意:给定一组点的坐标,找出能够互相攻击的点的对数。题目分析:考虑点i,那么只有和它同水平,或者同竖直,或者左上放或者右下方的点才能够和改点i攻击。所以首先想着按照x轴或者y轴排序。排序后可以暴力,但是数据有点大。所以就想着看能不能剪枝了。然后就试着先按照y轴排序,然后再按x轴排序,这样就可以得到当前点上下左右各有多少点了。当时这样还是没有用,没用能够剪枝
2013-11-23 21:40:01
705
原创 碎碎念(一)
仔细算下来,自己刷的题目量也还可以吧,虽说和机房的其它人比还是很少,但是自己却觉得还可以。但是,刷的这些题目并没有在实质上提高我的多少解题能力。暑假看了《海上钢琴师》,当看着1900在Virginian号和Jelly Roll Morton斗琴是看着我热血沸腾,当时真想让自己写的代码变成艺术,当然了计算机编程本来就是一门艺术,可是看看自己的代码,确实个渣渣。对于以前的自己,刷题时思考的
2013-09-23 23:21:58
793
1
原创 图论-生成树计数
好久没写博客了,对于ACM,也不刻意去刷题了,遇到一个问题就解决一个问题,脚踏实地的真真的有所收获因为生成树计数问题需要运用线性代数的一些知识,虽说学过但是忘的差不多了,慢慢来解决这个问题吧,所以持续更新ing!↖(^ω^)↗先来个简单的证明吧!定义T(G)为图G生成树的个数。对于图G:那么不妨定义下面的这两个图:G-e(此时e为边2到3)G/e
2013-09-23 23:03:17
1983
原创 Hdu 4714 Tree2cycle - DFS
题目大意:给定一颗树,求需要最少减多少枝和加多少枝使其成为一个环。题目分析:其实题目已经给出了做法,但是自己在减枝的时候减错了。应该减那条和其父结点相连的那一条边。A cycle of n nodes is defined as follows:(1)a graph with n nodes and n edges (2)the degree of every node i
2013-09-10 11:57:11
932
原创 Hdu 1695 GCD - 欧拉函数 + 容斥
题目大意:给定两个区间[1,b]和[1,d],x∈[1,b],y∈[1,d],问有多少种组合,使得gcd(x,y) = k。题目分析:将gcd(x,y) = k 化简得 gcd(x/k,y/k) = 1,既表示在两个区间中求多少对数字互质。最简单的做法就是在区间中枚举,但是有一个条件 gcd(x,y) 和gcd(y,x)属于同一种情况,所以要避免枚举重复的。如果不想枚举重复的,
2013-09-07 10:51:09
658
原创 Hdu 4405 Aeroplane chess - 简单DP
题目大意:问从0到n所花费时间平均时间。每次有投骰子,投到几就走几步。当然了,还有近道。题目分析:假设现在在i,那么接下来有六种可能的走法,分别是:i到i+1,在由i+1到ni到i+2,在由i+2到ni到i+3,在由i+3到ni到i+4,在由i+4到ni到i+5,在由i+5到ni到i+6,在由i+6到n其中每一个可能的走法发生的概率为n为
2013-09-05 21:01:56
851
原创 Hdu 4403 A very hard Aoshu problem - 爆搜
题目大意:给定n个数字,用一个“=”和若干“+”能组成多少中等式题目分析:n很小,可以考虑爆搜。但是不好写,因为没想到做预处理,将能构成的所有数先保存,然后直接爆搜。当然,还是可以剪枝的。下面是代码:#include #include using namespace std;const int maxn = 15;string str;int num[maxn][ma
2013-09-03 18:24:24
1444
原创 Hdu 4400 Mines - 搜索 + STL
题目大意:有点像扫雷游戏,炸弹爆炸的时候就像BFS一样。要确定爆炸的范围。题目分析:数据很大,暴力会超时。那么只有离散化以后,在枚举了。注意枚举的上界和下届,很显然,对于x坐标的下界为x2-x1,上界为x2+x1;对于y坐标的下界为y2-y1,,上界为y2+y1。下面是代码:#include #include #include #include #include
2013-09-02 19:22:27
963
原创 Codeforces Round #195 (Div. 2) B. Vasily the Bear and Fly - 找规律
题目分析:做这道题时自己犯二了,忽略了 的范围,直接将题目想的更简单了。Orz....看来自己还是弱爆了啊。。。这道题分类讨论:Also you could iterate circles, adding distance for each of them and dividing by m2 in the end. Let's see how the i-th itera
2013-09-02 16:33:03
1089
原创 Poj 3321 Apple Tree - 树状数组
题目分析:这道题的难点是如何构造一个区间。用dfs来确定区间,然后直接用树状数组做。PS:用vector来存储边可能会超时下面是代码:#include #include #define maxn 101000struct Node{ int v; int next;} node[maxn<<1];int n,m,cnt,num;int a[maxn
2013-09-01 16:56:10
613
原创 Codeforces Round #198 (Div. 2) C. Tourist Problem - 找规律
C. Tourist Problemtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputIahub is a big fan of tourists. He wants
2013-09-01 13:48:27
1223
原创 Codeforces Round #196 (Div. 2) B. Routine Problem
题目大意:给你显示器屏幕的比例(a:b)和你要看电影的比例(c:d),求调整后剩下的没有到的区域和总面积的比例。题目分析:在做虚拟赛的时候,对自己的想法不是很确定,能否AC。在提交WA后,就果断放弃了。第二天在做的时候发现是自己特例没想到。虽说我的想法很笨拙,但是还是能AC的。反正就是定长比宽,或者是定宽比长。下面是代码:#include #include using namesp
2013-08-29 16:22:46
841
原创 Codeforces Round #196 (Div. 2) C. Quiz
C. Quiztime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputManao is taking part in a quiz. The quiz consists of
2013-08-29 16:14:36
1021
原创 Poj 2528 Mayor's posters - 线段树
题目大意:给n张海报,然后将这n张海报贴在宣传板上,问最后能被看见的海报有多少张。题目分析:还是线段树,区间去改问题。但是要注意贴海报的顺序。 假设当前在贴第i张海报[a,b],如果在[a,b]内子区间没有被覆盖,那么说明可以看到它,否则,它被完全覆盖 依次贴
2013-08-28 15:19:04
669
原创 Poj 1151 Atlantis - 线段树
题目描述:在一平面内,给定一组矩形,求这些矩形占据的面积。 题目分析:根据上图,可以想到将这些矩形分割为图中红线和黑线组成的矩形的面积 根据Poj 3277 City Horizon - 线段树的作法,将图中的黑线扫描到y轴上,然后求出这些黑线占据的红线长度。 总面积为
2013-08-28 15:18:26
762
原创 Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations - 线段树
D. Xenia and Bit Operationstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputXenia the beginner programmer h
2013-08-27 21:03:00
1507
原创 Codeforces Round #197 (Div. 2) C. Xenia and Weights - 搜索
C. Xenia and Weightstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputXenia has a set of weights and pan sca
2013-08-27 15:39:42
1255
原创 Poj 3468 A Simple Problem with Integers - 线段树
题目大意:给定一组数据,然后对应两个操作 Q a b 查询[a,b]的和 C a b c 将[a,b]的数字都加上c题目分析:赤裸裸的区间求和和区间修改,可以用树状数组做的,但是这里是练习线段树。所以用线段树做。 每次要修改[a,b],不需要直接修改到叶子
2013-08-24 23:36:42
526
原创 Poj 3264 Balanced Lineup - 线段树
线段树水题,每个结点保存两个信息,当前区间的最大、最小值,但是容易TLE。下面是代码:#include #include using namespace std;#define maxn 50500#define INF 100000000int h[maxn];int min_h,max_h;struct Node{ int l; int r;
2013-08-24 16:30:03
553
原创 Poj 2800 Joseph's Problem - 找规律
题目大意:给定n和k,求 ∑1(k mod i)题目分析:n和k很大,直接算会TLE,但是可以先打表找规律。(点击可见数学推导) 随便找几组数据可以发现下面的规律 1)如果k/i的值相等,那么kmodi的值成等差数列(连续的) 2)如果k比n大,那么k/i的值随i的值
2013-08-24 10:55:13
1167
原创 Poj 3277 City Horizon - 线段树
题目大意:在水平直线上给定一组矩形,这些矩形的底边在同一水平线上,求这些矩形占据的面积。题目分析:很显然,这些矩形的长和高都不一样,还会有重合的区域。如何求这些矩形的面积呢?画个图就知道了。 对于上图给定的三个矩形,最快的求面积的方法就是将每条线段乘以当前该条线段对应的最高的高。譬如 A1-B1对应的最高的是H1,
2013-08-23 15:57:49
1806
1
原创 Poj 2828 Buy Tickets
题目大意:反正在哪里都有人会插队,给定n个去排队的买票的人,每个人有两个数据pos和val,pos代表他要插的地方,val代表他的编号。求出最终的队伍是怎样的。题目分析:一开始没扫描思路,感觉可以用链表做,但是是在刷线段树的题目,数亿就往线段树上想。反正自己想不出来,就去看看大牛怎样写。倒着来确定最后的队列。因为最后一个人的位置是定的,他说插到哪里最后的结果就是插在哪里。所以从后往前来解决这道
2013-08-17 17:19:48
550
原创 Hdu 2795 Billboard
题目大意:给定一个h*w的宣传板,然后在给定n个1*wi的小广告,问这些小广告在宣传板的第几行(因为每个小广告都想放在最上面,且最靠左边的位置)。题目分析:刚开始想到的是将整个宣传板看做时一个1~h*w的区间,然后用1*wi的小广告来按照题意来更新这段区间。但是这种想法很天真。操作性压根都没用。所以不妨换一种思路。将宣传版的每一行都看做是一个点,这样整个宣传板就可以看做是一个1~h的区间,然后
2013-08-17 17:07:21
538
原创 双端堆/最小-最大堆/Double-Ended Heap ?
Uva 11136 - Hoax or what 这道题可以用优先队列做,这里讨论一下用最小-最大堆做。 题目的要求:需要找到最小值和最大值,并且还有删除最小值和最大值。 这样就需要一种包括下面几种操作的数据结构: insert 插入一个元素 get_min() 得到最小元素,并将其从集合中删除 get_max()的到最大元素,并将其从集合中删除 如果只是需要找
2013-08-08 10:39:12
2074
原创 数据结构-并查集
并查集,构造巧妙,实现简单,却可以解决大问题。 Poj 1182 食物链 这道题是并查集的经典应用。 篇解题报告参考了以下博客:http://hi.baidu.com/ixtyuugjmrceike/item/ec56f8138e4523d6bf904292 给定三类动物A、B、C,A吃B,B吃C,C吃A。这样对于属于A、B、C中的a和b,可以用一下关系式表示a->
2013-08-07 11:29:19
639
原创 矩阵相关
本来是刷AC自动机的题目,不过看了n道题说都要用矩阵,所以就看看矩阵,刷刷矩阵入门题。随便写几篇接替报告。 这里就不介绍了,网上的大牛已经讲的很清楚了。 matrix67的博客:点击打开链接 酷行天下的博客:点击打开链接 下面给一点自己的理解 一、矩阵的快速幂 要想解决矩阵快速幂的问题,不妨来研究
2013-07-28 00:56:08
623
原创 Hdu 1757 A Simple Math Problem//矩阵乘法
唉,是一道水题,但是错把b也为a,狂wa。。。 还有每次取模,否则,溢出。 下面是代码:#include#include#define maxn 15struct node{ int m[maxn][maxn]; void init() { memset(m,0,sizeof(m)); }} A,B;int k,m;
2013-07-22 10:27:56
657
原创 Poj 1977 Odd Loving Bakers//矩阵
这道题,推一下关系式就出来了。 下面是代码:#include#include#include#includeusing namespace std;const int maxn = 100 + 10;string s;char str[maxn];map Map;struct node{ int m[maxn][maxn]; void init()
2013-07-21 21:15:57
676
Poj 1011 TLE...求大神指教0.0
2013-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人