- 博客(478)
- 资源 (1)
- 收藏
- 关注
原创 Capacityof Single-user Wireless Channel with Single Antenna
Project Proposall ProjectInformationProject Type: LiteratureSurveyProject Subject: Capacityof Single-user Wireless Channel with Single AntennaGroup Member: 13010180006Yang Hengjie; 1301018003
2016-05-30 01:13:20
1015
原创 《C++ Primer》学习笔记共享
忙完了算法竞赛,开始准备好好学习一番C++语言了,正在学习《C++ Primer》英文版这本书,写的的确很棒,以下是我自己总结的笔记,有兴趣的可以查看~共享链接如下:C++ Primer学习笔记
2015-11-13 13:14:01
1400
1
原创 我的ACM训练历程
2015年10月25日,我在沈阳市东北大学刘长春体育馆参加了第一次ACM区域赛,经过了紧张的5小时,以一枚铜牌收尾,从此算是暂时结束了我的ACM训练历程(明年看情况决定是否参加)。回想整个比赛过程,第一个通过的是B题,队友用了strstr函数暴力过了这道题,排到第29名,甚为欣喜!一个小时左右,终于找到了D题组合游戏的规律后过了(WA了一次,一开始找错规律了,随后发现要用gcd),位于
2015-10-29 00:00:25
4993
5
原创 例题6.1 铺放骨牌 UVa11270
1.题目描述:点击打开链接2.解题思路:本题是最基础的轮廓线动态规划问题。这类问题的特点是无法用传统的整行整列作为状态进行dp,只能把参差不齐的轮廓线当做状态的一部分来进行转移。下面以这道题为例来谈一谈这种做法。首先,我们需要回顾一下多阶段决策的dp问题,这类问题的解法通常是:把边界情况的dp值都设置为1,然后从小到大枚举每个阶段,在上一个阶段中的每个点j,和j的每个后继结点k,有d[cu
2015-10-24 19:15:56
1723
原创 HDU 5454 Excited Database (2015年沈阳赛区网络赛E题)
1.题目描述:点击打开链接2.解题思路:本题利用线段树解决,根据题意,我们需要建立两棵线段树,分别维护主对角线,副对角线。每个线段树的结点需要维护sum,sumL,sumR,查询时候把矩形看做一个平行四边形加上上下两个三角形来分3次查询。这样,本题即可在O(logN)时间内查询完毕。3.代码:#include#include#include#include#include#i
2015-10-24 11:52:03
1326
原创 HDU 5462 Manors (2015年沈阳赛区网络赛M题)
1.题目描述:点击打开链接2.解题思路:本题是半平面交的简单应用,只怪网络赛时候连啥是半平面交都没听说过==,学过之后果然是水题。根据I(i)==I(j)列方程,整理之后发现正好是一条直线,系数要么是前缀和,要么是平方和,先预处理出来后,然后扫一遍这n个人,每个人对应n-1个直线,同时加上4个边界直线,一共n+3条直线,求半平面交后再求面积,就是第i个人的面积。时间复杂度为O(N^3logN)
2015-10-22 22:23:31
1042
原创 例题4.10 离海最远的点 LA3890
1.题目描述:点击打开链接2.解题思路:本题是半平面交的一个典型应用。本题要求在一个凸多边形中找一点,使得这个点到凸多边形的最短距离最大。显然需要利用二分法来确定,那么如何来确定这个距离是否存在呢?可以想象,如果存在的话,那么把这个凸多边形的每条边都向内部平移这段距离后,交出来的区域至少包含一个点。只要这个区域是存在的,那么就说明这个距离是可行的。而这正是半平面交的典型应用。这样,二分答案,然
2015-10-22 15:01:01
686
原创 例题4.7 飞机场 UVa11168
1.题目描述:点击打开链接2.解题思路:本题还是凸包的简单应用。根据题意不难发现,所有点都在同侧,且到直线距离之和尽量短,那么只可能是凸包上的某一条边。因此,可以事先求一下凸包,然后枚举边即可。总的时间复杂度为O(N),但是如何在O(1)时间内求出到直线的距离之和呢?可以利用点到直线的距离公式。由于点都在同侧,因此Ax0+By0+C的正负号相同,可以事先计算出所有点的x坐标和y坐标,就可以在O
2015-10-22 13:06:27
736
原创 例题4.6 包装木板 UVa10652
1.题目描述:点击打开链接2.解题思路:本题是凸包的一道简单的应用,只需要事先把输入的矩形的顶点放入顶点集P中,然后对该顶点集求凸包,并计算这个凸包的面积即可。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#
2015-10-21 13:42:21
709
原创 HDU 5451 Best Solver (2015年沈阳赛区网络赛B题)
1.题目描述:点击打开链接2.解题思路:第一次做这类通过矩阵求解整数部分的题目,学习了。首先是如何求(5+2sqrt(6))^n的整数部分,这里可以参考如下的博客链接:点击打开链接接下来,本题还有另外一个难点就是如何降低指数的次数。由于我们已经把问题变换为了通过矩阵快速幂来求解,而且根据线性递推数列取模后均为周期序列的结论,本题的矩阵也存在周期性,看到网上有的是根据群论的知识直接算
2015-10-21 00:14:16
673
原创 HDU 5452 Minimum Cut (2015年沈阳赛区网络赛C题)
1.题目描述:点击打开链接2.解题思路:本题要求找到一个最小割,使得只有一条边属于生成树上的。观察后可以发现,只有选择在树上的度为1的点才可行,因为如果这个点在生成树上的度大于1,那么显然只删除树上的一条边,他仍然和整个图是连通的。这样,只需要找到树上的度为1的点,然后用它在图中的度更新答案即可。3.代码:#include#include#include#include#inc
2015-10-20 22:44:38
847
原创 例题2.23 细胞自动机 LA3740
1.题目描述:点击打开链接2.解题思路:矩阵快速幂3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#i
2015-10-20 17:02:49
810
原创 LA3490 Generator
1.题目描述:点击打开链接2.解题思路:高斯消元+KMP算法3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#inclu
2015-10-20 16:53:05
795
原创 《挑战》例题4.1 Random Walk
1.题目描述:有一个n*m的网格,从(0,0)出发,每一步可以朝着上下左右4个方向等概率地移动,另外一些格子中有石头,因此无法移动到这些格子,求第一次到达(n-1,m-1)格子的期望步数。可以保证至少存在一条从(0,0)到(n-1,m-1)的路径。范围:22.解题思路:不妨设E(x,y)表示从(x,y)出发,到终点的期望步数,那么根据期望的线性性质和全期望公式,可以得到如下方程。E(x
2015-10-20 14:50:53
1317
原创 UVa11728 Alternate Task
1.题目描述:点击打开链接2.解题思路:本题可以事先打表计算出所有的数的正因子之和,然后查询即可。这里的问题是,为什么这么做就是可行的。尝试算出几个因数和之后我们会发现,如果因数和相同,那么直接更新的话自然会取较大者,因此答案是正确的。3.代码:#include#include#include#include#include#include#include#include
2015-10-20 11:35:41
456
原创 LA4998 Simple Encryption
1.题目描述:点击打开链接2.解题思路:本题是一道非常好的思维题。猛一看感觉好像没有什么特别好的方法,但是如果仔细观察这个方程,就会发现要求解的x实际上是一个不动点,只要找到了这个不动点,以后就会稳定的这个地方。所以可以一开始选择一个比10^12大的数,开始不停的迭代,直到是一个稳定点时候break即可。类似于牛顿法求高次方程的根。3.代码:#include#include#inc
2015-10-19 22:58:48
608
原创 UVa10692 Huge Mods
1.题目描述:点击打开链接2.解题思路:本题利用欧拉定理解决。根据题意,我们需要递归地计算每一个取模后的指数,然后再进行快速幂得到最终的答案。由欧拉定理知,我们只需要计算指数模phi(MOD)的结果即可,但是有一个细节需要注意,如果gcd(a,MOD)>1,那么需要先计算出a^phi(MOD)%MOD的结果r,那么可以知道,r^k%MOD恒等于r,这样,再把结果乘上r,就是最终的答案。本题即可
2015-10-19 16:17:05
753
原创 UVa11892 Box Game
1.题目描述:点击打开链接2.解题思路:本题可以先写一个记忆化搜素观察一下,发现当n=2^k-1时候,是Bob胜利,否则都是Alice胜利。然后就可以敲代码了。。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include
2015-10-18 22:32:01
452
原创 LA4384 Business Cards
1.题目描述:点击打开链接2.解题思路:本题需要一点仔细的分析。很容易想到可以从边长的整除性上去考虑,然而这样还不够,可以发现存在一种情况是小矩形既有横着摆放的,也有竖着摆放的。那么我们就按照摆放方式进行分类讨论:(1)全部都是横着放或全部都是竖着放,那么只需要判断c,d是否分别整除a,b或b,a即可;(2)一部分是横着放,一部分是竖着放;这种情况比较复杂,需要仔细的分析。首先一点
2015-10-18 21:34:01
537
原创 2015 NEERC F. Gourmet and Banquet
1.题目描述:点击打开链接2.解题思路:本题利用二分法解决。根据题意,可以发现需要对区间的右端点排序即可。接下来就是二分时间x,那么怎么判断是否合法呢?首先用一个全局变量cnt表示第几次标记(好处是不需要每次都清空数组了),接下来对这段区间中不是cnt的点进行标记,用cur来统计标记的次数,如果最后cur3.代码:#include#include#include#include
2015-10-18 00:51:16
725
2
原创 POJ 2406 Power Strings
1.题目描述:点击打开链接2.解题思路:本题利用KMP算法中f函数的性质解决。根据题意可以知道,len-f[len]就是周期串的错位部分,如果这len个字符构成了一个周期串,那么len-f[len]就是这个周期串的循环节,因此应该有len%(len-f[len])==0,这样,答案就是len/(len-f[len]),否则,答案就是1.3.代码:#include#include#i
2015-10-17 00:03:41
328
原创 UVa11488 Hyper Prefix Sets
1.题目描述:点击打开链接2.解题思路:本题用Trie解决。根据题意,我们需要维护一条路径上每个结点的字符出现的次数,可以边插入边统计。接下来就是遍历每一个字符串了,遍历的时候更新ans即可。3.代码:#include#include#include#include#include#include#include#include#include#include#in
2015-10-16 16:30:11
451
原创 LA4730 Kingdom
1.题目描述:点击打开链接2.解题思路:本题利用BIT+并查集解决。根据题意可以发现,x值是没有意义的,因此本题实际上是一维的一个操作题。由于line操作需要输出州的个数和城市的个数,且是统计一个点处的结果,自然可以想到用离线标记法来解决,又因为查询操作也比较多,因此可以用BIT来标记和查询。那么如何来更新一个州的城市数目呢?可以用并查集解决,但是有一个问题:两个连通分量合并成一个连通分量时候
2015-10-15 23:15:02
607
原创 LA4108 SKYLINE
1.题目描述:点击打开链接2.解题思路:本题用线段树解决。根据题意,我们需要构造一棵线段树,维护区间[L,R)中的长度和这段区间的高度值。不过在pushup的时候,只有左孩子和右孩子都相同时候,才更新当前的区间高度,因为我们要维护的是这段区间确切的高度值,而不是最大值或最小值。这样,只需要边输入边累加答案即可。总的时间复杂度为O(NlogN)。3.代码:#include#includ
2015-10-15 17:16:23
829
原创 UVa11987 Almost Union-Find
1.题目描述:点击打开链接2.解题思路:本题利用并查集解决。唯一一个和普通的并查集不太一样的操作就是题目中的操作2,要求将p从它所在的集合中移出,移到q所在的集合。这就提示我们不要让数字本身作为该并查集的树根。因此,我们可以统一把树根都设置为i+n,这样,就可以保证每个数字不会成为并查集的树根了。那么对于操作2,先执行x=findset(p), y=findset(q)。只需要令pa[p]=y
2015-10-14 13:41:46
445
原创 LA3357 Pinary
1.题目描述:点击打开链接2.解题思路:本题要求找第k个满足题意的01串。演算后会发现,每一位的1首次出现的下标恰好就是斐波那契数列,比如,第0位的1在第1次出现,第1位的1在第2位出现,第2位的1在第3次出现,第3位的1在第5次出现。。这样,我们可以提前预处理出来这个位置数组。接下来,只需要不断地查找刚刚不超过k的那个位置p,则这一位就是1,并且更新k=k-a[p]。其中a[p]就是第p位的
2015-10-14 00:27:32
442
原创 UVa10883 Supermean
1.题目描述:点击打开链接2.解题思路:本题是杨辉三角的应用。演算后不难发现,n个数相乘,每一项的系数就是第n-1行对应的杨辉三角的系数。不过考虑到这里的n会非常大,因此不能直接计算出对应的组合数,而是需要事先取自然对数,最后累加答案的时候再恢复出来。3.代码:#include#include#include#include#include#include#include
2015-10-13 23:22:10
440
原创 例题2.5 数字和与倍数 UVa11361
1.题目描述:点击打开链接2.解题思路:本题属于数位dp型问题。根据题意描述,不妨设f(x)表示区间[0,x)中符合条件的个数。那么最后的答案就是f(b+1)-f(a)。问题转化为如何计算f(x)。根据加法原理,我们可以逐位统计。根据题意,假设x一共有nd位,从高到低分别为digits[0],digits[1],...digits[nd-1]。那么,我们尝试从高到低填写每一位数,比如当前在
2015-10-13 20:55:17
506
原创 LA 5092 Permutation Counting
1.题目描述:点击打开链接2.解题思路:本题就是Eulerian Number,《具体数学》中有讲解。也可参考维基百科中的链接:点击打开链接 设f(n,k)表示1~n的排列中有k个欧拉数的方案数。那么有如下递推式:f(n,k)=(1+k)*f(n-1,k)+(n-k)*f(n-1,k-1);不含n的排列中:如果在该排列的升序或者该排列的开始位置插入n,那么k值不变。如果在降序或者最后位
2015-10-13 12:07:46
509
原创 LA 4064 Magnetic Train Tracks
1.题目描述:点击打开链接2.解题思路:本题利用减法原理解决。根据题意,我们可以尝试寻找钝角三角形的个数,那么只需要从C(n,3)中把这部分减掉,就是最后的答案了。注意到钝角三角形的特点是最大的角度大于90度小于180度。我们可以先让每个点都当做一次坐标原点,计算出其他点相对于该点的极角,并把这n-1个从小到大排序,那么非法的情况实际上是介于(90,270)之间的极角,这个很容易通过二分搜索查
2015-10-12 23:46:19
360
原创 UVa5846 Neon Sign
1.题目描述:点击打开链接2.解题思路:统计每个点的黑色边ai,那么结果就是C(n,3)-0.5*sum{A{i]*(n-1-A{i])}。3.代码:#include#include#include#include#include#include#include#include#include#include#include#include#include#i
2015-10-12 22:19:55
434
原创 UVa11038 How Many O's?
1.题目描述:点击打开链接2.解题思路:本题要求统计区间[m,n]中0出现的次数。可以利用加法原理,乘法原理来解决。不妨设solve(x)表示区间[0,x]中,0出现的次数。那么该如何计算这个函数呢?我们可以考虑逐位统计。设当前在第cur位,那么cur左边的数构成一个整数left,cur右边构成的整数为right,位数为k。根据乘法原理,如果第cur位不是0,那么left可以取[1,left]
2015-10-12 16:08:03
384
原创 hihoCoder 1242 MX Loves Game
1.题目描述:点击打开链接2.解题思路:本题要求用最少的次数将A矩阵变成B矩阵,每次操作可以选择2行或2列进行交换。如果无解,输出-1。注意到题目中提到的性质:每一行或每一列都是1~n的一个排列。因此无论怎么交换,最终仍然是每行每列都是1~n的一个排列。那么,我们可以考虑先把第一行变得完全相同。首先,交换操作可以不必真的进行,可以实现用row[i]表示第i行实际对应的行编号,最初时候row
2015-10-11 22:40:45
696
原创 习题7-14 小木棍 UVa307
1.题目描述:点击打开链接2.解题思路:本题是一道非常经典的回溯法+剪枝的搜索题目。根据题意,我们可以注意到有下面4处重要的剪枝:(1)把所有的木棍从大到小排序,优先使用长木棍,这样可以加快组合速度,而且对后面的剪枝有帮助。(2)在枚举可能的长度时候,范围在[maxlen,sum/2]之间,如果都没有,那么答案只能是sum。(3)拼出的木棍长度一定是sum的约数。(4)在dfs
2015-10-11 00:05:30
1221
原创 例题9-27 方块消除 UVa10559
1.题目描述:点击打开链接2.解题思路:本题属于区间dp型问题,不过在设置状态的时候不是特别容易。根据题意,方块的消除必须是一串相同颜色的才可以进行。因此,按照以往的经验,我们设dp(i,j)表示i...j之间的最大得分。那么,有2种方法:1.找到从j开始向左延伸到p,那么直接把p...j这一段消除。2.从i开始向右延伸到q,且a[q]==a[j], a[q+1]!=a[j]。这样,中间的q+
2015-10-10 20:23:28
954
原创 例题9-25 轻松爬山 UVa12170
1.题目描述:点击打开链接2.解题思路:本题属于区间dp类问题,根据题意,我们需要修改1到n-2之间的一些h的值,使得相邻2个h值差的绝对值不超过d。因为可以修改的数是一个实数,无法一一枚举,因此需要仔细对问题进行分析。首先,考虑只有3个值的情况:h1, h2, h3。那么根据题意,h2应该在区间[h1-d,h1+d]和[h3-d,h3+d]之间,即h1应该在[max(h1,h3)-d,m
2015-10-10 16:03:01
1339
3
原创 HDU 2196 Computer
1.题目描述:点击打开链接2.解题思路:本题是经典的树形dp问题:求一棵树上每个结点的最远点的距离。这个问题可以用如下的方法解决:首先随意选择一个点作为根结点进行dfs,求出所有点到根结点的最远距离的那个结点,假设是p,接下来以p树根,再进行一次dfs,求出最远的点q,那么p-q就是树上的直径。并且可以证明,所有点的最远点要么是p,要么q。详细的证明可以参考如下链接,这样整个问题就可以在O(N
2015-10-09 23:51:15
296
原创 UVa 1709 Amalgamated Artichokes
1.题目描述:点击打开链接2.解题思路:这是今年World Finals 的最简单的题。因为给的时间相当的宽,所以只需要提前计算出最大值后,用ans=max(mx[i-1]-y[i])更新答案即可。3.代码:#include#include#include#include#include#include#include#include#include#include
2015-10-09 22:29:00
827
原创 LA 4394 String painter
1.题目描述:点击打开链接2.解题思路:本题是区间dp类的问题,根据题意描述,要求我们把给定的A串变成B串,每次操作时候可以选一段区间,然后将这个区间都刷成同一个字符,询问最少需要多少步。按照以往的经验,我们可以设dp(i,j)表示把字符串A中的i...j变成字符串B中的i...j需要的最少步数。多次尝试后可以发现,如果我们刷同一个字符串,一定是希望刷的越长越好。根据题意不难得知长区间的结果依
2015-10-08 23:10:31
556
原创 LA4015 Caves
1.题目描述:点击打开链接2.解题思路:本题属于树形dp问题,根据题意,我们会发现机器人在走的时候,需要在出发点,经过的点数以及是否返回到出发点这三条确定时候,才能完整的计算出走过的长度。因此,不妨令(u,k,flag)来表示从u出发,遍历了k个点(包括u自身),是否返回这样一种状态。这样,在遍历完u的子树的时候,可以用下面的方程来更新u:dp(u,i,1)=min{dp(u,j,1)+d
2015-10-08 19:37:00
753
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人