HDU
文章平均质量分 75
ahfywff
这个作者很懒,什么都没留下…
展开
-
HDU 4442 Physical Examination【2012金华A题,贪心】
这题真不应该花了那么多时间。当时有了一个想法,但是我没有顺着这个想法做下去。后来还是zz_1215那样做了,果断AC。他说:“我不知道为什么这样,但哥就是AC啦!”其实是这样的:假设已经花了t秒,而现在有两个项目可选,所需时间分别为a1, b1和a2, b2。先选项目1再选项目2所需时间为:t1 = a1+b1*t + b2*(a1+b1*t+t)+a2 = a1+a2+(b1+b2)原创 2012-10-29 17:24:16 · 1709 阅读 · 0 评论 -
HDU 4366 Successor(线段树)
题意:某公司有n个人,编号从0到n-1,0号是BOSS。除BOSS外,每个人有忠诚度和能力两个属性,每个人的忠诚度都不同。每个人都有可能被BOSS炒鱿鱼,当某个人被炒后,他的所有下级中能力大于他且具有最大忠诚度的人将取代他的位置。现在给定所有人的上下级关系(下级的编号总是比上级小)和一些被炒鱿鱼的人的编号,输出取代被炒人的人的编号,如果没人取代被炒人,输出“-1”。分析:首先,把以每个节点为根原创 2012-08-19 17:51:27 · 1294 阅读 · 1 评论 -
HDU 4374 One hundred layer(单调队列+DP)
#include #include #include #include #include using namespace std;const int maxn = 111;const int maxm = 10010;const int oo = 1 << 30;int n, m, x, t;int s[maxn][maxm];int sum[maxn][maxm];原创 2012-08-17 20:58:46 · 895 阅读 · 0 评论 -
HDU 4364 Matrix operation(模拟)
矩阵乘法。不过这里加法被xor取代,乘法有三种情况要分别处理。尤其要注意,矩阵中的数是8位的,所能表示的最大数为255,所以,左移后要与上255或对256取模。#include #include #include #include using namespace std;int t;unsigned int state[4][4] = { {0x2,原创 2012-08-15 17:19:39 · 1051 阅读 · 0 评论 -
HDU 4358 Boring counting(线段树)
用C++交会栈溢出,而G++不会。更新和查询我用的是线段树,1500+ms,用树状数组应该会快一些。将树形结构转换成线性结构后,等价于求指定区间内恰好出现k次的数有多少个。#include #include #include #include #include #include using namespace std;const int maxn = 100010原创 2012-08-15 00:40:18 · 1995 阅读 · 1 评论 -
HDU 4315 Digital root(线段树)
很不错的线段树题。#include #include #include #include using namespace std;const int maxn = 100010;int tcase, n, q;int a[maxn];/*ldr: 从区间左端点开始的前n项和的数字根的二进制表示 rdr: 从区间右端点开始的后n项和的数字根的二进制表示 idr: 区间内原创 2012-08-14 16:17:44 · 725 阅读 · 0 评论 -
HDU 4310 Hero(贪心)
比较简单的贪心。#include #include #include #include using namespace std;int n;struct Hero { int dps, hp;}hero[22];bool cmp(Hero a, Hero b){ return ((a.dps + b.dps) * a.hp + b.dps * b.hp) < (原创 2012-07-27 18:58:58 · 634 阅读 · 0 评论 -
HDU 4313 Matrix (贪心+并查集)
题意:给你一个有n(2思路:我最开始想到的是:1、将边按权值由小到大排序。2、计算每条边连接的两个子树中分别有多少个机器人。3、然后,枚举每条边,如果该条边所连接的两个子树中都有机器人,则将该条边删除。4、重复步骤2和步骤3,直到枚举完所有的边。5、所删除的边的权值之和就是要求的结果。但是,这样做时间复杂度太高,主要是第2步花了太多的时间。后来,发现,完全可以反过来做,原创 2012-07-27 19:45:09 · 978 阅读 · 0 评论 -
HDU 4318 Power transmission(最短路变形)
#include #include #include #include #include #include #include using namespace std;const int maxn = 50010;int n;struct Edge { int v; double p;}edge;vector v[maxn];int start, end, m;原创 2012-07-27 20:04:41 · 680 阅读 · 0 评论 -
HDU 3954 Level up(线段树)
#include #include #include #include #include using namespace std;const int maxn = 10010;int t, n, k, qw;int need[11] = {0};int maxexp[maxn<<2][11];int add[maxn<<2];void build(int l, int原创 2012-07-22 13:26:52 · 560 阅读 · 0 评论 -
HDU 4302 Holedox Eating (线段树)
#include #include #include #include using namespace std;const int maxn = 111111;int T, L, n;int sum[maxn<<2];void build(int rt, int l, int r){ sum[rt] = 0; if (l == r) retu原创 2012-07-20 00:48:07 · 854 阅读 · 0 评论 -
HDU 2829 Lawrence【斜率优化dp】
题意:大概就是给你n(1将“4 5 1 2”分成一组得到的价值为:4*5 + 4*1 + 4*2 + 5*1 + 5*2 + 1*2 = 49;将“4 5 1 2”分成“4 5”和“1 2”两组得到的价值为:4*5 + 1*2 = 22;将“4 5 1 2”分成“4”和“5 1 2”两组得到的价值为:0 + 5*1 + 5*2 + 1*2 = 17。分析:本题可以用动态规划原创 2012-08-30 09:33:03 · 2799 阅读 · 0 评论 -
HDU 3507 Print Article【斜率优化dp】
斜率优化dp,这篇文章讲的很好。#include #include #include #include #include using namespace std;const int oo = 1LL << 62;const int maxn = 500010;__int64 c[maxn], sum[maxn];__int64 dp[maxn];int q[maxn],原创 2012-08-29 20:40:03 · 1729 阅读 · 0 评论 -
HDU 4258 Covered Walkway【斜率优化dp】
这题跟HDU3507差不多。#include #include #include #include #include using namespace std;const int maxn = 1000010;int n;__int64 c, x[maxn];__int64 dp[maxn];int q[maxn], head, tail;__int64 dy(int原创 2012-08-29 20:44:46 · 991 阅读 · 0 评论 -
HDU 4348. To the Moon【可持久化树状数组】
http://acm.hdu.edu.cn/showproblem.php?pid=4348#include #include #include #include #include #include using namespace std;const int maxn = 100010;int n, m;struct Node { long long d,原创 2012-09-25 20:38:02 · 3465 阅读 · 0 评论 -
HDU 3971. Play With Sequence【线段树+排序】
http://acm.hdu.edu.cn/showproblem.php?pid=3971题意:对有n(0=l且=l且解法:首先可以想到线段树,线段树的每个节点存当前区间的最大值和最小值,当然还有延迟标记。但是,如果就只是这样做,还是会TLE。由于每次更新是将>=l且#include #include #include #include #include using na原创 2012-09-26 00:13:42 · 1548 阅读 · 0 评论 -
HDU 2993 MAX Average Problem【斜率优化dp】
给由n(n=k的子序列的平均值的最大值。本题O(n^2)的dp算法比较好想,但是n的范围较大,会超时,所以,必须进行优化。这里用到的是斜率优化,《浅谈数形结合思想在信息学竞赛中的应用》这篇论文中有这一题的详细介绍。#include #include #include #include #include using namespace std;const int maxn =原创 2012-08-28 16:59:21 · 1403 阅读 · 2 评论 -
HDU 3401 Trade【单调队列+dp】
题意:已知股票每天的买入和卖出价格、买入上限和卖出上限以及最多能持有的股票数,问n天后的最大收益是多少。#include #include #include #include #include using namespace std;const int oo = 1 << 30;const int maxn = 2010;int tcase;int t, maxp,原创 2012-08-27 16:49:36 · 1133 阅读 · 0 评论 -
HDU 4262 Juggler(线段树)
2012 ACM/ICPC Asia Regional Online Warmup 1006题#include #include #include #include #include using namespace std;const int maxn = 100010;int sum[maxn<<2];int pos[maxn];int n;void bui原创 2012-08-25 17:20:12 · 982 阅读 · 0 评论 -
HDU 4069 Squiggly Sudoku【Dancing Links精确覆盖】
跟普通的数独有一点点不同,先预处理一下再用Dancing Links进行精确覆盖即可。#include #include #include #include using namespace std;const int maxn = 9*9*9*9*9*4 + 10;const int oo = 1 << 30;const int maxrow = 9*9*9 + 10;co原创 2012-09-04 08:26:58 · 1094 阅读 · 0 评论 -
HDU 4393 Throw nails
因为第i个人第1秒走的距离Fi满足0 #include #include #include #include #include #include using namespace std;const int maxn = 50010;int t, n;struct Player { int k, s, id, dis;};Player p[maxn];原创 2012-08-25 01:22:05 · 1005 阅读 · 0 评论 -
POJ 1084 Square Destroyer【Dancing Links重复覆盖】
Square DestroyerTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 2695 Accepted: 1101DescriptionThe left figure below shows a complete 3*3 grid made with原创 2012-09-04 14:27:39 · 2374 阅读 · 0 评论 -
HDU 3498 whosyourdaddy【Dancing Links重复覆盖】
有n个单位的敌人,对某个敌人进行攻击时该敌人以及与其直接相邻的敌人都会被消灭。问消灭所有敌人所需的最少攻击次数。重复覆盖问题。我把此题贴出来是想说剪枝优化很有必要,一个小细节就能决定是TLE还是AC。#include #include #include #include #include using namespace std;const int maxn = 60*60原创 2012-09-04 09:59:02 · 698 阅读 · 0 评论 -
HDU 2295 Radar【二分+Dancing Links重复覆盖】
重复覆盖不同于精确覆盖,要求是在0/1矩阵中选择最少的行使每一列至少有一个1。进行重复覆盖时要使用估价函数来剪枝。这题二分雷达半径,找到能将所有城市覆盖的最小半径即可。#include #include #include #include #include using namespace std;const int maxn = 50*50 + 10;const i原创 2012-09-04 08:35:12 · 867 阅读 · 0 评论 -
HDU 4339 Query(线段树)
Problem DescriptionYou are given two strings s1[0..l1], s2[0..l2] and Q - number of queries.Your task is to answer next queries: 1) 1 a i c - you should set i-th character in a-th string to c原创 2012-08-03 15:39:48 · 672 阅读 · 0 评论 -
HDU 4328 Cut the Cake(动态规划)
Problem DescriptionMark bought a huge cake, because his friend ray_sun’s birthday is coming. Mark is worried about how to divide the cake since it’s so huge and ray_sun is so strange. Ray_sun is a原创 2012-08-02 19:19:30 · 700 阅读 · 0 评论 -
HDU 4325 Flowers(线段树)
线段树的区间更新和单点查询。需要注意的是要把区间端点和查询的点都先读入并离散化。#include #include #include #include #include #include #include using namespace std;const int maxn = 100100;int tcase, n, m;int sum[maxn<<2], add[m原创 2012-08-01 20:21:05 · 974 阅读 · 4 评论 -
hdu 3572 Task Schedule
~~最大流~~建图:把每个任务和每一天都看做一个点,添加源点和汇点。源点与每个任务之间连一条边,容量为完成该任务所需处理次数。若第i个任务可以在Si至Ei天处理,则由该任务向这些天分别连一条边,容量为1,表示此任务每天只能被处理一次。最后,从每一天连一条到汇点的边,容量为机器数M,表示每天可以处理M个任务。若求出的最大流等于所有任务需要处理的次数之和,说明能完成任务;否则,不能完成任务。#原创 2012-02-07 19:39:06 · 2711 阅读 · 1 评论 -
hdu 3397 Sequence operation (线段树+区间合并+双Lazy标记)
给你一个长度为n的0、1序列,然后对该序列进行m次操作(10 a b 将[a, b]上的所有数变为0;1 a b 将[a, b]上的所有数变为1;2 a b 将[a, b]上的0变成1,1变成0;3 a b 输出[a, b]上1的个数;4 a b 输出[a, b]上最长的连续的1的数目。刚开始做的时候就想用两个Lazy标记,一个覆盖标记,一个异或原创 2012-02-08 19:59:49 · 998 阅读 · 0 评论 -
hdu 3308 LCIS (线段树+单点更新+区间合并)
题意:给定n个数,然后对这n个数进行m次操作。一种操作是将第A个数替换成B,另一种操作是询问区间[a,b]是的最长连续递增子序列的长度。 分析:每个节点分别记录包括左端点的LCIS、包括右端点的LCIS和区间上的LCIS。 代码如下:#include #include #include using namespace std;const int maxn = 100原创 2012-02-04 21:13:55 · 644 阅读 · 0 评论 -
HDU 4004 The Frog's Games
/* 先求出青蛙步长的下限和上限,再二分即可 */#include #include #include #include #include #include using namespace std;const int MAXN = 500010;int l, n, m, dis[MAXN];int Max; // 相邻石头间距的最大值,亦即青蛙的最小步长 bool can原创 2012-01-18 18:00:14 · 852 阅读 · 0 评论 -
HDU 1217 Arbitrage
#include #include #include #include #include #include #include using namespace std;const int MAXN = 32;map SIMap;double mat[MAXN][MAXN];int n, m, cas = 0;void init(){ cas++; SI原创 2012-01-15 22:20:22 · 564 阅读 · 0 评论 -
HDU 4028 The time of a day
看完题目后觉得要用dp,但是数据量太大,搞不定。看了解题报告后才知道可以用map来离散化。代码如下:#include #include #include using namespace std;const int MAXN = 42;__int64 gcd(__int64 x, __int64 y){ if (y == 0) return x; return g原创 2012-01-14 21:02:15 · 543 阅读 · 0 评论 -
HDU 4082 Hou Yi's secret
// 有几点要注意:// 1、输入的点要去重// 2、枚举三角形时要判断是否合法#include #include #include #include #include #include using namespace std;struct Pos{ int x, y;}p[20];struct Triangle{ int a, b, c; //原创 2012-01-16 12:20:02 · 1158 阅读 · 0 评论 -
HDU 4034 Graph
#include #include using namespace std;const int MAXN = 105;int map[MAXN][MAXN];int main(){ int t, n, ans; bool flag; scanf("%d", &t); for (int cas = 1; cas <= t; ++cas) {原创 2012-01-14 14:53:36 · 507 阅读 · 0 评论 -
hdu1542 Atlantis (线段树+扫描线)
#include #include #include #include #include using namespace std;const int maxn = 210;double len[maxn<<2]; // 区间被覆盖的长度 int cover[maxn<<2]; // 区间被覆盖次数 double yy[maxn]; // 用于存储y坐标 ma原创 2012-03-07 23:17:34 · 1118 阅读 · 0 评论 -
HDU 3642 Get The Treasury (线段树、扫描线求立方体体积交)
给定n个立方体,求这些立方体覆盖两次以上的体积。之前做过求矩形面积交的题,这题可以转化为求矩形面积交。先对y坐标和z坐标离散化,然后枚举每个z轴区间,求在该区间内矩形覆盖两次以上的面积,再乘以该区间宽度,即为该区间覆盖两次以上的体积。由于更新节点时有些地方没考虑好,TLE和WA了几次。#include #include #include #include #include #in原创 2012-03-14 17:01:55 · 1247 阅读 · 0 评论 -
HDU 3255 Farming
这题可以转化为求长方体体积的并,将每块地的价值看做高。然后求解就与上一篇差不多了。#include #include #include #include using namespace std;const int maxn = 60006;int cov[maxn<<2], len[maxn<<2];int yy[maxn];int ss[5], zz[5];map my原创 2012-03-15 13:09:29 · 648 阅读 · 0 评论 -
HDU 2874 Connections between cities [LCA]
题目给出的图不一定连通,可以虚拟一个根节点。查询时,若LCA(u, v)为根节点,则表示u,v不相连;否则,求出最短距离。#include #include #include #include #include #include using namespace std;const int maxn = 10010;int n, m, c, cnt;int e[maxn<<1]原创 2012-05-26 13:39:13 · 541 阅读 · 0 评论 -
HDU 1011 Starship Troopers (树形DP+依赖背包)
dp[i][j]: 以i为根的子树花费为j时的最大收益。dp[i][j] = max(dp[i][j], dp[i][j-k] + dp[son(i)][k])#include #include #include #include #include using namespace std;const int maxn = 111;int n, m;vector son[原创 2012-05-16 22:17:10 · 718 阅读 · 0 评论