HDU
文章平均质量分 73
HouseFangFZC
oo
展开
-
HDU 5147 Sequence II
题意:n(5*10^5)个不同的数字组成的序列a 寻找满足如下约束条件的数字组数: i1思路:明显考察的是nlogn的算法 我们发现其实ai1和ai2可以放在一起考虑 同理ai3和ai4 这两组并没有相互影响我们来看答案是怎么构成的 假设枚举i3的位置 那么我们希望知道“i3后面有几个数大于ai3” 这个可以通过树状数组处理同理假设我们知道i2也希望知道“i2前面原创 2014-12-21 18:53:26 · 808 阅读 · 0 评论 -
HDU 5032 Always Cook Mushroom
题意:一块田地坐标从(1,1)到(1000,1000) 每块田地能种(x+A)*(y+B)的蘑菇 问 形似(0,0)(p,0)(p,q)这样的三角形区域能种的蘑菇的数量思路:其实很简单 枚举x 根据输入的向量 我们可以求出每个x对应最高的y 然后对于y可以用等差数列求和 再加上y个B 最后乘(x+A)就好了 但是这题时间卡得挺恶心的…一开始写完T了 输入开挂还原创 2014-09-25 16:16:07 · 1192 阅读 · 0 评论 -
HDU 5037 Frog
题意:一只足够聪明的青蛙要过河 它每次最多跳L米 河宽m米 河中有n个石头 你可以任意的添加石头 问 青蛙最多跳几次思路:明显的考验想法 题的方向不是乱搞题就是贪心题首先我们明确 想要次数最多一定要每次跳的最短 但是不能忽略青蛙足够聪明 因此想到可以每2步跳L+1米考虑到河中本来就有一些石头 所以每次跳之前要先判断是不是能跳到石头上 如果能就不需要加石头原创 2014-09-25 09:39:19 · 864 阅读 · 0 评论 -
HDU 4998 Rotate
题意:n次旋转 每次平面绕ai点旋转pi弧度 问 最后状态相当于初始状态绕A点旋转P弧度 A和P是多少思路:假设初始X点的最后状态为X‘点 则圆心一定在X和X'连线的垂直平分线上 那么只要用在取一个点Y和Y' 同样做它的垂直平分线 两线交点即是圆心 然后用简单几何方法算出角度 最后注意要求最后状态由最初状态逆时针旋转得到 适当调整角度即可PS:kuangb原创 2014-09-17 10:46:13 · 865 阅读 · 0 评论 -
HDU 5039 Hilarity
题意:一棵树上有些边是1有些是0 问 有几条简单路径路过奇数个1 树上的边的1和0可以修改思路:不会做… 看题解才找到思路… TAT首先要明确一点 对于u->v这条路径 它的奇偶是可以通过root->u和root->v计算的 因为如果从root出发的两路径不相交 那么两路径上的1相加即可判断u->v 如果相交 假设相交部分有x个1 那么对于u->v的1的个数即原创 2014-09-26 13:56:55 · 1128 阅读 · 0 评论 -
HDU 5040 Instrusive
题意:一个人拿着纸盒子往目的地走 正常情况下一秒走一格 可以原地不动躲在盒子里 也可以套着盒子三秒走一格 走路的原则是不能穿墙 而且地图上有些灯 灯能照到自己和面前一个格 每一秒灯顺时针转90度 如果要从灯照的地方离开或者进入灯照的地方就必须套上盒子 问 最短多长时间到目的地思路:状态只有500*500(地图大小)*4(灯转的4个方向)个 暴搜即可 bfs时候要原创 2014-09-24 14:30:18 · 1204 阅读 · 0 评论 -
HDU 5033 Building
题意:地面上有n座楼 你分别站在m个位置上 问每个位置上能看见多大角度的天空思路:很明显能想到在站的位置两边维持单调性 因此我们可以将站位和楼的位置排序 从左到右维护一遍 再从右到左维护一遍 这里可以利用单调栈 对于新扫描到的位置 如果是楼 那么栈中比它矮的楼就没用了可以出栈 如果是站位 可以这样判断 如果可以看见栈底的楼(最高的楼)那么前面的矮楼一定不会影响后原创 2014-09-24 10:26:26 · 884 阅读 · 0 评论 -
UVALive 4839 HDU 3686 Traffic Real Time Query System
题意:寻找图中从一条边到另一条边的路径上必须经过的点的个数思路:首先必经过的一定是割点 因此可以先做点双连通然后缩点 缩完点后形成了树 而且树上的路径是满足“非割点-割点-非割点-割点-…”这样的模式的 路径u->v只需要求出他们的lca 则答案可以通过(dis[u]+dis[v]-dis[lca]*2)/2算出注意:这题缩点是通过边来进行的 因为这样可以使每条边都原创 2014-08-30 13:56:28 · 1472 阅读 · 0 评论 -
UVALive 5135 HDU 3844 Mining Your Own Business
题意:一些隧道组成矿井 现在要修建尽量少的逃生通道 使得无论哪里发生事故 所有人均能逃出 求方案数思路:这道题比较容易联想到割点 因为只有这种点出事矿井才会不连通 那么首先就找出所有割点分析最少要建几个逃生通道 那当然是每个连通块各一个 因此需要把求出连通块顶点数之积最后考虑特殊情况 没有割点 那么随便两个地方建就好了 不能建一个 万一就那里出事了呢原创 2014-08-29 19:47:46 · 1050 阅读 · 0 评论 -
HDU 3594 Cactus
题意:一幅有向图是不是仙人掌思路:有向图仙人掌是强连通图且每条边最多只属于一个环一幅有向图是仙人掌当且仅当满足3个条件:1、dfs树无横向边2、对于节点u的所有儿子v,它们的low[v]3、满足low[v]证明见 http://download.csdn.net/detail/kksleric/4502360代码:#include#include#i原创 2014-08-27 14:33:55 · 882 阅读 · 0 评论 -
2014多校联合十(HDU 4972 HDU 4973 HDU 4974 HDU 4975)
HDU 4972 A simple dynamic programming problem题意:篮球比赛有1、2、3分球 现给出两队的分差序列(5:3 分差2 3:5分差也是2) 问有多少种可能的比分思路:比较简单的想法题 可以类一张表“从分差x到分差y一共有几种情况” 很容易发现只有1->2和2->1的时候会多一种情况 其他均是一种 所以只需要统计这种特殊分差即可 注原创 2014-08-26 15:35:12 · 1053 阅读 · 0 评论 -
HDU 4928 Series2
题意:0序列为 a1、a2、a3……an 根据运算规则ai=ai+1-ai计算i序列 如果序列单调则为合理序列 问从0开始到第几序列是合理的 如果一直合理就是nice 如果一开始就不合理就是ugly思路:照着题解做 - -b 负责度证明很是精妙 具体见官方题解这里有一点需要补充 就是压缩0的那个优化 压缩只能在串首和串尾进行 因为要保证答案不变还有不是每次压缩原创 2014-08-11 11:11:09 · 1222 阅读 · 0 评论 -
HDU 4921 Map
题意:给n个节点 他们形成了最多10条链 每条最多1000的长度 每个节点有个val 你可以选择任意位置截断链 断点前的所有节点被你获得 通过题中计算公式得出你的val 问 通过随机截断 获得val的期望是多少思路:期望=所有方案val的和/方案数这里明显有分层的现象 而且每层最多10个元素 因此想到状压 那么我们只要逐层统计 每层计算一下能对“所有方案v原创 2014-08-10 14:27:44 · 1212 阅读 · 0 评论 -
HDU 4916 Count on the path
题意:给定一棵树和m个询问 每个询问要求回答不在u和v两节点所形成的路径上的点的最小标号思路:一开始以为是LCA… 不过T了好几次… 后来发现不用LCA也可做考虑每个询问u和v 如果他们的lca不是1 则1一定是答案 不过求lca会T 那么我们只需要在遍历树的时候给节点染色 染的颜色就是1的儿子的颜色 如果x这个点在y的子树中(y是1的儿子)那么他的颜色就是y原创 2014-08-09 19:41:25 · 1580 阅读 · 0 评论 -
HDU 5000 Clone
题意:每个克隆个体有n个属性 如果对于A、B两个个体 A的n个属性均不低于B的n个属性 那么B会被淘汰 问最多能有多少个体同时存活思路:根据数据大小猜一下是n^2的复杂度 往DP方面考虑一下DP需要一个想法的支持 就是最优的那个集合中的元素的n个属性的和一定是一样的 为什么呢? 想象一下 假设最优的集合的属性和是5 这时你选过来一个和为6或者4的元素 那么至少原创 2014-09-18 09:23:44 · 1345 阅读 · 1 评论 -
HDU 4917 Permutation
题意:一个序列p1、p2、p3……pn是由1、2、3……n这些数字组成的 现给出一些条件pi思路:很容易想到用一条有向的线连接所有的pi和pj 那么就构成了有向无环图(题中说有解所以无环)又因为pi各不相同 那么题目就变成了有向无环图的拓扑排序的种类数题目中边数较少 所以可能出现不连通情况 我们先讨论一个连通集合内拓扑排序的种类数题目中m较小 可以利用状原创 2014-08-08 10:05:00 · 1420 阅读 · 0 评论 -
HDU 5001 Walk
题意:连通无向图 随机选起点 随机乱走 可以重复走点 问 每个点有多大几率不被路过思路:一看就是DP题…但是开始的时候陷入了僵局 我是想先算路过每个点的概率然后用1减去这个概率 但是由于可以重复路过 所以无法判断是不是第一次经过这个点所以我们应该直接做不路过的概率 即类似bfs的一步步走 如果走到了要计算的点就停下来 意思就是除了要计算概率的那个点不能原创 2014-09-18 16:34:57 · 843 阅读 · 0 评论 -
HDU 5029 Relief grain
题意:一棵树 m次染色 每次染色一条路径 颜色不会覆盖会积累 问每个点覆盖次数最多的颜色是什么思路:树上路径操作不是树链剖分就是LCT 对于每次染色 相当于让那种颜色的权值+1一般的熟练剖分都是将树剖成线段然后放在线段树上 这题只是剖成线段 然后对于路径的染色 就变成了对多个线段的染色由于剖分已经使树变成了线性的结构 因此我们可以利用“头加尾减”的方式维护原创 2014-09-27 10:36:12 · 1337 阅读 · 5 评论 -
HDU 5073 Galaxy
题意:数轴上有n个点 每个点重量1 可以移动其中k个到任何位置 使得题中式子值最小 di表示第i个点距离现在n个点的重心的距离思路:式子中wi可以去掉 因为都是1 则 式子变成I=min(sum(di*di))考虑移动的k个点 应该直接把它们移到重心 这样di为0很容易想到 我们将所有点排序后 应该从两边往中间拿 这样移动k个点 剩下一些连续的点 因原创 2014-10-22 20:54:45 · 984 阅读 · 0 评论 -
HDU 5071 Chat
题意:CLJ找了许多妹子… (题目好没节操…) 对于CLJ和妹子的聊天对话框 有一下几种操作:add 加一个妹子在聊天窗队列末尾 如果这个妹子已经在队列中则add失败close 关掉某个妹子的聊天窗口 如果没有这个妹子的对话框则close失败 如果成功要输出和这个妹子说过几个词chat 和最前面妹子说一些话 如果没有窗口打开则chat失败rotate原创 2014-10-22 20:46:13 · 1117 阅读 · 0 评论 -
HDU 5148 Cities
题意:n(2000)个点的树 从中选出k(50)个点 要求 选出的点中等概率选出两个点 使得这两点的期望值最小 输出期望值乘k^2思路:我们将题目的要求化简 sum( sum( dis(i,j) ) ) / k^2 * k^2 其实就是求 sum( sum( dis(i,j) ) ) 其中i和j为任意选出的k个点设dp[i][k]表示扫描完i为根的子树选出k个点原创 2014-12-21 19:01:16 · 806 阅读 · 0 评论 -
HDU 4126 POJ 4006 Genghis Khan the Conqueror
题意:n(3000)个点的图 q(10^4)次操作 每次操作从原图更改一条边的权值 问q次操作后最小生成树的平均值是多少思路:先求最小生成树 然后讨论 如果更改的不是树边 则最小生成树不变 如果是树边 就要选择原图中的非树边和更改后的这条边其中较小的一个形成新树难做的只有“是树边”这种情况 我们考虑 原图中的非树边与原树一定可以形成一个环 那么我们可以这样理解原创 2014-11-30 11:41:27 · 1347 阅读 · 0 评论 -
HDU 5109 Alexandra and A*B Problem
题意:给出数字a(思路:可以构造t为 XsY 假设 |Y|=ly |s|=ls 则 t = ( X * 10^ls + s ) * 10^ly +Y这时t%a==0 这时未知数有 X Y ly 我们可以通过枚举两个计算一个的方式达到枚举所有解的目的考虑X的范围 我们发现构造的基础是t%a==0 也就是说我们可以只关心“取模”!! 那么X一定在0~a-1之间(这里要特判原创 2014-11-23 15:52:01 · 1303 阅读 · 0 评论 -
HDU 5002 Tree
题意:一棵树 支持删边加边、路径权值加值、路径权值改值、路径求第二大的数字和其个数思路:LCT的第二题 题意已经把功能都告诉了 比较裸要注意的是权值加值和改值两个操作的标记下放问题 要先down改值 再down加值对于路径的操作通过mroot变换树的形态再access拿出路径比较方便 不要像我上一篇一样搞lca代码:#include#include#in原创 2014-10-18 10:09:17 · 1329 阅读 · 1 评论 -
HDU 4067 Random Maze
题意:一幅“随机图”定义为有如下性质的图:有一个入口和一个出口有向图对于入口 出度比入度大1对于出口 入度比出度大1对于其他点 入度等于出度现给出一幅有向图 每条边有2个决策——留下、扔掉 分别花费a和b 问 如果用最少的费用改造出“随机图”思路:网络流不错的题目 如果做过“混合图欧拉回路”(后文把这个问题成为p)那个zoj的题的话 这道题会有原创 2014-11-02 18:25:47 · 766 阅读 · 0 评论 -
HDU 4010 Query on The Trees
题意:一棵树 支持合并、分离、路径加权值、路径权值最大值思路:LCT入门题 也是我的第一道… 代码来源于kuangbin巨巨 我只是整理出自己的风格留作模版…LCT比较好的入门资料是——《QTREE解法的一些研究》LCT基本做法就是先dfs建树 然后根据输入做上述4个操作对于合并 就是把u转到树根 然后接在v上对于分离 就是把u转到splay的根原创 2014-10-17 17:51:56 · 1007 阅读 · 0 评论 -
HDU 3832 Earth Hour
题意:平面上有一些圆 要求用最少的圆将1、2、3点连通 这三点上的圆必须使用思路:如果两圆可以连通 则用边把它们圆心相连 然后问题转化为图论模型 那么我们只需要从1、2、3求出到其他点的最短路 再枚举中间点分别到这三个点距离和即可为什么这样找中间点是对的?? 因为虽然可能存在x->1和x->2的最短路经过y 但是如果y真的存在 那么最小值一定是y提供的 就算我们原创 2014-10-05 10:56:32 · 827 阅读 · 0 评论 -
HDU 3831 DICS
题意:通过题中给出的4种操作 用最少的次数 从a串变换到b串思路:由于操作只有这4种 所以我们可以确定从头到位去匹配a和b一定是正确的那么状态数一共有多少呢 一共有length[a]*length[b]*(1+num(a~z)+num(A~Z)) 状态不多 可以用dp解决上述计算状态可以表示为dp[i][j][k] 即a串匹配到i同时b串匹配到j k表示修改后缀原创 2014-10-05 09:54:15 · 1148 阅读 · 0 评论 -
HDU 3830 Checkers
题意:有三个棋子 可以隔一个棋子跳 不能隔两个跳 问状态u到状态v最少跳几步思路:对于一个状态三个棋子的位置可以设为 x y z (小到大)只有当y-x=z-y的时候 跳的方法为两种 即 y跳过x 或 y跳过z在上式等式不成立时 短的一边可以跳许多次 直到大小关系改变那么这样就形成了二叉树的结构 我们将y向左右跳的状态分别作为原状态的儿子 将两边其原创 2014-10-04 22:06:03 · 1528 阅读 · 0 评论 -
HDU 3829 Cat VS Dog
题意:p个人 每个人有喜欢和讨厌的动物 如果选出的动物中包含这个人喜欢的动物同时不包含他讨厌的动物那么这个人会开心 问 最多几个人开心思路:二分图最大独立集 利用人与人之间的冲突建边 求最大匹配即可注意:题中的样例给出动物的名字是D1、C1之类的 其实名字可能比这个长… 所以数组开长点代码:#include#include#include#incl原创 2014-10-04 21:29:31 · 801 阅读 · 0 评论 -
HDU 5076 Memory
昂神的解题报告:http://sd-invol.github.io/2014/10/22/Anshan-2014-G/我来对他的话进行翻译就好了… 之所以看出最小割 是因为每个位置有两种方案 这样形成二分图后 我们要进行决策 最小割也就变成了进行决策所要丢掉的最小价值之所以根据每个位置的二进制表示中1的个数来决定该位置两种决策放在左边还是右边 是为了避免二分图中同一个集原创 2014-10-24 16:52:43 · 2127 阅读 · 0 评论 -
HDU 4169 Wealthy Family
题意:n个节点的树 每个节点上有个价值 要求选出k个两两互相没有祖孙关系的节点 使得价值和最大思路:明显的树形dp 如果用dp[fa][i]表示fa子树取i个点的最大价值和 则有转移 dp[fa][i]=max(dp[son][k]+dp[fa][i-k])但是如果这样开数组会MLE 所以本题猥琐的使用dfs内部开数组的方式 这样借助全局变量的帮助 我们可以避免M原创 2014-10-25 21:30:41 · 955 阅读 · 0 评论 -
HDU 4162 Shape Number
题意:一串链码 用差分的最小表示法表示思路:其实就是最小表示法的模版题…代码:#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define N 60原创 2014-10-25 21:16:20 · 901 阅读 · 0 评论 -
HDU 4166 Robot Navigation
题意:一个机器人走迷宫 每一秒要么转向要么前进 问 最少时间的情况下有几种方案思路:记忆化搜索即可 简单bfs代码:#include#include#include#include#include#include#include#include#include#include#include#include#includeusing names原创 2014-10-25 21:24:55 · 874 阅读 · 0 评论 -
HDU 4164 Contour Tracing
题意:轮廓跟踪 算法题中已经提供 保证所有有轮廓的图形里面都没用洞 像素小于5的图形算噪声 将所有图形的轮廓大小排序输出思路:模拟题 逻辑好就行了首先要bfs 判断那些图形是一块 同时将噪声扔掉 然后就是实现题目提供的轮廓跟踪算法 最后将轮廓排序输出代码:#include#include#include#include#include#inclu原创 2014-10-25 21:23:04 · 1046 阅读 · 0 评论 -
HDU 5077 NAND
题意:输入真值表的最后一列 问 最少使用多少个“与非”式使真值表成立思路:纱布题… 现场赛出了就是看前面谁做得快了 - -b 这题就是暴力打表 然后提交那个表…我的打表巨暴力 能把ans=10的答案打出 全部表打完估计要跑30min才行 其中104这个点打不出来 于是我们可以用人工枚举的办法 - -b 就是从11开始枚举 不断提交… WA了就改一下…其实原创 2014-10-24 10:25:19 · 1448 阅读 · 0 评论 -
HDU 4966 GGS-DDU
题意:你有n个课程 每个课程有一个规定的毕业学分 修学分有m种方式 每种方式要求先修到x课程x'学分以上才能花费money去修y课程并且将学分修到y' 问 最少花费多少可以毕业思路:一开始想费用流 建完图发现一个问题解决不掉 那就是 一条边如果流过多次怎样才能让费用只计算一次 所以换思路我们知道 为了应付“ 学分修到y' ”这个条件 高层学分一定要“覆盖”低层原创 2014-08-20 09:45:27 · 1131 阅读 · 0 评论 -
HDU 4967 Handling the Past
题意:你有一个栈 一些操作发生在栈上 包括进栈、出栈、询问栈顶 每个操作有一个独一无二的时间 当操作读进来时 要把之前处理的本该在本操作之后的操作全撤销 接着完成现在的操作 再把撤销的操作重做一遍 每次询问操作输出栈顶元素思路:由于时间唯一 那么可以用时间来对应插入的元素以及操作的类型 所以首先离散化时间(这里不去掉重复也行)然后我们把push当作+1 pop原创 2014-08-20 17:07:31 · 949 阅读 · 0 评论 -
HDU 4862 Jump
题意:n*m的格子 每个格子有个数字 你可以任选起点 每一步向下或者向右 每一步的花费是曼哈顿距离-1 如果一步的两端的格子数字一样那么你会得到这个数字的花费 问 最多选k次起点 在遍历完所有格子前提下最多剩下多少花费思路:题目可以表示为用最多k条路径去覆盖n*m 思路就转向了二分图X集合表示每个点的出 Y集合表示入 如果f格子能走到g格子 那么建边原创 2014-07-23 11:28:36 · 1632 阅读 · 0 评论 -
HDU 3473 Minimum Sum
题意:一段固定不变的数字 m次询问 每次询问选择一个x值 使得区间[l,r]中每个元素与x的差的绝对值的和最小思路:x值明显选择[l,r]中数字的中位数 那么题目就变成了[l,r]中第(r-l+1+1)/2小的数是几 由于数字是静态的 所以划分树可解那么ans = num(x) - num(>x) * x 由于sum之间可由前缀和相互求出 num也可以通过原创 2014-07-21 16:15:27 · 939 阅读 · 0 评论