自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Arthur的专栏

Always challenge miracles!

  • 博客(13)
  • 收藏
  • 关注

原创 HDU 2337 Escape from Enemy Territory(BFS+二分优化)

该题比普通的BFS多加了一些限制条件。  一个是:首先要满足在这条路径上距离敌人的最近距离尽量大。 第二个是:路程尽量最短。最短路当然是BFS求, 可是怎么确定这个最近距离呢?   我一开始搞了个优先队列, 按照这个值从大到小排序, 可是后来yy了一下,发现是不对的, 因为当前最大,不一定后来还是最大的路径, 所以会丢失最优解 。后来想了一个方法:再开一个数组记录之前经过这个点的最近距离,

2015-11-27 22:41:56 843

原创 Codeforces Round #297 (Div. 2) E. Anya and Cubes (双向DFS)

首先思考最暴力的方法: 我们用DFS直接搜索所有可能解, 那么对于每一层,有3种决策: 不选这个数, 选择这个数, 选择这个数的阶乘。  递归深度最大25, 时间复杂度O(3^25), 太大了, 要想办法降低时间复杂度。   还记得之前的简化版吗?  我们在四个集合中每个集合选择一个数字相加,问是否等于一个数S, 我们的方法是预处理两个集合中所有的情况,然后二分。  该题也可以采取相同的策略: 进

2015-11-25 22:20:54 842

原创 Codeforces Round #317 A. Lengthening Sticks(组合+容斥)

之前也遇到过好几次这种类型的题目了, 但是这次还是没有在比赛中做出来。因为输入只有4个数, 可变化的状态很少, 但是数据范围又很大, 所以不可能是DP之类的, 一定是一道数学题。   这种特点的题目我们很容易想到排列组合, 然而排列组合往往又会带来重复计数的问题, 所以往往这类题目又需要夹杂容斥定理, 可以说是约定俗称的题目类型。那么不难想到, 用总的组合情况减去不成立的情况(不成立的情况

2015-11-25 19:37:21 727

原创 HDU 2874 Connections between cities(LCA离线算法)

该题用离线算法的时候要注意会MLE, 内存卡的很紧, 所以要想办法优化内存, 利用存储边的数组就行了。 LCA是利用了并查集在树上进行的操作, 由于该题可能不形成一棵树,所以要对所有子树进行LCA。 然后不在一个集合中的两个点不能联通。细节参见代码:#include#include#includeusing namespace std;typedef long long ll;

2015-11-20 16:57:39 956

原创 HDU 2586 How far away ?(LCA)

该题是一道比较基础的LCA(最近公共祖先),也就是快速求出树上任意两个点的最近公共祖先, 然后顺便维护边权值(每个结点到root的距离),就可以快速求出任意两个结点的距离了。细节参见代码:#include#include#include#include#include#include#includeusing namespace std;typedef long long

2015-11-17 22:41:54 620

原创 ACM 2015 亚洲区域赛北京赛区A题(二分)

该题方法就是二分, 二分R,然后在判断函数中判断在枚举点左边的绿洲面积。  这样做的复杂度是O(nlogR)。但是一开始WA了一发,后来才发现原来是因为有这样的数据:一块很大的沙漠中只有一个边长为1的小正方形绿洲。这样的数据答案是R。  所以我二分出来之后再向右推一下,直到不符合条件为止。下面是我AC代码, 二分求的上界,求下界应该更快,请读者自己实现。细节参见代码:#includ

2015-11-16 22:42:20 1175

原创 Asia Regional Contest, Tokyo,Problem C Shopping

贪心。不难证明,如果两个区间有交集,那么最好的方法是走完这些区间的并再掉头。  也就是说,处理出所有相交的区间组成一个更大的区间,然后对于这些区间,答案要加上两倍的区间长度。  然后最后再加上整条街的长度即可。细节参见代码:#include#include#include#include#include#include#include#include#include#

2015-11-16 22:32:55 511

原创 CodeForces 483B Friends and Presents(二分+容斥定理)

该题比赛的时候没能想到用二分优化,一直超时。    其实答案是一个单调函数, 对于一个答案m,如果m不符合条件,那么小于m的都不符合,反之亦然。所以我们可以直接二分答案,然后关键是判断。    通过观察,可以发现,对于答案m,能被x除尽的个数是m/x,能被y除尽的个数是m/y。 那么可以用来给f1(朋友1)的个数就是m-m/x,用来给f2的个数就是m-m/y。但是还要注意两者都能除尽的个数是m

2015-11-14 10:02:21 662

原创 HDU 4739 Zhuge Liang's Mines(DP)

该题一开始没想出怎么暴力, 其实我们可以先预处理出来所有的可能正方形,存到一个vector里,然后用dp的思想就行了。因为最多只有20个点,所以我们可以状态压缩一下,然后状态转移就是d[S] = max(ans,dp(ss)+4);   如果当前这个正方形所组成的点完全在S中,那么ss就是S去掉这四个点后的状态,如此转移就可以了。细节参见代码:#include#include#in

2015-11-10 22:39:23 608

原创 HDU 5497 Inversion(树状数组)

树状数组好题。   我们都知道可以用树状数组求一个序列的逆序数,但是之前一直没有深刻理解为什么要用树状数组,通过该题可以知道,我们正确的思维应该是先面对一个问题,然后思考如何解决问题,然后才能对其中遇到的困难有一个深刻的认识,然后就能知道为什么需要这样解决,为什么要用树状数组。因为我们需要这样的数据结构。该题要求删去一个长度为m的连续序列后逆序数最小值。由于长度是固定的,所以由滑动窗口我们

2015-11-09 22:16:03 862

原创 HDU 4455 Substrings(递推+优化)

该题是一道极好的递推+优化的题目(有很多人喜欢把递推归为DP,其实递推不具备DP的特点)。因为对于每一个序列都要多次查询,每次查询长度为w的连续子序列中不同元素之和。  一开始确实没想到用递推,经验太少吧。  如果我们用d[i]表示长度为i的答案,那么由于子序列是连续的,所以d[i]和d[i-1]是有很大关系的。 首先很容易看出,d[i]的子序列比d[i-1]少一个,很容易发现,少了d[i-1

2015-11-09 20:45:43 560

原创 UESTC 1132 酱神赏花 (用数据结构优化DP)

该题和紫书上的一道题很相似,都是用滑动窗口来优化DP。  紫书上题目见这里:点击打开链接      该题链接:点击打开链接该题也是需要利用滑动窗口优化的。   首先我们很容易想到这样的状态表示:d[i][j]表示第i朵花展出时,酱神在位置j处时的最优解。  那么我们首先按照时间从小到大排序,这样相离两个时间差乘以速度,就可以知道每次酱神能走的位置范围,然后状态转移过去就行了d[i][j] =

2015-11-05 15:03:02 1577

原创 UESTC Pick The Sticks (背包变形)

该题是15年CCPC的D题,背包变形,昨天队内组队赛和队友搞了出来 。 各种超时,能优化的地方都搞了才勉强过,应该是姿势不太对。细节参见代码:#include#include#includeusing namespace std;typedef long long ll;const double eps = 1e-6;const int INF = 1000000000;co

2015-11-01 10:54:48 932

空空如也

空空如也

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

TA关注的人

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