自定义博客皮肤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!

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

原创 Manthan, Codefest 16 D. Fibonacci-ish(暴力)

题目链接:点击打开链接题意:给你n个数, 问最长的题目中定义的斐波那契数列。 思路:枚举开始的两个数, 因为最多找90次, 所以可以直接暴力, 用map去重。  注意, 该题卡的时间有点厉害啊, 用了两个map结果超时。细节参见代码:#include#include#include#include#include#include#include#include#in

2016-02-28 21:38:13 1621

原创 UVA 11389 - The Bus Driver Problem(二分or暴力)

题目链接:点击打开链接题意:n个老司机, n个下午路线,n个晚上路线, 要求给每个老司机分配一个下午路线和一个晚上路线, 使得每条路线恰好被分配给一个老司机, 且支付的加班费最少。思路:n太小了, 直接n^2暴力都行, 当然了可以用二分加速一下。 从小到大排序后, 从下午路线最短的开始, 找第一个大于等于d - a[i]的晚上路线, 如果都比d - a[i]小, 那么选择当前最大的一条,为

2016-02-26 14:06:13 1446 1

原创 UVA 11627 - Slalom(二分)

题目链接:点击打开链接题意:你有s个滑雪器具, 每个的下滑速度不同, 从高到低有n个门, 你的水平速度最大是v,求一个下滑速度最大的能够穿过所有n个门的器具。思路:将n个器具的速度排序, 这样就成了二分查找找上界。  判断是否能穿过所有门也很简单, 只要每次维护一个能滑到的最大范围就行了。细节参见代码:#include#include#include#include#inc

2016-02-25 21:24:35 2238 2

原创 HDU 5634 Rikka with Phi(线段树)

题目链接:点击打开链接题意:有3种区间操作, 1是把区间内的所有数变成它的欧拉函数值, 2是把区间所有数都变成一个数x,3是查询区间和。思路:后两个操作就是线段树的区间修改和求和, 没什么好说的。 题解说用平衡树(弱不会), 不过大致思路线段树同样可以维护, 因为一个数进行最多phiO(logn)次就会变成1, 所以我们可以在递归结束,向上传标记的时候顺便看看其子区间是不是都等于1,

2016-02-25 13:58:22 1499

原创 UVA 1422 - Processor(二分+优先队列+贪心)

题目链接:点击打开链接题意:有n个任务, 每个任务必须在[r,d]时间段内完成, 任务量为w, 求最小执行速度, 使得可以在规定时间内完成所有任务。思路:二分通常要和贪心搭配, 显然, d越小的, 应该优先完成, 所以我们可以用一个优先队列来维护这个信息, 然后枚举每一个时刻, 看看应该先执行那个程序。细节参见代码:#include#include#include#inclu

2016-02-25 12:37:50 1352

原创 UVA 1267 - Network(贪心DFS)

题目链接:点击打开链接题意:一开始只有一个结点上有一个服务器, 为了让所有叶子结点距离服务器的距离不超过k, 我们在非叶子结点上添加服务器, 问最少添加多少服务器。思路:贪心。 将第一个服务器所在结点作为根结点, 向下拓展, 记录父子关系, 将叶子结点的深度排序, 从最深的结点开始向上找k个距离的父节点, 安装服务器, 并进行一次DFS, 将所有距离它不超过k的结点标记。细节参见代码:

2016-02-24 13:31:48 1138

原创 UVA 12124 - Assemble(二分)

题目链接:点击打开链接题意: 给n个组件来组装电脑, 每个组件有4个属性:种类、名称、价格、品质。 要求每种组件买一个, 求在不超过预算的情况下, 品质最低的品质尽量大。思路:很显然, 二分最低品质, 然后判断是否可行, 属于二分找上界,在二分时有一个小技巧用来处理当区间相差1时的情况。细节参见代码:#include#include#include#include#incl

2016-02-24 00:01:37 2006 2

原创 Codeforces Round #343 (Div. 2) (C. Famil Door and Brackets(DP))

题目链接:点击打开链接题意:给你一个长度为m的只含()的括号串s, 要求在s两端在加两个串p和q, 使得总长度为n,并且平衡, 平衡是指任意前缀串的(都不少于), 并且整个串的(和)一样多。思路:我们不难想到这样一个DP, d[i][j]表示长度为i的串,(比)多j个(或者)比(多j个, 是等价的)的方案数。  那么转移很简单:if(j > 0) d[i][j] += d[i-1][j

2016-02-23 17:27:11 1296 1

原创 Educational Codeforces Round 8(E. Zbazi in Zeydabad(树状数组优化))

题目链接:点击打开链接题意:一个n*m矩阵, 里面的格子除了'z'就是'.',问有多少个z形图案。思路:因为n和m很大, 即使n^3复杂度也会超时。  如果按照最朴素的方法, 我们可以处理一下前缀和, 处理出一个格子向左l[i][j]、向右r[i][j]、斜向左下lr[i][j]连着的z到哪里为止, 这样我们用n^2复杂度枚举每一个格子作为z形图案的右上角,取min(l[i][j], lr

2016-02-22 21:24:58 1704 1

原创 Educational Codeforces Round 8(D. Magic Numbers(数位DP))

题目链接:点击打开链接题意:给一个m一个d, 一个字符串a和b, 问在[a,b]范围内, 有多少个可以整除m的魔法数, 魔法数的定义是, 偶数位上都是d, 奇数位上都不是d。思路:据说是典型的数位DP, 以前没做过数位DP, 感觉和DP差不多?用d[i][j][p]表示当前到了第i位, 余数为j, p == 1表示目前和b串相等, p == 0表示已经比b串小了。  每次枚举第i位上放

2016-02-21 22:31:33 1529 1

原创 Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(线段树+离散化优化DP)

题目链接:点击打开链接题意:给出n个圆柱体的地面半径和高, 要求只能有一个直接放在桌子上, 其他的要放在他上面, 第i个能放在第j个上面的条件是:当且仅当第i个的体积大于第j个且j 思路:一看就是一个DP, 而且状态很容易表示, d[i]表示到第i个为止能得到的最大总体积。   转移到 max(d[j]) + a[i], (j a[j])。  但是n非常大, 显然要优化, 因为第二层循环

2016-02-21 14:27:34 1574

原创 8VC Venture Cup 2016 - Elimination Round F. Group Projects(DP)

题目链接:点击打开链接题意:给n个人, 让我们分成若干组, 每组的值是最大值减去最小值, 求所有组的和。思路:显然, 需要用DP的思想, 但是该题DP设计的非常巧妙, 而且状态转移的情况容易考虑不全。我们用d[i][j][v]表示考虑了前i个数了, 有j个组是开放的(所谓开放指的是只有最小值, 还没有最大值, 还可以进人), 当前值之和为v 的方案数。我们先排序, 这样, 对于开放

2016-02-19 22:06:12 1617

原创 HDU 2335 Containers(暴力枚举)

题目链接:点击打开链接题意:n个40X8的箱子, 要求建一个矩形场地来放这些箱子, 箱子间有已知大小的间隙, 最高可以放5层。 求场地的最小面积, 在此基础上尽量方。思路:设场地x列,y行, 那么x*y == (n+4)/5  所以x不会超过sqrt(n), 所以枚举x求y就行了。比赛的时候考虑到随着x的增加, 答案先变小后变大, 所以三分的, 但是样例都过不了, 后来才注意到是5层。

2016-02-19 15:50:38 1144

原创 HDU 1523 Decoding Morse Sequences(DP)

题目链接:点击打开链接题意:给出一个编码, 给n个单词的字典, 求有多少个字典中单词组成的语句可以编译成所给编码。思路:答案数很大, 我们不难想到要用动态规划的思想。   用d[i]表示到第i个编码为止的答案数, 那么起点就是d[0] = 1;  我们在第二层循环枚举n个单词的编码, 如果能匹配,就转移过去。细节参见代码:#include#include#include#in

2016-02-19 12:52:19 1258

原创 8VC Venture Cup 2016 - Elimination Round E. Simple Skewness(枚举+三分)

题目链接:点击打开链接题意:给你n个数, 要求选若干个数, 使得这些数的平均数减去中位数尽量大。思路:由于该题没有顺序问题, 排好序之后我们可以枚举中位数, 可以证明, 奇数个数一定比偶数优,然后三分中位数左右区间长度x(数的个数), 在中位数的右边选最大的x个数, 在左边也选最大的x个, 这样, 随着区间长度的增加, 平均数将先增大后减小, 或者一直减小,或者一直增大。为什么呢? 假

2016-02-18 11:20:06 1655 2

原创 UVA 10816 - Travel in Desert(最小生成树+最短路)

题目链接:点击打开链接题意:有n个绿洲, m条道路,每条路上有一个温度,和一个路程长度,从绿洲s到绿洲t,求一条道路的最高温度尽量小, 如果有多条, 选一条总路程最短的。思路:先生成最小生成树,按照温度排序, 当s和t联通的时候, 这个温度就是最高温度。  然后把其他温度小于等于这个温度的道路也加进图中, 跑一个最短路就行了。细节参见代码:#include#include#in

2016-02-16 15:13:49 1492

原创 UVA 10600 - ACM Contest and Blackout(最小生成树&次小生成树)

题目链接:点击打开链接题意:n个点,m条边,求最小生成树的值和次小生成树的值。思路:最小生成树就不说了, 如何求次小生成树:可以证明, 次小生成树一定是最小生成树加一条边然后减去一条边形成的。  所以只需要枚举减去最小生成树中的哪条边, 然后在此前提下再生成一遍最小生成树就行了, 复杂度O(n*m)。还有一种更好的方法:枚举要加入哪条新边, 在最小生成树上加入一条边u-v后,图上会出现

2016-02-15 21:24:06 2451

原创 UVA 11354 - Bond(并查集-按秩合并)

题目链接:点击打开链接题意:给出一张n个点m条边的无向图, 每条边有一个危险度,有q个询问, 每次给出两个点s、t,找一条路, 使得路径上的最大危险度最小。思路:首先,我们可以发现,如果求一个最小生成树, 那么任意两点, 在生成树上有唯一路径, 而且这条路径上的最大危险值一定最小。 但是n和q都太大, 如果直接顺着树走,每次询问最大复杂度O(n), 那么复杂度高达O(n^2),会超时。  

2016-02-15 16:14:32 3530

原创 UVA 1494 - Qin Shi Huang's National Road System(次小生成树)

题目链接:点击打开链接题意:n个城市,需要修建一些道路使得任意两个城市联通,还可以修一条魔法道路, 不花钱, 设魔法路连接的城市的人口之和为A, 所有道路总长为B, 求A/B的最大值。思路: 次小生成树。 先做一次最小生成树, 然后用dfs搜索出最小生成树上任意两点之间最长的道路长度。  然后枚举在哪两个城市之间建魔法道路。n^2复杂度。细节参见代码:#include#inclu

2016-02-14 21:01:01 1621

原创 Educational Codeforces Round 7 E. Ants in Leaves(DFS+贪心)

题目链接:点击打开链接题意:给出一棵n个结点的树, 每个叶子结点上有一只蚂蚁, 每秒每只蚂蚁可以向相邻结点走一步, 同一时刻同一结点上只能有最多一只蚂蚁(根结点除外),根结点为1, 求所有蚂蚁都移动到1上的最小花费时间。思路:很容易想到,采取贪心的思路就行了, 那么只要不断向上走就行了, 因为根结点比较特殊, 我们只考虑它的子树, 对于它的每一棵子树, 先dfs处理出所有结点的深度,然后对

2016-02-13 14:32:22 2093 2

原创 POJ 3666 Making the Grade(DP)

题目链接:点击打开链接题意:给n个数, 要求把这个数列变成非减或者非增数列, 求最小该变量之和。思路:

2016-02-12 19:56:16 2673

原创 UVA 10917 - Walk Through the Forest(最短路优化DP)

题目链接:点击打开链接题意:给你一个图, 从1走到2,求有多少种不同的走法,从结点a可以走到b的条件是:存在一条总b出发回家的路径,比从a出发回家的路径都短。思路:这个条件的意思其实就等价于从2到b的最短路比从2到a的最短路短。所以, 可以事先处理出从2出发到所有结点的最短路。 然后用DP进行计数就行了。细节参见代码:#include#include#include#in

2016-02-11 13:34:49 2318

原创 UVA 11374 - Airport Express(最短路)

题目链接:点击打开链接题意:某个人要从起点到终点, 有m个经济站和k个商业站, 只能乘坐一次商业站, 求最短时间。思路:因为多了商业站, 所以不能直接套用最短路, 但是注意到只有一次乘坐商业站的机会, 所以直接枚举坐哪个商业站就行了, 这样,其他部分就是最短路了, 假设商业站是从a到b,花费c,那么答案就是d1[a] + d2[b] + c, d1是从起点的最短路,d2是从终点出发的最短路

2016-02-11 12:54:09 2404 2

原创 BNUOJ 51275 道路修建 Large(并查集)

题目链接:点击打开链接题意:见链接。(中文题)思路:该题与普通并查集的不同之处在于,需要查询两个点最早联通的时刻。  我们不妨在结点上维护一些信息:假设结点v, 那么维护ans[v]表示v到父亲结点的时间。 然后查询的时候, 考虑到并查集是一个树形结构, 如果两个顶点联通, 两个顶点之间有唯一路径, 路径上边的最大值就是了。因为要维护这个关系, 所以显然不能路径压缩, 因为那样会破坏结

2016-02-10 14:40:11 1738

原创 UVA 10054 - The Necklace(欧拉回路)

题目链接:点击打开链接题意:n个珠子,每个珠子的两半由不同的颜色组成。 只有相同的颜色才能接在一起, 问能否组成一个一个项链。思路:如果将一个珠子看成是一条连接两个顶点的无向边,那么本题就变成了求无向图是否存在欧拉回路。  对于无向图, 如果所有点的度数都是偶数并且图是联通的, 那么就存在欧拉回路。   那么从任意一个点开始走都将走完所有道路并回到起点。细节参见代码:#includ

2016-02-09 21:23:16 3048

原创 UVA 10047 - The Monocycle(BFS)

题目链接:点击打开链接题意:从起点到终点,每秒可以选择前进、向左、向右转, 每前进一格轮子转到下一个颜色, 一共5中颜色, 开始的时候绿色接触地面,朝北, 要求最后也绿色接触地面,求能否到达目标点以及最短时间。思路:和普通BFS相比,多了两个附加条件,所以要将状态表示全面,也要对应加两维。 水题。细节参见代码:#include#include#include#include

2016-02-08 22:14:11 2103

原创 HDU 5623 KK's Number(DP)

题目链接:点击打开链接题意:两个人轮番从n个数中每次选择任意个数, 每次获得的分数是所选数种最小的,两人采取的策略都是使得自己的分数减去对方的分数尽量大, 求最终第一个人的得分。思路:昨天BC的C题, 因为每次可以选择若干个数, 所以普通的贪心肯定是不行的。 我们可以用d[i]表示还剩i个数时先手减去后手得分的最大值, 这样的话, 每次转移是:d[i] = max(a[j+1] - d

2016-02-07 14:32:53 2399

原创 HDU 5624 KK's Reconstruction(最小生成树)

题目链接:点击打开链接题意:n个城市, m条可以修建的路, 修每条路有一个费用, 要求修建路将n个城市全部联通,并且最大费用减去最小费用最小。思路:枚举最小边, 然后重新求一遍最小生成树,复杂度m^2, 出的数据水了, 左边BC水过了。。细节参见代码:#include#include#include#include#include#include#include#in

2016-02-07 11:25:12 2670

原创 lightoj 1422 - Halloween Costumes(区间DP)

题目链接:点击打开链接题意:有n个舞会, 每个舞会规定要穿哪个衣服, 衣服可以套着穿, 一旦脱下一件衣服, 再穿时要穿新的, 求最少要准备多少套衣服。思路:一开始手算了一下, 发现普通的贪心策略是行不通的, 因为可能情况太多, 那么显然这肯定是一道DP了, 只是没想到是区间DP, 找了很多状态都不对。问题的关键是, 如果有几件衣服都在不同舞会出现, 那么到底是选择哪一件衣服留到后边穿。

2016-02-05 17:11:49 1529

原创 ACM竞赛黑科技

以后将在这篇文章中陆续更新各种黑科技。手动扩栈:(G++编译器):#pragma comment(linker, "/STACK:1024000000,1024000000")

2016-02-05 11:44:32 2077

原创 HDU 5505 GT and numbers(GCD魔法)

题目链接:点击打开链接题意:给两个数n和m, n每次乘以它的因子变成一个新的值, 求最少乘几次可以变成m。思路:每次乘以的整数v有两个要求:1.它是n的因子;2.它要尽量大。又因为如果n能最终到达m,一定是乘以n的k倍, 所以只要n能被m整除, 那么每次取gcd(n, m/n)就行了。细节参见代码:#include#include#include#include#inc

2016-02-03 12:07:26 970

原创 Codeforces Round #226 (Div. 2) C. Bear and Prime Numbers(暴力)

题目链接:点击打开链接题意:给n个数, m次询问, 每次询问时一个区间[l, r]。 求这个区间中的所有素数,能被n个数中的几个数整除的累加和。思路:没想到什么好办法, 直接筛出素数以后直接暴力的,没想到跑的这么快。。最费时间的大概就是那个二重循环, 但是可能因为素数比较少, 所以实际的时间复杂度并不高。细节参见代码:#include#include#include#in

2016-02-02 13:10:04 1299

原创 HDU 5618 Jam's problem again (cdq分治+树状数组)

题目链接:点击打开链接题意:给n个点,求每一个点的满足xyz都小于等于它的其他点的个数。思路:经典的cdq分治+树状数组。  方法就是先按照x从小到大排序, 这样,x一定满足后面的大于等于前面的, 这样我们就可以不用管x了, 然后对y进行cdq分治,使得y满足关系, 在此基础上用树状数组顺便维护z坐标。  但是由于cdq分治每次总是要解决左边对右边的影响, 所以在相等时, 每次只更新了右边

2016-02-02 10:45:09 1927

原创 Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks(矩阵优化DP)

题目链接:点击打开链接题意:给n个数作为一个块,有b个块,从其中若干个中选择数,每个块只能选一个数,最后组成一个数模x等于k的方法数。思路:很容易想到这样一个DP方程 : 用dp[i][j]表示现在i位,余数是j。那么dp[i + 1][(j * 10 + k) % x] = dp[i][j] * cnt[k],k是指枚举放1~9中哪一位。因为b特别大,显然要矩阵优化,知道了DP方程,

2016-02-01 14:45:46 1298

原创 Codeforces Round #341 (Div. 2) C. Wet Shark and Flowers(简单容斥)

题目链接:点击打开链接题意:有n个人围坐成一圈,每个人可以从a[i].l 到 a[i].r里选一个数,如果相邻两个数的乘积能整除p,那么就奖励他们一人1000,求所得钱的总和的期望。思路:既然求期望, 先求概率。 显然是要求每组相邻两个人的值乘积能否被p整除, 可以很容易知道在区间里有多少个数不能被p整除, 正难则反, 就能算出相邻两个有多少种组合不能被p整除, 那么也就很容易算出每组可以

2016-02-01 12:36:56 1334

空空如也

空空如也

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

TA关注的人

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