
二分/三分
Bahuia
软件工程博士
展开
-
51Nod - 1133 dp + 二分 + 维护最大值
题意:X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。Input第1行:1个数N,线段的数量(2 <= N <= 10000)第2 - N + 1行:每行2个数,线段的起点和终点(-10^9原创 2016-12-30 16:21:22 · 409 阅读 · 0 评论 -
CF Round#424(div2)D题 二分+贪心
题意:题目链接:http://codeforces.com/contest/831/problem/D n个人,k把钥匙,一个门,每个人都需要拿到一把钥匙然后去开门,每走一个需要一个单位时间,一把钥匙只能给一个人用,问所有人都开门的最短时间是多少。思路:最大值最小化,二分。 对于判断函数,需要知道在限定的时间内是否所有人都能拿到钥匙开门。贪心思路,一开始想复杂了,认为求出每个人在限定时间内可以拿原创 2017-07-15 10:30:26 · 376 阅读 · 0 评论 -
HDU 6030 DP + 矩阵快速幂
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6030 有红蓝两种颜色的珠子构成一个串(不是环),需要满足在任意长度为素数的区间内,红色珠子数目都要不小于蓝色珠子数目,问长度为n的情况下一共有多少种可能组成的项链。思路:递推。dp[i][0]表示长度为i且末尾为蓝色珠子的方案数,dp[i][1]表示长度为i且末尾为红色珠子的方案数,可以得到转移原创 2017-07-16 16:28:49 · 337 阅读 · 0 评论 -
HDU 4717 三分板子
题意:n个点有起始坐标,以及速度向量,问从t=0开始两个点的最远距离的最小值是多少。思路:两点之间的距离是二次函数,凹函数,取最大值还是凹函数。求此凹函数的最小值,直接套三分。代码:#include using namespace std;const int MAXN = 305;const double eps = 1e-6;struct point {原创 2017-09-05 20:58:56 · 436 阅读 · 0 评论 -
HDU 4080 字符串哈希+二分
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4080 找到一个字符串中出现超过m次的最长的子串,以及该子串最有出现的起点。如果有多个相同的就选择最右端出现的。思路:二分长度,然后哈希统计子串出现次数。代码:#include <bits/stdc++.h>using namespace std;typedef unsigned long l原创 2017-09-15 20:35:17 · 598 阅读 · 0 评论 -
POJ 3261 后缀数组+二分
题意:题目链接:http://poj.org/problem?id=3261 在一个字符串S中求至少出现k次的最长的字符串的长度。思路:经典题,后缀数组+二分 注意此题需要离散化。代码:#include <cstdio>#include <vector>#include <algorithm>using namespace std;const int MAXN = 2e4 + 10;c原创 2017-09-20 19:06:23 · 305 阅读 · 0 评论 -
HDU 3943 二分+数位dp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3943 在区间[P,Q]中找到第k大的数位上还有x个4以及y个7的数。思路:二分+数位dp。代码:#include <bits/stdc++.h>using namespace std;typedef long long LL;LL p, q, x, y, k;int a[25];LL d原创 2017-09-30 08:43:12 · 538 阅读 · 0 评论 -
POJ 2774 (最长公共子串)后缀数组+二分
题意:题目链接:http://poj.org/problem?id=2774 求两个字符串中最长的公共子串思路:将两个串合并成一个,然后二分长度,判断时要看同一组中属于前一串的后缀喝属于后一串的后缀是否都存在。代码:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long原创 2017-09-22 15:21:56 · 419 阅读 · 0 评论 -
HDU 5769 后缀数组+二分
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 求一个字符串中包含字符x的不同子串有多少个思路:处理出height数组,对于每个后缀i,二分得出i之后的第一个字符x的位置,max(x,sa[i]+height[i])之后的位置结尾得到的字符串都是唯一的,相见代码。代码:#include <bits/stdc++.h>using nam原创 2017-09-22 15:57:30 · 519 阅读 · 0 评论 -
CF - 749D 二分 + 思维
题意:给出一串拍卖的出价序列(a,b),其中a是出价人的id,b是出的价格,保证没有任意两个a相同,b也按照从小到大的顺序排列。现在有q个询问,每个询问给出k个id,求在这k个id不存在的情况下,出价最高的id和价格是多少?另外要注意,如果去掉了部分出价之后,如果出现相邻两个出价的a相同,取前一个作为最后结果。思路:最关键的一点是,要想清楚,去掉了一部分人之后,最后出价最高的人就是剩下的人中一开始出原创 2017-04-18 16:56:01 · 396 阅读 · 0 评论 -
hihocoder - 1483 二分 + 尺取法
题意:给出n个数,然后定义一个v(l,r)为下标区间[l,r]中相同的点对数,如对于1,1,1这个序列来说,v(1,2)=1,v(1,3) =3,v(1,1)=0。要求所有n*(n+1)/2个区间的价值第k小的是多少。思路:这题没做出来确实不应该。想到了尺取法,结果没想出来二分验证来找第k小的。二分答案x=(l+r)/2,每次判断价值能大于x的区间有多少个,如果这个数目大于n*原创 2017-03-19 17:30:40 · 656 阅读 · 0 评论 -
51Nod - 1521 STL +二分
题意:爱丽丝和鲍博喜欢玩一维战舰的游戏。他们在一行有n个方格的纸上玩这个游戏(也就是1×n的表格)。在游戏开始的时候,爱丽丝放k个战舰在这个表格中,并不把具体位置告诉鲍博。每一只战舰的形状是 1×a 的长方形(也就是说,战舰会占据a个连续的方格)。这些战舰不能相互重叠,也不能相接触。然后鲍博会做一系列的点名。当他点到某个格子的时候,爱丽丝会告诉他那个格子是否被某只战舰占原创 2016-12-21 09:55:44 · 566 阅读 · 0 评论 -
51Nod - 1065 二分
题意:N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的。例如:4,-1,5,-2,-1,2,6,-2。-1,5,-2,-1,序列和为1,是最小的。Input第1行:整数序列的长度N(2 <= N <= 500原创 2017-01-18 20:35:52 · 362 阅读 · 0 评论 -
HDU - 6012 枚举 + 二分
题意:问题描述这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望。Lotus将所有的nn株盆栽都放在新建的温室里,所以所有盆栽都处于完全相同的环境中。每一株盆栽都有一个最佳生长温度区间[l,r][l,r],在这个范围的温度下生长会生长得最好,但是不一定会提供最佳的研究价值(Lotus认为研究发育不良的盆栽也是很有研究价值的)。Lotus进行了若干次试验原创 2017-01-22 08:47:36 · 598 阅读 · 0 评论 -
51Nod - 1272 单调队列 + 二分
题意:给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对。每个元素和自己也可以组成一对。例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标):(0,0), (0, 2), (1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (3, 3), (3, 4), (4, 4),原创 2017-01-22 10:40:13 · 634 阅读 · 0 评论 -
HDU - 5726 RMQ + 二分
题意:给出一串n个数的序列,然后给q个询问,每个询问查询在下标区间[l,r]的数的gcd是多少,然后问这n个数中有多少个区间的gcd等于这个询问的gcd。思路:求解gcd,没有修改操作,可以想到用RMQ,可以O(1)查询。剩下的是怎么求每个gcd对应有多少个区间。从左向右枚举左端点,那么可以发现左端点l固定的情况下,gcd会随着向右而不递增。这就有了二分的性质,我们二分出每个gcd原创 2017-03-17 21:06:32 · 334 阅读 · 0 评论 -
51Nod - 1821 思维题 + 并查集 + 二分
题意:一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i。给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个数k,要求选择一个S2的子集S3(|S3|(集合元素可以重复)Input第一行一个数n,(n<=1000)接下来n行,每行描述一个集合:第一个数m,表示集合原创 2017-03-08 16:43:24 · 540 阅读 · 0 评论 -
51Nod - 1478 单调栈 + 二分
题意:找出一串括号序列中的最长的合法子串的长度以及数目。思路:如果对于括号序列,'('表示+1,')'表示-1,一串合法的括号序列要保证这样的前缀和序列首尾都是0,且序列中间的前缀和值不能小于0。对于这道题来说,找到每个前缀和sum[p]之后与之相邻最远的且相同的前缀和的位置q,那么[p+1,q]这一段就是以这个p+1开头的最长的合法括号序列。这里可以对于每个位置p利用单调栈求原创 2017-03-05 12:43:21 · 366 阅读 · 0 评论 -
HDU - 3585 最大团 + 二分
题意:给出n个点,要求在其中找到k个点,使得任意两个点的最短距离最大。思路:最大化最小值,很明显要二分答案判断是否可行,关键是判断可行的方案,直接对于这n个点求一个最大团,这个团满足任意两个点的距离都要大于等于当前二分的答案,看这样求出的最大团的大小是否大于等于k。代码:#include #include #include #include #include原创 2017-03-06 18:25:30 · 399 阅读 · 0 评论 -
HDU 5649 线段树+二分
题意:题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5649 n个数的排列,两种操作,一种将[L,R]区间内的数递减排序,另一种将[L,R]中的数递增排序,问最后第k个位置的数字是多少。思路:好题。 因为最后考虑的只是第k个位置的数字,二分答案。 每次将序列中比x大的都标记为1,其余包括x标记为0,每次排序前,先查询区间中有多少个1和原创 2017-10-04 11:40:03 · 727 阅读 · 0 评论