自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 三分查找

算法分析 二分查找是利用了函数的单调性,通过不停二分状态直到找到合适的值,但是如果遇到凸性或者凹性函数这种方法就不使用了,这时候就需要三分法了。 *hint:三分函数不仅适用于凸函数,还适用于所有单峰函数。所谓单峰函数就是先严格递增后严格递减(此时存在唯一的最大值),或者先严格递减后严格递增(此时存在唯一的最小值)。具体理解还是自己画一个抛物线理解一下,其实很简单,看了一会就理解了。三分

2016-10-31 20:47:15 287

原创 POJ Space Elevator(排序+多重背包)

题目分析 好久没有写背包了,因此找了一个多重背包练一下,因为多重背包是01背包和完全背包的结合,手生,写了有一会!!! 就是给你一下砖块,每一个砖块一个高度,给出数量和这样砖块最多能放的高度。。 这道题因为每个点的限制不一样,所以需要从限制小的先进行dp,因为限制大的可以放在限制小的上面,但是限制小的无法再往大的上面堆,这样就算错了。。#include <cstdio>#incl

2016-10-31 16:33:51 575

原创 POJ 2923 Relocation(状态压缩+背包思想)

题目分析 因为是判断2辆车能够运多少次才能把所有的物品给运完,因为物品数不够多,因此可以枚举状态,判断每个状态能否由2辆车给运完,这里面可以用01背包的思想进行判断,然后自己就可以通过状态压缩写出状态转移方程,很明显dp[(1<<n)−1]dp[(1<<n)-1]就是答案。#include <cstdio>#include <cstring>#include <iostream>#inc

2016-10-31 12:23:31 546

原创 POJ 2186 Popular Cows(强连通分量)

题目分析 就是找所有牛都认为是红人的牛的个数,一看就知道是强连通分量按拓扑排序之后标号最大的那个,然后根据反向遍扫一遍看看是否能够把所有点都跑一边,如果可以,说明编号最大的那个强连通分量中所有节点都可以被所有人都看做红人。#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <al

2016-10-31 11:23:42 297

原创 HDU 5938 Four Operations(2016年中国大学生程序设计竞赛(杭州))

题目分析 吐槽:上面一篇博客怎么没法继续写了!!搞完现场赛自己花时间搭一个!题目分析 首先我们要让减号后面的要小,因为我们长度大于6是选用最后三位做减乘和除,但是当长度等于6的时候有可能不成立,比如111991。剩余的瞎搞就可以了。。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>

2016-10-30 21:51:39 314

原创 2016年中国大学生程序设计竞赛(杭州)

hdu ArcSoft’s Office Rearrangement 这道题做了好久未果,我感觉好难,为啥好多人都做出来了,自己就很气,发现自己发现合并只能与相邻的砖块合并,好气呀!!赛后补题用了2种方法去做它用于解气。 第一种方法纯模拟,如果当前值大于平均值直接分裂,多余的部分给右边,因为是从左往右进行的。注意用long long,不然估计又要哭一天!!!#include

2016-10-30 21:46:19 477

原创 HDU 5950 Recursive sequence(2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))

题目分析 这道题可以推得:fn=fn−1+2fn−2+n4f_n = f_{n-1} + 2f_{n-2}+n^4,因为n很大,明显可以用矩阵快速幂。但是我们会发现状态转移方程与n有关,这样我们需要利用二项式展开 n4=(n−1+1)4=C04(n−1)4+C14(n−1)3+C24(n−1)2+C34(n−1)1+C44(n−1)0n^4 = (n-1+1)^4 = C_4^0(n-1

2016-10-30 18:43:50 481

原创 HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)

题目分析 这道题看样子没有什么办法,主要就是有策略的暴力,因为每个点连接的点不超过20个,那么就可以直接进行暴力,但是这样会有很多重复,因此需要剪枝,具体情况就是每次搜过一个点之后就把这个店连接的所有边都删除,这样就跑的很快了。。 #include <cstdio>#include <vector>#include <cstring>#include <iostream>#inc

2016-10-30 18:08:55 1497

原创 HDU 4549 M斐波那契数列(矩阵快速幂+快速幂+欧拉降幂)

题目分析 这道题就是给a,b,n,让你求最后的结果,先找规律,多写几项就会发现a和b的指数是菲波那切数列,但是指数太大,axbymod1000000007a^xb^y \mod 1000000007这样还需要运用欧拉降幂得到ax mod1000000007by mod1000000007mod1000000007a^{x \ mod 1000000007} b^{y \ mod

2016-10-28 15:40:14 823

原创 2016弱校联盟十一专场10.5---As Easy As Possible(倍增)

题目分析 从没有用过倍增,但是感觉很巧妙,让我感受到了算法的魅力,主要就是一个思想dp[i][j]表示i前面(1 << j)对应的字母的位置,这样写过ST表的同学应该就差不多应该懂了,dp[i][j]=dp[dp[i][j−1]][j−1]dp[i][j] = dp[dp[i][j-1]][j-1],这样很容易就推出来了。#include <cstdio>#include <cstring>

2016-10-28 13:13:01 359

原创 2016弱校联盟十一专场10.5 F Fibonacci of Fibonacci(矩阵快速幂+找循环节)

题目分析 这道题第一步肯定是找循环节,因为要求的是FnF_n,但是这里的n = FnF_n,因此需要求循环节,其实就是用map处理一下而已,会发现循环正好是从(0,1)开始的为26880696,这题求余给的数很巧!!然后就可以先对下标进行矩阵快速幂,得到一个数之后再对上面进行矩阵快速幂即可。#include <cstdio>#include <cstring>#include <iostr

2016-10-26 21:00:17 222

原创 2016弱校联盟十一专场10.5 I Increasing or Decreasing(数位dp)

题目分析 这道题就是给你2个数,让你求在这2个数之间单调不减或者单调不增的数的个数,定义状态dp[i][j][k],i表示数的第I位,j表示当前位的前一位数字的多少,k则表达三种意思,k等于0时表示这个序列目前是单调不减的,k等于1表示是单调不增的,k等于2表示目前并没有确定这个序列到底是的单调性,也是就说前几位数是相等的,或者前几位数全为0.这样就可以通过dfs写出状态转移方程,注意不合理的状

2016-10-26 20:52:34 366

原创 HDU 4283 You Are the One(区间dp)

题目分析 其实就是出队入队问题,考虑如何出队入队才能让屌丝值最少,无语(写道题还虐单身狗!!)。状态转移方程不好想,具体看代码吧!!#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 105;const int I

2016-10-26 15:47:53 275

原创 POJ 1182 食物链(种类并查集)

题目分析 这道题主要有三种关系,就是A吃B,A被B吃,还有就是A与B是相同类型的。因此我们可以用一个数组re[]来表示与父根之间的关系,当值为0时这个表明当前该动物与父根动物是同一类型,如果为1那么该动物被父根动物吃,如果为2表明该动物可以吃父根动物,因此依赖关系就建立起来了。 对于每次询问如果这2个动物在一个并查集中,那么只需要判断一下即可,如果不在同一个并查集中那么需要建立关系。具体开

2016-10-26 13:10:12 438

原创 Problem D Parentheses

题目 Problem D Parentheses Input: Standard Input Time Limit: See AtCoder Dave loves strings consisting only of ‘(’ and ‘)’. Especially, he is interested in balanced strings. Any balanced strings can

2016-10-24 19:19:23 277

原创 Problem E Similarity of Subtrees

题目 Problem E Similarity of Subtrees Input: Standard Input Time Limit: See AtCoder Define the depth of a node in a rooted tree by applying the following rules recursively: • The depth of a roo

2016-10-24 19:14:30 251

原创 POJ 2449 Remmarguts' Date(A* + spfa)

题目分析 本题就是求k短路,其实自己也没有学过A*算法f[x]=g[x]+h[x]f[x] = g[x]+h[x] 在本题中g[x]为估价函数,表示从x点达到目标点的距离,注意g[x],小于等于真实值,因此这样就可以用spfa跑一边最短路即可,至于h[x]表示到达当前点x的代价,很明显这个在运算的时候可以得到,这样就可以构建一个优先队列求解了。h[x]+g[x]小的先出队,并且用一个计数的

2016-10-21 12:03:28 192

原创 HDU 5441 Travel(2015 ACM/ICPC Asia Regional Changchun Online)

题目分析 这道理第一感觉就是暴力,但是数据量实在太大,但是我们可以有策略的暴力,这道题我的方法就是先排序再暴力,首先我们可以对于距离进行排序,然后我们离线处理q次询问,同样的方法对于q此询问的距离进行排序(注意存标号)。然后用并查集处理即可,即可方法见代码。#include <cstdio>#include <vector>#include <cstring>#include <iost

2016-10-20 15:57:21 192

原创 codeforce 251 A(二分或者尺取法或者单调队列)

二分#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL long longconst int maxn = 1e5+100;LL a[maxn];int main(){ LL n, d; while(scanf("%

2016-10-19 19:49:48 335

原创 Technocup 2017 - Elimination Round 1 A题

吐槽 今天真的是蠢哭了,A题错了2个小时,很强势。主要原因在于我认为这道题不用long long存也可以,但是事实并不是这样的,不用long long中途可能会tle,re,我用了深搜和广搜2种方法去写,但是还是写不出了,第五组错了,赛后数据一看,第五组是一个大数据,我发现了问题,改成long long后过了。留个文章提醒自己。。。DFS版#include <cstdio>#include

2016-10-15 20:42:13 669

原创 HDU 5908 Abelian Period

题目分析 这道题告诉我们虽然是暴力题目但是仍然要有策略的暴力,首先这道题写的时候利用hash的思想存储一段中每个数出现的次数。然后利用了素数筛法的思想,具体看代码吧。这道题是BC的b题,难度肯定是不大的,因此也不需要下特别多,拿过来瞎搞就可以了。#include <cstdio>#include <cstring>#include <iostream>#include <algorith

2016-10-15 16:33:23 309

原创 POJ 3744 Scout YYF I (概率dp+矩阵快速幂,好题)

题目大意 本题很容易求出状态转移方程dp[I]=p∗dp[I−1]+(1−p)∗dp[I−2]dp[I] = p*dp[I-1]+(1-p)*dp[I-2],但是很容易发现这道题的n很大,线性算肯定是不可能,因此利用矩阵快速幂加速无疑是最好的方法。这道题相当于有N个不能过的点,那么我们把不能过的点的概率算出来,用1减去它就可以得到该点的后一个点的dp[i],然后乘以矩阵快速幂得到的结果即可。#

2016-10-15 11:29:28 294

原创 HDU 4507 吉哥系列故事――恨7不成妻(经典数位dp,好题)

题目分析 让你求与7无关的数的平方和,第一个条件不含7,那么我们在dfs进行深搜的时候遇到这种情况直接continue掉,关于第二个和第三个条件都很简单,只需要在状态中加2维,并且在状态转移中添加上即可。但是这些都不是重点,本题让你求与7无关的数的平方和,刚开始看到求得这个东西内心是崩溃的,但是你要想到数位dp是按位进行求解的,因此肯定是一位一位去求,并且将深度较大的节点的值传给深度较小的递归求

2016-10-14 15:39:06 476

原创 数位dp回顾以及自己一些的小想法

回顾 对于网络赛和多校联合集训时候出的数位dp的题目看了题解能很快A出来,但是自己写的时候就有很多问题,于是自己有重新看了以前做的一些题目,有了一些很好的想法,写这篇博客的目的一是总结经验,二是给跟我一样还在迷途中的人一些指导。 这里我就拿hdu3555Bomb为例说一下我自己的想法,对于数位dp我就用dfs的写法,这个写法简便且容易理解。对于数位dp我感觉最重要的就是定义状态转移方程,但

2016-10-14 13:44:21 288

原创 HDU 5925 Coconuts(离散化+bfs, 好题)

题目分析 求联通块但是R和C很大,用bfs很明显会超时,因此需要对其进行离散化,这一点我在我的前几篇博文中提过,但是本题还涉及到一个新的知识点,离散化之后还需要知道每个连通块中cell的个数,因此还需要一点小技巧,就是利用2个数组存储中间值。#include <map>#include <queue>#include <cstdio>#include <cstring>#include

2016-10-13 12:17:24 303

原创 HDU 5927 Auxiliary Set(dfs+逆向思维)

Auxiliary Set 这道题本来以为是dfs序加上一些数据结构处理的,但是我看到一个点就没有了这种想法。大家可以发现q次询问每一次就相当于重新给了条件,给出不重要的点,这种如果用刚才的思想处理的话很明显是行不通的,因为刚才的思想需要根据dfs序来构建线段树然后进行求解很明显会超时,我想到了从子节点递推父节点,但是自己从没有做过类似的题目有了这种想法不知道怎么处理于是看了题解,果然是这样的。

2016-10-12 21:18:48 355

原创 区域坐标离散化

个人感想 经过了这次网络赛我知道了基础技巧的重要性,从挑战程序设计上一直在看常用技巧,包括尺取法,双向搜索等等。看了挑战程序设计的164页坐标离散化之后特写篇博文来终结一下。算法分析 首先对于一个很大的区域但是障碍很少的情况下直接进行广搜是很不合理的,因此我们需要对区域坐标进行离散化缩小区域,然后进行广搜,这样会大大减少时间复杂度。很明显这个区域里面有n条直线,那么我们需要将这条直线上的2

2016-10-12 10:27:41 878 1

原创 HDU How to Type(简单dp)

题目分析 好久没有刷dp,从别人写的dp题中随便拉了一题写了一下,发现不难。状态主要用dp[N][2], dp[i][0]表示处理到第I位并且现在开caps需要的最小次数, dp[i][1]表示处理到第I位并且现在开caps需要的最小步数。状态转移显而易见,看我的代码即可。#include <vector>#include <cstdio>#include <cstring>#inclu

2016-10-10 21:17:50 314

原创 POJ 3281 Dining(用当前弧优化的Dinic算法)

题目分析 这道题给出N头牛,F种食物,D中饮料,每头牛只能对应特定的饮料和食物,我们要求出最多的牛都能得到对应的饮料和食物,并且饮料和食物不能重合。我想网络流算法即使抄模板大家也会写,但是本题建图同样是一个很大的问题,想了半天无果。。。。果然是弱弱!! 然后看了一下题解,本题建图很巧妙,不怎么好想,建图过程是这样的,建立一个源点和一个汇点,源点指向食物,食物指向牛,牛指向饮料,饮料指向汇点

2016-10-10 11:11:21 407

原创 最大流算法之Ford-Fulkerson

最大流算法 该算法的核心就是找建立残余网络并且找增广路,挑战程序设计上讲的很清楚,其实找增广路就是看有没有一条路径可以从起点走到终点的路径,如果没有那么肯定就不存在增广路了,那么此时找到的流就是最大流。HDU 1532 Drainage Ditches#include <cstdio>#include <cstring>#include <iostream>#include <algo

2016-10-09 23:47:40 402

原创 answer

2016年网络赛结束有一段时间了,中间隔了一个国庆假期才来做总结,感觉自己很懒散和怠慢,但是还是想发一发牢骚,毕竟不知道下一年还会不会搞ACM,因此自己在这里也做一个一年的小计。 从2014入学一直在搞ACM,就是因为听了一些学长励志的故事,虽然他们在区域赛上折戟,但是还是让我对ACM充满了向往,也希望自己能扛起ACM这面大旗。但是到现在看来自己还是一无所获,只拿到了青岛赛区的名额(还是外卡)。

2016-10-09 22:00:12 213

原创 欧拉回路算法学习

欧拉回路 定义: 给定无孤立结点图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。 无向图: 图连通,所有点都是偶数度,或者只有两个点是奇数度。当所有点是偶数度时欧拉路起点可以是任意 点;当有两个奇数度点时起点必须是奇数度点。 有向图: 图连通,所有点出度=入度,或

2016-10-09 13:18:11 992

原创 codeforces 723 A,B,C,D

A - The New Year: Meeting Friends 水题,中位数。。。#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int main(){ int a,b,c; while(scanf("%d%d%d", &a, &b, &c) != EOF){

2016-10-08 20:50:03 469

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除