
HDU
文章平均质量分 63
jason_star
我要变强!
展开
-
【HDU】5151 Sit Sit Sit(区间DP+排列组合)
题目大意:可以查阅网站的中文翻译,就不说了,是第24场Best Coder思路:这道这道区间DP,我也开始觉得其实区间DP是一种应用型的思想,做这类题目一个重要的点是在于题目情景的把握,这道题的一个情景就是数学的排列组合问题.首先应用根据小区间推出大区间的思路,我们可以先固定一个位置k,k位置是最后做的位置,那么我们要算出在这种情况下符合的方法数,假如k是头或者尾,那不用说,此时的原创 2015-01-27 13:36:43 · 1342 阅读 · 0 评论 -
【HDU】4027 Can you answer these queries? (线段树)
题目大意:对区间的数开方,并向下取整。题目有一个坑点,会出现左边大于右边,然后需要交换左右,而不是不处理。坑!#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#includeusing namespace std;#define MAX 100005#define ls rt<<1#define r原创 2015-03-14 16:21:29 · 590 阅读 · 0 评论 -
【Best Coder】#34 B Building Blocks
题目思路:首先按题解的要找出w区间的方法,我是用long long型的need和out,max(need,out)表示的就是这区间所要移动的积木的数量。然后从左往右移动这个区间,可以发现, 当这个区间往下一个区间移动的时候,发生改变的只是头和尾的值。所以这边我们就不需要重新计算了,只需要将尾减去,加上新进来头的值就可以得到新一个w区间的need和out另外是处理新赠堆的情况。由于题原创 2015-03-22 09:53:10 · 599 阅读 · 0 评论 -
【HDU 3642 求长方体的体积并
思路:很简单就不赘述了,更新父节点的函数注意一下就OK#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeusing namespace std;#define MAX 3005#define ls rt<<1#define rs ls|1#define m (l+r)>>1int sum1[MAX原创 2015-03-17 21:31:02 · 578 阅读 · 0 评论 -
【Best Coder 】 32 B Negative and Positive (NP)
思路:题目是根据所给的规则,判断是否在一个区间i-j的结果等于k。其实要求i-j区间的值我们可以采用1-j的值减去1-i的值即可得到i-j的值。sum[j]-sum[i]=ksum[j]-k=sum[i]问题就可以转化成判断sum[i]是否存在,而sum[i]假如存在的话,一定在求解sum[j]之前求解过了所以我们不妨将求解过的sum[l]全部假如hash表当中,只要对sum[原创 2015-03-09 10:32:39 · 433 阅读 · 0 评论 -
【Hdu】1540 Tunnel Warfare(线段树|区间合并)
题目大意:有N个村子排成一条直线,每个村子都连接了它的左右两个村子(除了最左边和最右边的外),有3种操作,(1)"D x",表示将第x个村子摧毁。(2)"Qx",表示查询与第x个村子直接和间接相连的村子有多少个。(3)"R",表示将上一次摧毁的村子复原。这边有一个需要注意的点是村子可以多次被摧毁,但只需要一次便可恢复。思路:这边我只用两个数组lsum,和rsum其中作用分别是表示左原创 2015-03-06 16:43:40 · 471 阅读 · 0 评论 -
【HDU】3255 求长方体并的体积
#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeusing namespace std;#define MAX 100003#define ls rt<<1#define rs ls|1#define m (l+r)>>1int col[MAX << 2];long long sum2[MAX <<原创 2015-03-17 00:11:19 · 454 阅读 · 0 评论 -
【HDU】3966 Aragorn's Story(树链剖分+线段树)
树链剖分的模板题,思路就不说了, 等做了一些题目之后,在写个总结吧。先说一下这道题错误的地方。1、爆栈。看大神的博客才找到解决的方法。说是hdu的oj是window的系统,容易爆栈所以在之前应该要手动扩栈。在代码之前加上:#pragma comment(linker, "/STACK:1024000000,1024000000")就可以了。2、是在路径的缩短中写错了。原创 2015-03-27 15:33:14 · 532 阅读 · 0 评论 -
【HDU】3308 LCIS (线段树-区间合并)
#define _CRT_SECURE_NO_WARNINGS#include#include#include#includeusing namespace std;#define MAX 100010#define ls rt<<1#define rs ls|1#define m (l+r)>>1int sum[MAX << 2];int lsum[MAX << 2];i原创 2015-03-03 20:33:03 · 565 阅读 · 1 评论 -
【HDU】1225 覆盖的面积(线段树 扫描线)
思路:做到这一题的时候才真正的理解了上一题矩形并面积的思路col[rt]表示这个区间被覆盖了几次,sum[rt]表示这个区间有效的长度。这边需要引入第三个变量sum2[rt]表示这个区间内被覆盖两次以上的有效部分大小,sum[rt]就变成了覆盖一次的长度。这边需要思考的便是uprt函数,即更新父节点的函数。col[rt]假如不等于0,则表示的就是有一个矩形刚好等于或者包含这段区原创 2015-03-15 18:52:05 · 383 阅读 · 0 评论 -
【HDU】1394 Minimum Inversion Number(线段树求逆序数)
题目大意:给一个长度为n的序列(n<=5000),由0~n-1的数字组成。每次把最左边的数挪到最右边形成一个新的序列。那么一共可以形成n个序列。求这n个序列里面最小的逆序数是多少。 AC代码:/*线段树求逆序数思路:线段树求逆序数的方法并没有想象的那么神奇,对于求单个a的逆序数的方法则是在a到max当中寻找已经出现过的数,出现的个数便是该数的逆序数只是这边将个数通过线段树优化了,使得求解更为原创 2015-02-11 19:26:22 · 574 阅读 · 0 评论 -
【HDU】 2795 Billboard(线段树)
sum表示的是区间的剩余容纳长度#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>using namespace std;#define MAX 200005#define ls rt<<1#define rs rt<<1|1#define mid (l+r)>>1原创 2015-02-11 21:36:07 · 555 阅读 · 0 评论 -
【HDU】4135 Co-prime(容斥原理简单应用 质因子的分解)
题目大意:有A到B的数,给定一个N,求在A,B之间的数与N互质的个数。 思路:首先将N质因子分解,然后在A,B之前为其质因子倍数的均与N互质。其中需要考虑交集的情况。奇数个加上,偶数个减去。 AC代码:#include<iostream>using namespace std;int pr_chi[1100];long long cnt,n,ans;long long a, b;void原创 2015-02-06 21:54:38 · 622 阅读 · 0 评论 -
【URAL】1091 Tmutarakan Exams (简单容斥原理)
题目大意:从不大于s的非负数中选择k个,并且k个数的最大公约数大于1,问有多少组。思路:这边我们可以枚举最小公约数,那么最小公约数的个数中选择k个即为一种方案,因为最大数不超过50.所以枚举的最小公约数即为小于30的所有质数。{2,3,5,7,11,13,17,19,23,29}现在可以假设选择了以最小公约数为2的序列,已经最小公约数为3的序列,可以知道,最小公约为6的序列被多原创 2015-02-03 16:14:49 · 871 阅读 · 1 评论 -
HDU 1796 How many integers can you find(简单容斥原理)
题目大意:有一个序列,大小为m,里面有m个不超过20的非负数,各不相同。要求在1-n中有多少个能被m个数中任意一个数整除。题目思路:简单的容斥原理应用。就不说了直接上代码。有两种方法,一种是DFS,一种是直接位元素枚举暴力(study from zhixiaoli)DFS:(速度较快)#include#includeusing namespace std;long long原创 2015-02-03 12:20:04 · 840 阅读 · 0 评论 -
【HDU 2476】String Painter(区间DP)
题目大意:有两个长度不超过100的字符串,A,B,要把A变成B,现在可以连续将N个变成相同的字母,问你至少要变多少次。(N为无限)题目思路:只要该位置不与B的该位置相同,那么就等同于空白,假如相同就可以不画。所以一开始先做一次区间DP,算出从空白画出B的最少次数关键代码为:for (int l = 1; l for (int i = 1; i + l {原创 2015-01-29 17:04:51 · 706 阅读 · 1 评论 -
【HDU】5175 Misaki's Kiss again(反异或|搜索匹配因子做法)
思路:求出n的所有因数 然后设m=n^p[i],p[i]是n的因子,就会得到原来的数,反异或即可。 AC代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long p[10000];long long mid[1原创 2015-02-14 21:36:58 · 626 阅读 · 0 评论