自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

关于学习本身

很久不在

  • 博客(39)
  • 问答 (1)
  • 收藏
  • 关注

原创 !SPOJ 1043 多次查询区间最大连续和-线段树

题意:已知一个数列,现在有多次查询(a,b),查询区间[a,b]的最大连续和。分析:这道题没有更新操作,只有区间查询操作。动态在于待查询区间不同,最大连续和也不同。所以其实相当于每次查询的时候要计算一次待查询区间的最大连续和。有3种情况:1.待查询区间包含当前区间。那么就直接返回当前区间的最大连续和;2.待查询区间在当前区间的左区间或右区间。那么在左或右区间递归查询即可;3

2015-08-19 01:13:31 2058

原创 HDU 4268 AliceBob大牌覆盖小牌-思维(贪心+multiset)

题意:Alice有n张牌,Bob有n张牌,A能覆盖B当且仅当A的长宽不小于B的长宽,现在输入他们的牌的长宽,求最多能覆盖多少张。分析:思维。先分别按长的降序排序,然后遍历A,每次都从B中选出长小于等于A的长的牌,把他们的宽放进multiset,然后利用lower_bound()函数找出A的宽能覆盖的最长的宽从multiset中删除。以此类推。这样做就保证了局部操作的最优性,这也是这题的贪心

2015-08-17 22:41:46 736

原创 !POJ 2352 左下角星星-线段树-(单点更新,区间查询)

题意:直接坐标系中有n个星星,每个星星左下角的星星个数是它的价值,输出价值为0~n-1的星星个数。分析:这题就没有上面四道线段树的题裸了。这题是怎么联系到区间,然后用线段树维护的呢?因为题目要求输入的次序是按y第一关键字,x第二关键字升序输入,那么我们可以想到对于星星A(x,y),它左下角的星星一定在比他先输入的星星中,所以我们只需判断在比他先输入的星星的x2,如果x2代码:

2015-08-17 21:35:08 1283

原创 HDU 1556 给连续个球涂色-线段树-(区间更新,单点查询)

题意:有n个球,1~n,n个操作:(a,b),意思是把区间[a,b]里的球都涂一遍色,n次操作后,问每个球分别被涂了多少次。分析:区间更新,单点查询。一般区间更新都要用lazy[rt],不然对线段树的更新操作就退化为了暴力更新,会超时。代码:#include#include#includeusing namespace std;const int maxn=100000;

2015-08-17 19:08:52 913

原创 HDU 1166 敌兵布阵-线段树-(单点更新,区间查询)

题意:n个敌兵的阵营,多个操作:add a ,x:第a个阵营增加x个人;sub a,x:第a个阵营减少x;query a,b:查询区间[a,b]的总人数。分析:单点更新,区间查询。直接写。代码:#include#include#includeusing namespace std;typedef long long ll;const int maxn=50000;int

2015-08-17 19:03:13 640

原创 HDU 1754 多个学生偷改成绩问最高分-线段树-(单点更新,区间查询)

题意:n个学生有初始成绩,现在有m个操作,(Q,a,b):询问区间学号为[a,b]的学生的最好成绩;(U,a,b):修改学号为a的学生的成绩为b,要你执行这m项操作。分析:单点更新,区间查询。确切的说是单点替换,区间查询。线段的典型用法之二。代码:#include#include#include using namespace std;const int maxn=2000

2015-08-17 02:02:57 993

原创 HDU 1698 Dota钩子问题-线段树-(区间更新,区间查询)

题意:一段挂钩分成n段,每一段可以由铜、银、金做成,对应的价值分别是1,2,3,现在有m个操作(a,b,x)意思是改变区间[a,b]段的钩子为材质x,问m个操作之后这段挂钩的价值总和。挂钩的每一段初始为铜,也就是1。分析:区间更新,单点查询。确切的说是区间替换,询问总区间总和。线段树的典型应用之一。因为是区间更新,所以用 lazy[rt] 数组记录当前子树是否曾经更新过,lazy[rt]!

2015-08-17 01:47:58 886

原创 Gym 100625D 已知一条边追踪游人-最短路径-(两次dijkstra算法)

题意:有一群人在图上行走,这群人只走最短路径,你知道图的结构、他们的起点和几个给定的终点,还知道一条他们经过了的边,现在通过这条边在给定的终点中找出他们可能的终点。分析:

2015-08-14 23:25:46 855

原创 POJ 1181 大整数是否为素数以及求大整数的质因数-数论-(Miller_rabin+Pollard_rho)

题意:求一个整数是否是素数,如果不是,则输出它最小的质因数。分析:判断一个大整数是否为素数用Miller_rabin算法,求一个大整数的所有质因数用Pollard_rho算法。这题就是直接套模板。另外这里的gcd和pow_mod不能用一般的方式,T了。代码里我注释掉的就是T了的写法。代码:#include#include#include#include#include

2015-08-14 19:04:47 1365

原创 !Gym 100625J 狱警放两犯人的最小开门数-bfs-(优先队列+bfs,求各自到交点的距离)

题意:二维矩阵,狱警从外面到里面去放两个犯人,问中途需要开的门的最小的次数。分析:这题从外面进去,那么只要是矩阵边缘可走的点(除了墙壁的点)都可作为起点,还有两个终点,所以直接枚举起点再搜索是不可行的。这题的做法是用三次bfs,分别求得从外面到每一个可走点的最小距离(开门次数)、两个犯人到每个可走点的最小距离,然后遍历一遍矩阵,把三个距离加起来,更新答案即可。求矩阵外面到矩阵里的最小距离是

2015-08-14 16:06:00 1749

原创 POJ 2115 for求循环次数-数论-(同余方程+扩展欧几里得算法)

题意:给定for循环的初始值,结束值和增量,还有一个模,求最少的循环次数。分析:读完题后应该就知道是一个同余的概念,所以就是解一个一元一次同余方程,像上题一样用扩展欧几里得算法。这题的trick点是k最大为32,那么2^32超出了int,要用long long,所以在1代码:#include#include#include#include#include#include

2015-08-14 02:31:36 1162

原创 POJ 1061 青蛙绕地球约会-数论-(解一元一次同余方程+扩展欧几里得算法)

题意:两只青蛙同向跳,起点是x,y,每次分别跳m,n米,地球周长是L,求最少跳几次相遇。分析:把式子写好就发现是一个一元一次同余方程。用扩展欧几里得算法来求。这题很基本得会。代码:#include#include#include#include#include#include#define INF 1000000007using namespace std;long

2015-08-14 02:00:39 1053

原创 Gym 100625C 密文匹配-模拟题-(map)

题意:已知n个明文和一个密文,推出可能的匹配关系,然后输出字符串ss的密文。分析:一个模拟题,当时想偏了,还想着要同一字母可能在任意位置,然后要记录每个字母的位置,找密文的相应位置必须是同一字母,balabala的,不知道什么鬼。其实就是简单的对应关系,不用管位置啥的,只管同一字母对应的密文是一样的就行了。26个字母,枚举一遍就是了。对应关系匹配啥的用map是最好不过的了。小tirck

2015-08-14 01:00:30 1002

原创 Gym 100625H 多边形面积-计算几何

题意:输入多边形的n个顶点,现在假设在第一二个顶点连线的中点有一个照相机,这个相机的视角与这条边的夹角是45度,求阴影的面积和多边形总面积的比值。分析:纯粹的几何题,会用向量求面积、交点、判断点在不在两点之间就行了。熟能生巧。代码:#include#include#include#include#define eps 1e-10using namespace std;con

2015-08-13 18:47:15 844

原创 !HDU 5371 最长双回文串(多校7)-卡时间-(manacher+排序+set+lower_bound())

题意:给定一个有n个数字的序列,找出一个连续的子序列满足这样的条件:平均分成三段,第一段与第三段一样,第二段是第一段的倒序。求这样的子序列的最大长度。数据范围:n~100000分析:上面的条件抽象出来其实就是双回文串,所以题目就是求一个序列的最长双回文串。主体做法是:1.先用manacher算法O(n)求出每个元素的最大回文半径;2.把每个元素看成一个圆心,那么两个点能构成双回

2015-08-12 01:42:19 1031

原创 Gym 100625A 间谍租车问题-简单模拟-(map的使用)

题意:输入多种车的事故赔偿价格、租车起步价、每千米单价,输入多个人的多种事件(租车、还车、发生事故),按名字字典序输出每个人的总费用,如果信息不完整或不合法输出“inconsitent"(租车、事故、还车的顺序得对,一个人同时期不能租多辆车,租车还车要完整不能只租不还或没租却还)分析:这题就是一个简单的模拟,复杂在我不知道怎么用string做关键字,知道了map,一切都好办了。小trick:一

2015-08-11 18:28:55 1134

原创 !HDU 4380 三角屋内有奇数个宝藏的三角形有多少个-计算几何-(向量叉乘&线段与点的关系&暴力枚举)

题意:小明要买三座房子,这三个房子构成一个三角形,已知n个房子的坐标,任何三个房子都不在一条直线上,又已知有m个宝藏的坐标,问房子构成的三角形内有奇数个宝藏的三角形有多少个。数据范围:n(3~100),m(1~1000)分析:简单的计算几何。记住这题的做法。三角形内的点的个数=上面的线段下面的点的个数 -- 下面两条线段下面的点的个数(或者下面一条线段减上面两条线段,看具体位置情况,所

2015-08-07 23:17:28 1492

原创 HDU 5363 元素为1~n的集合有多少个子集的元素和为偶数-思维-(快速幂取模)

题意:一个集合有元素1~n,求他的子集满足这样的条件:子集的所有元素的和是偶数,问有多少个这样的子集分析:一个排列组合问题。元素和为偶数,那么奇数肯定要调偶数个,偶数就无所谓了,所以偶数有2^(n/2)种选法,再乘以奇数有(C((n+1)/2,0)+C((n+1)/2,2).....)种选法,再减一,除去空集,注意,上面取奇数的时候用的是(n+1)/2(这里是向下取整的除法),是综合n为偶

2015-08-07 00:44:23 2249

原创 HDU 4365 正方形格子涂色中心对称轴对称的涂法有多少种-思维-(矩阵坐标关系&快速幂取模)

题意:n*n的格子,涂色,有k种颜料,必须满足旋转任意个90度和翻转之后图片的样子不变,现在已经有m个格子涂过色了,问还有多少种涂法满足上述条件。分析:满足上述对称条件,那么涂色的种类问题我们可以放在正方形的一个角来做,因为一个角确定了其他角的颜色也就确定了。以左上角的下半角为例。共有1+2+....+(n+1)/2个格子,然后记录涂过色的格子对应到这个三角形里的格子数目,用tot来记

2015-08-07 00:03:50 2852

原创 !HDU 5305 朋友关系网一半网友问题-dfs-(暴力搜索)

题意:有n个人,m个朋友关系,现在每个人的朋友中必须一半是online一半是offline,问你有几种分配方案。分析:昨天一看这题就知道自己做过,无奈想不起来啊,没做出来我就知道应该上一次也没做出来,果然是。勤补题才是王道。这题用深搜。搜索还是不太会用,这题我自己做的话估计怎么也想不到用dfs。努力啊少年。代码:#include#include#include#inclu

2015-08-06 22:28:28 942

原创 HDU 5344 多个数的和异或-思维-(位运算)

题意:n个数的两两做和,然后异或分析:异或的性质:两个相同的数异或为0,所以Ai+Aj异或Aj+Ai等于0,所以最终结果就是Ai+Ai的异或代码:#includelong long t,n,m,z,l;long long a[1000005];int main(){ scanf("%I64d",&t); while(t--){ scanf("

2015-08-06 00:32:24 2914

原创 HDU 4371 AliceBob之生成数列直到大于n或者小于等于S(i-2)-思维-(由已知条件推最优步骤)

题意:已知n、d1、d2....dm,Alice先生成一个数S1=0,Bob再生成一个数S2=S1+dk,之后他们生成的数遵循这样的条件:Si=S(i-1)+dk,或者Si=S(i-1)-dk,其中1分析:既然想不出什么直接搜索之类的方法,那么一定就是找规律了。这题我们来推一下他的条件得到每个人每一步的最利于自己的做法。考虑三个数:S(i-2),S(i-1),Si,假设当前步骤是生成S

2015-08-05 22:16:38 813

原创 HDU 4362 多时段多地点找龙珠-dp-(数塔模型)

题意:一个时间点在数轴的不同位置有龙珠,但每个时间点只能且必须收集一个龙珠,在不同的位置收集龙珠会损失不同的能量,移动距离也会损失能量,求m段时间后损失的最小能量。分析:就是一个数塔的dp模型,跟免费馅饼还有多时段多课问题一样。dp[i][j]:第i段时间第j的位置的最小能量损失;转移:dp[i][j]=min(dp[i+1][k]+|a[i][j].pos-a[i+1][k].pos

2015-08-05 21:42:59 1074

原创 HDU 5349 动态插入删除查询数据-multiset

题意:动态的插入删除查询数据,允许数据重复分析:一看就是个multiset,直接做。STL大法好。代码:#include#include#include#include#include#includeusing namespace std;int n;int a;multiset s;int main(){ while(scanf("%d",&n)!=EO

2015-08-05 12:25:50 559

原创 HDU 4357 字符交换位置无数次变成另一个字符串-YY-(神题

题意:有两个字符串,第一个字符串的任意两个字符可以交换位置,交换位置后的两个字符要+1,也就是a变成b,z变成a,问第一个字符串能否最终变成第二个字符串。分析:神题!长度为2的和长度大于2的分开讨论,但是都是直接yy大法。长度为2的好想,自己想。长度大于2的,这篇博客写得很详细点击打开链接,谢谢博主。代码:#include#includeusing namespace

2015-08-04 22:24:20 1685

原创 !HDU 4345 置换群的环长有多少种-dp

题意:置换群,问环的长度有多少种分析:环的长度就是每次你选择的区间长度的最小公倍数。总区间长度是n,那么这道题就是求和等于n的各个数的最小公倍数有多少种。状态:dp[i][j]前i个质数,区间长度不超过j的最优解转移:dp[i][j]=dp[i-1][j]+dp[i-1][j-k],k=prim[i]^1,2...这题和上一题的dp难哭我了。代码:#include#i

2015-08-04 22:06:22 835

原创 !HDU 4359 左子树节点和小于右子树的树有多少种-dp

题意:n个节点,每个节点的权值为2^0,2^1....2^(n-1),求满足任何节点的左子树的节点和小于右子树的节点和的分配方案有多少种分析:由于等比数列的性质:1+2+....2^(k-1)情况有:1.只有左子树,2.只有右子树,3.都有dp[i][j]:表示选i个节点深度转移:dp[i][j]+=C(i-2,k)*dp[k][j-1]*dp[i-1-k][j-1],这里用到

2015-08-04 21:57:34 1406

原创 HDU 4349 组合数的奇数个数-杨辉三角&Lucas定理

题意:给你一个n,求C (n,0),C (n,1),C (n,2)...C (n,n),奇数的个数。分析:Lucas定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  modp同余

2015-08-04 21:31:54 1758

原创 !HDU 4346 插旗子RGR的插法有多少种-思维&正难则逆&思维!

题意:只有R和G两种旗子,美丽的插法是存在两个R的中点插G的情况,现在给你一个字符串代表现在有些地方已经插了,求美丽的插法有多少种分析:美丽=总 — 不美丽所以我们来求不美丽有多少种。这里就是思维的问题了:一个不美丽的序列必须满足的条件是任何两个相邻R的距离为奇数并且所有的相邻R的距离相等。奇数这是显然的,如果两个相邻的R不为奇数,那么它们的中点存在,并且是G,这与不美丽矛盾;

2015-08-04 20:54:35 913

原创 HDU 4343 多查询求区间内的最大不相交区间个数-思维&贪心-卡时间&二分&剪枝

题意:给你一些区间,现在有m个查询,求出每个查询的区间内的最大的不相交区间个数分析:几天前那道说谎问题时用dp的摞箱子模型求的最大的不相交区间个数,但是这题不能用这个方法,因为这题是动态的查询,不可能每个查询dp一次,超时。这题用贪心策略。求区间[l~r]里的最大不相交区间,贪心策略就应该先选该区间内右端点最小的,这样给以后待选的区间留下更大的空间,所以我们的做法就是先按照区间的右端点

2015-08-04 20:31:52 1502 2

原创 !HDU 4313 破坏导弹攻城计划-连通图-(最小生成树变形)

题意:有n个城市,城市之间有n-1条路连接每个城市,也就是说有一个树,敌人在一些城市放了导弹,共有m个导弹,敌人想把导弹运到一起然后开战,现在给你个任务就是摧毁一些路,使任何两个导弹都不能运到一起,摧毁每条路都有相应的代价,求最小的代价。分析:导弹不能运到一起就是说任何两个导弹不能在一个连通图中,所以我们的任务就是用最少的代价摧毁一些路使m个导弹分别在m个连通图中。这题是就反面,最少的

2015-08-03 18:20:40 794

原创 HDU 4312 最小切比雪夫距离-转化成曼哈顿距离再分治

题意:二维空间,n个点,求以某点为起点到各点的最小切比雪夫距离分析:上一道题之前已经用“分治“思想在O(n)的时间内求出了n个点,以某点为起点到各点的最小曼哈顿距离,那么我们根据二维空间切比雪夫距离和曼哈顿距离的关系,可以把切比雪夫距离转化成曼哈顿距离,再直接用之前的方法即可。二维空间:曼哈顿距离 :d=|x1-x2|+|y1-y2|,到某点的曼哈顿距离为r的点组成一个边长为√2*

2015-08-03 18:10:10 2594

原创 HDU 3853 向下向右找出口问题-期望dp

题意:初始状态在(1,1)的位置,目标是走到(n,n),每次只能向下向右或者不移动,已知在每个格子时这三种情况的概率,每移动一步消耗2的魔力,求走到终点的使用的魔力的期望。分析:简单的期望dp,套用之前的框架,但是这题不是+1,而是+2,因为每次多加的那个数字是走一步的消耗,这里是2!注意p1[i][j]==1时不能计算dp[i][j],看式子就知道了,分母不能为0。代码:#inclu

2015-08-02 00:58:25 841

原创 !HDU 4311 最小曼哈顿距离-思维&卡时间-(横纵坐标分开算,排序)

题意:有n个点,求以这n个点中的某一点为起点,到各点的曼哈顿距离和最小是多少分析:暴力枚举又要超时,这种题一般都是考思维了,多半都是用技巧找到一个高效的方法。个人觉得这题跟上一篇文章的题是一个类型。这题也是用“分治”,虽说题目要求的是曼哈顿距离,但是我们为什么真的就要一步到位的求呢,可以横纵坐标分开求,先x排序,然后遍历一遍,求出横坐标的距离,然后y排序,遍历一遍求出坐标的距离加在刚才

2015-08-02 00:14:03 3780

原创 !HDU 4334 集合各出一数和为0是否存在-思维、卡时间-(指针的妙用)

题意:有5个集合,集合的大小是n,每一个集合出一个数,问能不能找到五个数的和为0。数据范围:T分析:暴力枚举是n^5*T,超时,那么就要用一些技巧了。这里有一个指针的妙用:如何在O(n)的复杂度找A,B,使得A+B==C(A,B分别属于一个数列a,b)。做法是先把a,b分别按升序排序,然后一个指针i指向a的首,指针j指向b的尾,判定指针指向的数的和是否==C,若等于则结束查找,若小于,

2015-08-01 23:31:04 845

原创 HDU 4336 集齐方便面卡片的期望-期望dp 或 容斥原理 -(二进制压缩辅助)

题意:要集齐n种卡片,现已知每打开一袋方便面得到每种卡片的概率Pi,Pi的和小于等于1,求集齐这n种卡片需要买的方便面的期望。分析:一、期望dp,这题要用二进制压缩,这是很显然的。状态:dp[i]现在已经收集了i种卡片到达收集所有卡片的期望。这个状态能转移到的状态有:1).dp[i](下次打开的方便面得到的卡片是已经收集过的);2).dp[i|(1所以方程:dp[i]=Pi * d

2015-08-01 18:26:58 2806

原创 HDU 4355 数轴上的点找使Si^3*Wi最小的和-浮点数三分

题意:一个数轴上有n个点,现在要找一个点到所有点的距离Si的立方乘以点的权Wi的和最小分析:三分。浮点数的二分或者三分可以直接用一个数字来限制查找的次数。TLE了几次,把查找次数从10000改到100就过了,本来以为数据范围比较大,100的精度不够。代码:#include#include#include#include#include#define eps 1e-8#def

2015-08-01 17:56:57 802

原创 POJ 2096 多系统找n种bug需要的天数期望--期望dp

题意:有s种系统,小明来找bug,他每天能找到且只找到一个bug,要求找齐n种不同的bug,且每个系统中至少要找到一个bug,求完成任务的期望天数分析:还是期望dp框架:dp[i][j]:当前状态(找了j种系统,找到i中bug)到达目标状态的期望天数,它能直接到达的状态有这几种:1.j个系统,i种bug;2.j个系统,i+1种bug;3.j+1个系统,i种bug;4.j

2015-08-01 00:40:15 926

原创 HDU 4405 飞行棋求到终点时掷筛子的期望--期望dp

题意:飞行棋,掷筛子,但是如果当前的点有特技的话,可以不用掷筛子而是直接跳到一个指定点Yi,求从起点开始到终点时掷筛子的次数的期望。分析:期望dp模型,框架:dp[i]从当前状态i到达目标状态需要掷筛子的次数的期望,i能到达的状态要么是Yi(用了特技),要么是i+j(j为掷筛子得到的数字),所以状态方程:dp[i]=dp[Yi]或者dp[i+j]*1/6,记得最后要+1.代码:#i

2015-08-01 00:24:27 1510

空空如也

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

TA关注的人

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