HDU OJ
笑对这个世界的志贵
这个作者很懒,什么都没留下…
展开
-
【线段树 && 离线处理 && 维护区间规定下标的和】HDU - 4288 Coder
Problem Dscription 给你n个操作,操作分为三种,(1): add x,往集合里面添加元素x。(2): del x,从集合里面移除元素x。(3): sum 求下标mod 5 == 3的对应元素值的和。集合满足从小到大思路: 离线处理:就是先输入完数据后在处理。线段树维护两个量,num代表该区间有几个数。sum[]代表该区间mod5==1的和,mod5==2的和,mod5==翻译 2017-09-05 11:36:57 · 240 阅读 · 0 评论 -
HDU BugZhu抽抽抽!! 知道三点坐标,求三角形面积,外接圆面积,半径
BugZhu抽抽抽!! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0Problem Description 当前正火的一款手游阴阳师又出新式神了,BugZhu十分想要获翻译 2017-03-18 19:59:52 · 666 阅读 · 0 评论 -
【Miller-Rabin 素数判定】HDU - 2138 How many prime numbers
Problem Description 输入n,接下来有n个数,问你里面有多少个是素数。思路: 我分别用了三种不同的方法,测试了一下时间复杂度。i*i<=num 没有 sqrt(num) 快,这个得注意,,复杂度为O(n*sqrt(n))。Miller_Rabin速度最快,也是为了这个算法发的博客。//超时代码#include<bits/stdc++.h>using namespac翻译 2017-10-09 17:54:37 · 223 阅读 · 0 评论 -
【矩阵快速幂 && 循环节】HDU - 4291 A Short problem
Problem Description Given n (1 <= n <= 10^18), You should solve for g(g(g(n))) mod 10^9 + 7 where g(n) = 3g(n - 1) + g(n - 2) g(1) = 1 g(0) = 0思路: 参考博客:http://blog.c翻译 2017-09-05 10:17:03 · 281 阅读 · 0 评论 -
【最小费最大流 && 概率论】HDU - 5988 Coding Contest
Problem Description 给你n个地点,m条边。接下来n个地点每个地点有num个人,food个人的食物。接下来m行,u地点到v地点,能经过的人数num,经过一个人发生故障的概率w, 第一个人通过的时候,发生故障概率为0。让你尽可能多的人吃到午餐,发生故障的最小概率思路: 发生故障的概率 = 1 - 不发生故障的概率。每条边不发生故障的概率1-w。发生故障概率为0所以不发生故障翻译 2017-10-24 10:17:03 · 329 阅读 · 0 评论 -
【最大流 && 点限流】HDU - 2732 Leapin' Lizards
Problem Description 输入T代表有T组测试数据,输入n, d。代表接下来的有两个矩阵n行len列(列是不知道的)。第一个矩阵每个点代表着柱子,对应的值,代表这个柱子的承受能力,青蛙从这里跳走承受能力就会–,直至0就不能承受青蛙了。第二个矩阵L代表青蛙一开始在这里,.代表没有青蛙。问你最少还有多少只青蛙不能跳出边界。每次青蛙能跳的最大距离为d。思路 核心是能想到最大流,紧接翻译 2017-10-03 11:22:31 · 236 阅读 · 0 评论 -
【最大流 模板题 EdmondsKarp】HDU - 1532 Drainage Ditches
Problem Description 给你m,n分别代表m条边,n个点。接下来给你m条边,每条边u,v,w。u->v流量的容量为w。有重边思路:模板题,所以给几个模板EdmondsKarp-dfs实现//dfs实现#include<bits/stdc++.h>using namespace std;const int N = 1000;const int inf = 0x3f3f3f翻译 2017-08-16 19:40:31 · 260 阅读 · 4 评论 -
【dinic && 拆点 && 最小割】HDU - 4289 Control
Problem Description 输入n, m分别代表有n个城市,m条边,输入s,e代表起点,目的点。接下来n行输入w, i行代表城市i的放置检测器所需的价值。接下来m行,输入u,v代表城市u,v之间有边相连接。有恐怖分子要从s-e问你至少需要多少价值来放检测器。思路: 建图,然后跑dinic就可以了,核心就是建图。拆点,建边流量为点权。超级源点和起点建边,流量为无穷。目的点和超级汇翻译 2017-09-27 19:25:42 · 269 阅读 · 0 评论 -
【最短路 spfa && 水题】hdu-6201 transaction transaction transaction
Problem Description 你可以选择任意两个城市,在这个城市买书,另外一个城市卖书,让你求最大的利润,城市与城市之间的移动需要花费w裸的spfa,比赛的时候,没好好想想,选择去想card那题了,所幸A出来了,原本自己能A的题目,还以为是自己不会的知识点的题目。比赛结束,圣昭一句话,瞬间懂了。思路: 既然让你求任意两点的最大利润,正常想法就是,floyd看到城市数量有点多,肯定翻译 2017-09-11 10:25:57 · 697 阅读 · 0 评论 -
【求最小权值割边】HDU - 4738 Caocao's Bridges
Problem Description 输入n, m代表有n个岛屿,m条边,接下来m行,u,v,w,代表岛u-岛v之间有w人。有人需要去把岛屿炸分开,只能炸一次,如果炸一次分不开输出-1。如果能炸分开,让你输出派出最少的人(排出的人数,大于等于岛屿之间的人数,才能炸开)。思路: 很裸的求割边的题目,但是需要注意几个点。如果岛屿已经分开,输出0,如果没有割边输出-1,如果岛与岛之间没有人至少翻译 2017-09-19 11:22:32 · 422 阅读 · 0 评论 -
【强连通 && 最多可以加几条边使得图不为强连通图】HDU - 4635 Strongly connected
Problem Description 输入T组测试数据,每组测试数据输入n,m分别代表n个点,m条边。 接下来m行,每行u,v代表u->v有一条单向边,问你最多可以加多少条边,图不能是强连通图。思路: 要使得图不为强连通图,那么至少得有两个缩点,这题核心就在于,将图如何分成两个缩点,使得边最多。一开始,我的思路,将图缩点,然后找到点最少的缩点。令它为一个缩点(由Min个点构成),其翻译 2017-09-18 21:34:58 · 649 阅读 · 0 评论 -
【数论 && 公式转换】HDU - 5584 LCM Walk
Problem Description 输入T代表有T组测试数据,每组测试数据输入x,y代表终点。问你有多少个不同的起始点能到达终点?假设一个点(x0, y0)那么它下一步可以走(x0 + lcm(x0, y0), y0) 或者 (x0, y0 + lcm(x0, y0));思路 假设令当前点为(x1, y1),我们可以转换一下x1 = p*t, y1 = q*t其中(t 为 gcd(x1翻译 2017-10-06 16:05:11 · 256 阅读 · 0 评论 -
【最大独立集】HDU - 3829 Cat VS Dog HDU - 3829
Problem Description 有p个小朋友参观动物园,动物园里面有两种动物,分别为猫和狗。规定一个小朋友喜欢猫就讨厌狗,喜欢狗就讨厌猫。 现在管理员要移走一些动物,当然,移走也是有条件的。比如一个小朋友喜欢猫3,讨厌狗4.那么移走狗4,这个小朋友就会非常开心。同样,如果移走猫3,小朋友就会很不高兴。现在问怎么样才能使开心的小朋友的人数最多。思路 要使得开心的小朋友人数最多,翻译 2017-11-12 19:27:30 · 208 阅读 · 0 评论 -
【K-D树 K维最近距离的t个点】HDU - 4347 The Closest M Points
Problem Description 给你n个点,告诉你k维。 接下来有m个询问,每个询问,给你一个坐标,和t。 让你求距离这个坐标最近的t个点。思路: 求最近距离的基础上,加个优先队列存t个点。#include<bits/stdc++.h>using namespace std;#define ll long longconst int MAX = 50055;c翻译 2017-12-04 21:20:40 · 301 阅读 · 0 评论 -
【K-D树 在限制条件下求最近欧几里德距离】HDU - 5992 Finding Hotels
Problem Description 给你n个酒店,m个人。 分别给你每个酒店的坐标,和酒店的价格。 分别给你每个人的坐标,和人最多能够承受的价格。 对于每个人,让你求这个人能够承受价格的酒店,那个距离他最近。思路: 求最近距离的时候,加个条件限制即可。#include<bits/stdc++.h>using namespace std;#define ll lo翻译 2017-12-04 21:09:31 · 284 阅读 · 0 评论 -
【数学期望 && 找规律】HDU - 5984 Pocky
Problem Description 对于一根长度为L的木棍,每次等概率的取一个点将其分成两半,然后吃掉左边一半,直到剩下的长度小于d,计算需要吃(分割)次数的数学期望。题解 大佬博客#include<bits/stdc++.h>using namespace std;int main(){ int T; scanf("%d", &T); while(T-翻译 2017-10-24 08:44:47 · 555 阅读 · 0 评论 -
【最小环 && 离散化】HDU 6005 Pandaland
Problem Description 给你m条边,每条边给你两个城市的坐标,还有两个城市道路之间有成本 让你求一个最小成本的周期,至少包含三个城市。思路: 因为只给了城市的坐标,我们得给每个城市对应一个编号,所以离散化。 因为题目给出边的个数,最大只有4000条。点的个数最大可以到达8000。 Floyd求最小环,肯定超时。枚举所有的边,求边的端点之间的最小成本。最小成翻译 2017-11-12 21:28:57 · 432 阅读 · 0 评论 -
【KM算法 模板】HDU - 2255 奔小康赚大钱
Problem Description n代表房子的数量,n行,每行n个数代表i个村名对第j间房出的价格 要求每个村民有房子住,能获得最大的价格是多少思路: 裸的KM算法,求给定一个带权的二分图,求权值最大的完备匹配。#include<bits/stdc++.h>using namespace std;#define maxn 305#define inf 0x3f3f3f3翻译 2017-11-12 20:42:53 · 211 阅读 · 0 评论 -
【Hopcroft-Karp && 二分图的最大匹配数 && 有向图】HDU - 2389 Rain on your Parade
Problem Description 给你时间Time。给你n个人,每个人给你所在位置和移动速度。给你m个雨伞的坐标。问你在Time时间内,最多有多少个人能得到雨伞。思路: 暴力n*m求人与雨伞之间的距离,判断人在时间Time内能否到达雨伞处,如果能够到达建一条边。 然后就是最二分图的最大匹配,左边是人,右边是雨伞。 匈牙利算法超时。 得换一个快一点的算法Hopcrof翻译 2017-11-01 17:19:55 · 445 阅读 · 0 评论 -
【最大独立集 && 有墙 && 无向图】HDU - 1045 Fire Net
Problem Description 给你一个正方形棋盘。每个棋子可以直线攻击,除非隔着石头。现在要求所有棋子都不互相攻击,问最多可以放多少个棋子 如上述图,图1是棋盘,图2是放的最多的思路: 可以参考博客先A了ZOJ 1654。这两题是一样的题,上述博客讲的太好了。 核心:如果把最大独立集,点的关系转换到二分图上。 本题也是二分图匹配的一个经典题目。我们将翻译 2017-10-26 09:33:18 · 242 阅读 · 0 评论 -
【最大独立集 && 无墙 && 无向图】HDU - 1281 棋盘游戏
Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些翻译 2017-10-26 09:15:21 · 250 阅读 · 0 评论 -
【二分图判断 && 二分图最大匹配】HDU - 2444 The Accomodation of Students
Problem Description 首先判断所有的人可不可以分成两部分,每部分内的所有人都相互不认识。如果可以分成 则求两部分最多相互认识的匹配数。思路: 先判断是否为二分图: 开始对任意一未染色的顶点染色,之后判断其相邻的顶点中,若未染色则将其染上和相邻顶点不同的颜色, 若已经染色且颜色和相邻顶点的颜色相同则说明不是二分图。 如果是二分图,求最大匹配。#include<翻译 2017-10-26 08:57:32 · 255 阅读 · 0 评论 -
【最小顶点覆盖数 && 无向图】HDU - 1054 Strategic Game
Problem Description 现在,他有以下的问题。他必须捍卫一个中世纪的城市,形成了树的道路。他把战士的最低数量的节点上,使他们可以观察所有的边。思路: 正常图中:最大独立集数 + 最小顶点覆盖数 = 顶点数 二分图中:最大匹配数 = 最小顶点覆盖数 = 最大独立集 因为题目所给的图是树,树一定是一个二分图。所以直接求最大匹配数即可#include<bits/st翻译 2017-11-03 09:19:17 · 596 阅读 · 0 评论 -
【边双连通 && 树的直径】HDU - 4612 Warm up
Problem Description 输入n,m代表有n个点,有m条边。有重边,这里重边指的是1-2,1-2如果出现了两次,代表1-2有两条不同的道路接下面m行,每行u,v代表u-v有一条道路(双向)。问你加一条边,最少还剩下多少个桥思路: 树的直径参考:http://blog.csdn.net/Triple_WDF/article/details/50118115 将图按双连通分量缩点翻译 2017-09-18 19:49:00 · 419 阅读 · 0 评论 -
【位运算】hdu-6186 CS Course
Problem Description 输入n,q。代表有n个数,q次访问。每次访问给你一个下标,让你除去这个下标的数后。所有数进行&, |, ^运算的结果,并输出。思路: 一个数^0这个数还是不变的。一个数^本身,等于0。所以所有数的^在^一次除去的数。就是^的结果。&,|,这个的话,统计一下n个数的二进制0的个数,1的个数。看看他们对结果有没有影响,有影响就改变,没影响就不变。具体实现翻译 2017-09-01 09:26:42 · 650 阅读 · 0 评论 -
【状态压缩dp】HDU - 1074 Doing Homework
Problem Description 给你T组测试数据,每组测试数据给你一个N(1<=N<=15) 接下来有N行,每行分别代表需要做作业的科目,截止时间,完成需要花费的时间。如果不能在截止时间完成作业,那么考试分数就会被扣分,超出几天,就扣几分,让你求出最少的扣分。思路: 因为N比较小,所以可以枚举所有的情况,(1左移n) - 1代表n个1的二进制,我们用1来表示完成了该科目,0表示还没翻译 2017-08-12 19:37:29 · 216 阅读 · 0 评论 -
【m段最大连续子段和的和】HDU - 1024 Max Sum Plus Plus
Problem Description 给你m, n, 接下来有n个数,让你求m段 连续子段的和 的和的最大值思路: 求1段的时候就是最大连续字段和 状态转移方程就是dp[j] = max(dp[j] + a[j], a[j]); 然后求出最大的dp[j]就是结果,现在是m段,那么到了第2段的时候,我们得用数组Max[]记录第一段到了j - 1的时候的最大值,这时候状态转移方程就是 dp翻译 2017-08-12 19:16:24 · 379 阅读 · 0 评论 -
【map && spfa求正权回路】HDU - 1217 Arbitrage
Problem Description 给你n种货币,给你m种货币与货币兑换的比例。让你寻找存不存在一种兑换方式使得自己的钱变多。思路:因为都是货币种类都是字符串,所以用map映射成整数这样会好求很多#include<cstdio>#include<queue>#include<map>#include<cstring>#include<string>#include<iostrea翻译 2017-07-25 19:47:10 · 229 阅读 · 0 评论 -
【最大流 模板 Dinic】POJ 1459 Power Network
Problem Description 给你n, np, nc, m。分别代表有n个点,其中np个是发电站,nc个是消费者,剩下n-np-nc个就是中转站。接下来给你m条边,每条边格式(u,v)w。代表u点到v点这条线路最大能够运输w的电。最后给你np个点最大能够输出的电,nc个点最大能够接收的电(格式:(u)w, u这个点能够输出(接收)最大的电,发电站的点是输出,消费者的点是接收)。思路:翻译 2017-08-17 09:55:43 · 295 阅读 · 2 评论 -
【线段树区间单点更新加约束条件】HDU - 4027 Can you answer these queries?
Problem Description 给你一个n,接下来有n个数,给你m个操作,操作分为0的时候对区间L,R内的所有元素开根号,1的时候求区间L,R所有元素的和思路:因为最大的数2的63次方,开根号也就7,8次这样就为1开不了了。所以约束条件就是(判断如果该区间元素都是1的话,就不继续递归了)#include<bits/stdc++.h>using namespace std;struc翻译 2017-07-25 09:28:49 · 218 阅读 · 0 评论 -
【BFS】HDU 1241 Oil Deposits
Problem Description 输入一个n*m的矩阵,@代表油田,*代表空地.斜上斜下上下左右有油田都算一堆,问你有多少堆油田.代码: 记录下所有油田的下标,对于每个油田跑BFS就好了#include<bits/stdc++.h>using namespace std;struct node{ int u, v;};char Map[150][150];int vi翻译 2017-05-19 09:32:20 · 190 阅读 · 0 评论 -
【BFS】HDU 1495 非常可乐
Problem Description 给你一瓶S体积的可乐,N和M容量的杯子,他们可以互相倒,问你能不能平分这瓶可乐,能的话,输出需要倒多少次,不能的话,输出NO.代码: 就是情况多了点而已#include<bits/stdc++.h>using namespace std;struct node{ int sum, u, v;};queue<node> q;int s,翻译 2017-05-19 09:24:15 · 233 阅读 · 0 评论 -
【DFS】HDU - 2181 哈密顿绕行世界问题
Problem Description 20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市代码: 很简单的DFS,第一次敲的时候,样例怎么都不对不知道为何,全删了在敲一遍就A了#include<cstdio>#include<cstring>using namespace std;int map[30][30], vis[30], Pre[30], cas;//地图,标记城翻译 2017-05-28 16:42:11 · 290 阅读 · 0 评论 -
【BFS 康拓 A*】HDU - 1043 Eight
Problem Description 给你一个3*3的数组,让你变为1 2 3 4 5 6 7 8 x,x只能上下左右和旁边的交换位置,让你求出操作步骤。**代码:正常想法就是正常的BFS,BFS肯定要记录状态,标记状态,用正常的方法记录这个数组的状态,很大。所以用康拓展开(枚举全排列,九个数362880种情况),知道如何记录状态了,但是如果正常的BFS跑,情况太多,肯定会超时,所以得有目的翻译 2017-05-27 10:04:34 · 344 阅读 · 0 评论 -
【BFS】HDU 2612 Find a way
Problem Description 给你一个n,m的矩阵,里面有Y.#@M分别代表小明家,路,墙,KFC,小红家。问你那个KFC使得到两个人家距离最近代码:一开始,先找@,BFS每个@找到Y,M求和,发现超时,换了一种方法,先找Y,M分别BFS这两个,找到距离所有的KFC的距离。后面暴力求最小(每一步11分钟)#include<algorithm>#include<cstdio>#in翻译 2017-05-15 21:55:59 · 199 阅读 · 0 评论 -
【dp】HDU - 1176 免费馅饼
Problem Description 为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼). 给你一个n,接下来有n行 x,T,分别代表n个馅饼,在T秒的时候落在了x的位置。思路:翻译 2017-08-12 19:51:42 · 271 阅读 · 0 评论 -
【dp】HDU - 1260 Tickets
Problem Description 一个人八点开始上班,卖票,可以一次卖一张,也可以一次卖相邻的两张,问你最快什么时候可以下班。给你T组测试数据,每组测试数据给你一个n,代表有n个人排队买票,给你n个数,代表每个人买票需要的时间,给你n-1个数,代表相邻两个人一起买票需要的时间。思路:比较简单,想一想状态转移方程就出来了: dp[i] = min(dp[i - 1] + a[i], dp[翻译 2017-08-12 19:57:57 · 269 阅读 · 0 评论 -
【贪心】hdu - 6188 Duizi and Shunzi
Problem Description 输入一个n,接下来有n个数,让你求出能组成最多的对子或者顺子的和。 对子: (2,2),顺子: (1,2,3)。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188思路: 从小跑到大。例如1,1,2,3。跑到1的时候有对子,这时候优先要对子。不然你牺牲对子去换顺子,也就是一比一,根本不会赚。例如翻译 2017-09-01 09:03:51 · 1210 阅读 · 0 评论 -
【线段树维护区间编号 && 区间更新】HDU - 4614 Vases and Flowers
Problem Description 输入T,代表有T组测试数据。每组测试数据输入n, m。分别代表有n个花瓶,编号为0-(n-1)。接下里有m行操作:分为两种操作。 (1) : 1 x y :从第x个花瓶开始往后放y朵花。有位置就放,没位置就跳过,直到放完或者超过n-1 同时 返回最开始放的花瓶编号和最后放的花瓶编号如果一朵也放不了就返回”Can not put any one.”。(翻译 2017-08-24 09:35:16 · 270 阅读 · 0 评论 -
【线段树多符号区间更新】HDU - 4578 Transformation
Problem Description 输入n,m。给你长度为n的数组,初始化为0。接下里有m行操作: (1)”1 x y c”,代表 把区间 [x,y] 上的值全部加c (2)”2 x y c”,代表 把区间 [x,y] 上的值全部乘以c (3)”3 x y c” 代表 把区间 [x,y]上的值全部赋值为c (4)”4 x y p” 代表 求区间 [x,y]翻译 2017-08-24 09:10:03 · 234 阅读 · 0 评论