二分
HT008_123
家人们点点关注叭
展开
-
[ICPC2019 南昌站] Eating Plan
题目描述:有一个N的全排列每个位置数的价值是他的阶乘 mod 998857459现在给出m个询问,每次给出一个数,问最短的子段区间和大于等于这个数的时候,这个最短子段的长度是多少, 不存在请输出 -1 (子段和也要 mod 998857459)题目分析:首先 对于M个询问,值大的子段区间长度一定不小于值小的,即如果我们把M个询问离线,按照值升序排列,最后的答案是一个单调不降序列由于mo...原创 2019-12-08 23:56:34 · 489 阅读 · 0 评论 -
[POJ 2318] Toys (向量叉积的基本运用)
题目大意:有一个抽屉,里面有n个隔板,把这个抽屉分成了n+1个区域,编号分别为 0 - n 给出这个抽屉左上角和右下角的坐标,然后给出每一个隔壁上端和下端的横坐标。 给出m个物品的坐标,判断这m个物品属于哪个区域。 最后输出这n+1个区域内物品的个数题目分析:我们需要判断物品是在隔板的左边还是右边,用矢量叉积即可判断。 如果在 i 区域的左方 那么势必也在 i+1…n区域的左方原创 2018-01-29 21:33:23 · 224 阅读 · 0 评论 -
[POJ 2976] Dropping tests
题目描述:给出n个a和b,在这n个数中挑出K个,求最大∑a[i]/b[i]" role="presentation">∑a[i]/b[i]∑a[i]/b[i]\sum a[i]/b[i]题目分析:基本的01分数规划,求出D数组以后排序,取最大的K个。题目链接:POJ 2976代码实现:#include #include #include cons原创 2018-02-01 15:54:19 · 311 阅读 · 0 评论 -
BZOJ 4819:[Sdoi2017]新生舞会 01分数规划+费用流
题目题目分析:二分答案 mid 若C=(a’1+a’2+…+a’n)/(b’1+b’2+…+b’n)<=mid 则a1−mid∗b1+a2−mid∗b2+...+an−mid∗bn<=0a1−mid∗b1+a2−mid∗b2+...+an−mid∗bn<=0a_1-mid*b_1+a_2-mid*b_2+...+a_n-mid*b_n...原创 2018-01-19 15:54:05 · 294 阅读 · 0 评论 -
BZOJ 2102 数颜色
链接 本题有两种解决方式 1:分块 2:莫队 其实都是差不多的。 先给出分块的方法。初始化将整个数组分为若干块。 spre[i]表示在i之前与i相同颜色最近的那个画笔位置。 在每一块里,将pre[i]升序排列。查询若 查询 的[l,r][l,r]在一个块内,我们可以直接暴力查找。 很明显,当spre[i]< l时,即为一个不同的颜色。 当 查询 的[l,r][l,r]不在一个块内时原创 2018-01-05 09:21:52 · 218 阅读 · 0 评论 -
运输计划
题目链接暴力分:贪心20,不写了。正解:二分二分最短的时间。 通过预处理求出每条航线的总时间。 二分一个时间。 是否存在一条边,减下它的时间让所有的大于mid的路,全部小于mid。如何找一条被重复经过的边?树上差分。 对于数组v V[起点,终点]+1,V[lca(起点,终点)]-=2 从i到他的父节点的路径被经过的次数即为i子树v的和。注意要用T原创 2017-10-23 16:52:01 · 289 阅读 · 0 评论 -
斐波那契+数颜色
QAQ 设小兔子编号为x FBi<=x<=FBi+1FB_i<=x<=FB_{i+1} 那么x的父亲即为X−FBiX-FB_i 因为X之前有FBiFB_i生小兔啊 直接暴力模拟就行了#include <cstdio>#include <iostream>#define ll long longusing namespace std;ll fb[200];int get(ll x)原创 2017-11-07 17:05:48 · 286 阅读 · 0 评论 -
P2115 [USACO14MAR]破坏Sabotage
实数二分6的一批 QAQ 设前缀和为 S,则去掉 [i,j] 的平均值为 (S[n]-(S[j]-S[i-1])) / (n-(j-i+1)) <= X S[n] − S[j] + S[i − 1] <= Xn − Xj + X(i − 1) (S[n] − Xn) − (S[j] − Xj) + (S[i − 1] − X(i − 1)) <= 0 S[i-1]-X(i-1)原创 2017-11-05 16:23:09 · 344 阅读 · 0 评论 -
吃巧克力
QAQ 二分答案 坑点: 1:最后剩下的巧克力最后吃 ~~2:先输入总巧克力数,然后再输入天数(哭)~~ 3:别忘了搞方案(更傻)#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>#define ll long longusing namespace std;ll g[99999],t原创 2017-11-05 15:33:33 · 339 阅读 · 0 评论 -
[POJ 2398]Toy Storage
题目描述:跟上一题差不多,只是隔板是乱序的,最后输出的是装有 i 个玩具区域的个数题目链接:传送门AC Code:#include #include #include #include using namespace std;struct Point{ double x,y;};struct line{ Point up,down;};in原创 2018-01-30 09:33:00 · 209 阅读 · 0 评论 -
[POJ 3621] Sightseeing Cows
鸽了好久的01分数规划…思路分析:环中点数==边数,所以我们可以直接转化成边权搞。 思路跟之前的都一样,二分答案,用SPFA判断图中是否有正权环即可。题目链接:题目传送门玄学问题:我用FIFO队列,第一个元素不入队为啥啊,跪求路过大牛教导。AC代码:#include <cstdio>#include <iostream>#i...原创 2018-02-19 17:34:00 · 245 阅读 · 0 评论 -
2019牛客暑期多校训练营(第九场) H Cutting Bamboos
题目描述:英语差题目分析:思路来自这位大佬Orz我们二分一个最高的整数,用主席树查询,满足区间内 ans及以上高度的和大于等于第x次切除的,把ans+1上的去处,然后就可以算出答案来了。主席树上查树上的数字和以及数量代码:#include <cstdio>#include <iostream>#include <cstring>#defin...原创 2019-08-15 20:51:39 · 308 阅读 · 0 评论 -
[HDU 6581] Vacation
题目大意:有n+1辆车,你是排在最后的一辆,每辆车有三个参数si,vi,li,分别表示距离终点的距离,最高速度,以及车长,由于车道很窄,所以不能超车,也就是当你追上前面的车时,速度就得跟他一样,现在让我们求我们通过终点的时间。题目链接:HDU 6581题目分析:实数二分时间,首先默认可以超车,算出每个车的位置,然后倒着算出每个车的实际位置,看是否能过终点,把精度放到10^-8就能过了代...原创 2019-07-23 19:18:37 · 156 阅读 · 0 评论 -
[SDOI2010] 粟粟的书架
题目描述:给出 N * M 的 表格 每个位置有一个权值 K 给出 Q 个查询 每次查询限定一个矩形区域 问至少在本矩形区域内取出多少个元素才可以>=Qi题目分析:YY了半天没想出来 看了下数据范围就懂了! 对于50%的数据,满足R, C≤200,M≤200,000; 另有50%的数据,满足R=1,C≤500,000,M≤20,000; 很明显是要我们分情况写算法...原创 2018-03-29 09:09:07 · 212 阅读 · 0 评论 -
[国家集训队] middle
题目描述:求子序列最大中位数题目分析:先考虑怎么求判断一个数是不是中位数 我们把大于本数的全部设为1,小于本数的设为-1 如果和==0,那么就说明是一个中位数 那么我们就可以用二分中位数,然后修改判断 O(Q∗N(logN)2)O(Q∗N(logN)2)O(Q*N(logN)^2) 因为修改是O(N)的,太浪费时间了 考虑如何优化 用主席树进行预处理 将每个数二分时...原创 2018-04-11 14:12:03 · 301 阅读 · 0 评论 -
[HEOI2016/TJOI2016] 排序
题目描述:给出初始序列, 进行m次区间排序操作 输出q位置上的数字题目分析:暴力做法,疯狂排序 O(m∗(nlogn))O(m∗(nlogn))O(m*(nlogn)) 据说可以80分… 正解:二分+线段树 考虑到查询的位置只有一个 我们先二分一个数 建立一颗01线段树 小于二分值的置为0,大于等于二分值的置为1 考虑 排序操作 对于一个区间的升序排列 先查...原创 2018-04-11 14:11:17 · 331 阅读 · 0 评论 -
[九省联考 2018] iiidx
题目描述:给出一个序列 重新安排序列的下标 使得 di<=di/kdi<=di/kd_ididid_i不相同的情况成立 比如 4 2.0 1 1 1 2 这组样例 用贪心搞出来的是 1 1 1 2 其实正解应该是1 1 2 1 如果权值有重复的,我们要找和第siz大的权值相等的权值中最靠右的那个点,再给子树预定siz-1个,这样做能够让当前点权值尽可能大的前提...原创 2018-04-09 18:42:50 · 663 阅读 · 0 评论 -
[Scoi2015] 小凸玩矩阵
题目描述:给出 n*m 个数 每一行和每一列只能选一个数,求能选出最小的第K个数是什么题目分析:先二分K S -> 每一行 cap=1 每一列 -> T cap=1 a[i][j]<=mid i->j+n cap=inf 然后判定即可题目链接:Luogu 4251 BZOJ 4443Ac 代码:#include <cst...原创 2018-03-11 16:47:49 · 222 阅读 · 0 评论 -
01分数规划专题
前言:今天才知道有01分数规划这个东西TAT 原来我都叫实数二分的01分数规划的基本模型:(1)基础01分数规划 (2)最优比率生成树 (3)最优比率生成环01分数规划问题形式:01分数规划是这样一类问题 给你n个二元组,这个两个元素设为a[i] ,b[i], a[i]是得到这个物品所能得到的价值,b[i]是得到这个物品所付出的价值,让你求这样一个极值。 即 ...原创 2018-02-01 15:16:41 · 541 阅读 · 0 评论 -
函数最值2
二分+DP 二分挺好想,只是DP 的 Check让人难以理解。 DP[i]表示i不改变的最小修改的元素个数转移?DP[i]=i-1//显然枚举1->i-1如果abs(a[i]-a[j])<=mid*(i-j) DP[i]=min(DP[j]+i-j-1)//改中间的数为什么?假如abs(a[i]-a[j])>mid*(i-j),不可能通过调整中间的数来使得区间内的值小于<=mid而当原创 2017-11-05 10:04:04 · 499 阅读 · 0 评论 -
纸牌+后缀数组
纸牌 题目描述 在桌面上放着n张纸牌,每张纸牌有两面,每面都写着一个非负整数。你的邪王真眼可以看到所有牌朝上的一面和朝下的一面写的数字。现在你需要将一些牌翻过来,使得所有牌朝上的一面中,至少有一半(≥n/2)的数字是一样的。请你求出最少需要翻几张牌,或者判断无解。 注意:在翻牌的时候,你不能把牌扔掉,不能偷偷把别的牌放进来,也不能用笔涂改牌上面的数字。输入格式 第一行包含一个整数n原创 2017-11-04 14:02:52 · 798 阅读 · 0 评论 -
轮换+区间+收集果子
理解了题意就很容易模拟了。 从后向前,然后括号里面的不是位置,而是数。#include <cstdio>#include <iostream>#include <vector>using namespace std;int w[99999];int z[1001][1001];int w2[99999];int main(){ freopen("rotate.in","r"原创 2017-11-03 17:12:36 · 297 阅读 · 0 评论 -
兔子
【问题描述】在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝。更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连。换句话讲,这些兔子窝之前的路径构成一张N个点、M条边的无向连通图,而度数大于2的点至多有1个。兔子们决定把其中K个兔子窝扩建成临时避难所。当危险来临时,每只兔子均会同时前往距离它最近的避难所躲避,路程中花费的时间在数值原创 2017-09-17 16:12:17 · 632 阅读 · 0 评论 -
晚餐
【问题描述】 清儿今天请好朋友们吃饭,一共 N 个人坐在坐在圆桌旁 吃饭的第一步当然是点餐了。服务员拿来了 M 份菜单 第 i 个人阅读菜单并点出自己喜欢的菜需要花费时间 T[i] 当一个人点完菜之后,就会把菜单传到他右手边的第一个人 M 份菜单是同时发出的,每个菜单只能同时被一个人阅读 清儿希望知道如何分发菜单,才能让点餐的总时间花费最少呢?【输入格式】 输入文件名为 dinner.原创 2017-08-22 17:57:23 · 494 阅读 · 0 评论 -
第K小数
类似于K’th 二分+two point#include <cstdio>#include <iostream>#include <algorithm>using namespace std;long long l=0,r,k;long long a[2100000],b[2100000];int n,m;bool check(long long mid){ long lo原创 2017-08-22 10:14:43 · 377 阅读 · 0 评论 -
借教室
2012NOIP DAY2T1 方法1:线段树 使用线段树来维护一个区间的最小值,每次对于输入的L,R区间进行区间修改,如果最小值<0,则无法成功借教室(加了一大堆玄学优化,终于勉强没T)#include <cstdio>#include <stdlib.h>using namespace std;const int maxn=1e6+100;struct tree{ int m原创 2017-08-05 15:51:16 · 430 阅读 · 0 评论 -
P2685_汽车拉力比赛
QAQ 思路:二分+DFS拓展 我们二分一个D,如果当前点和它的邻接点的高度差<=D,那么就拓展到此邻接点 然后看一下我们DFS拓展能否拓展出所有的路标,如果成功,那么说明D过大。反之,则说明过小#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<ctime>#include<c原创 2017-08-10 16:46:05 · 251 阅读 · 0 评论 -
聪明的质检员
QAQ 首先我们知道这道题目肯定是二分答案 但是我们每次都从区间枚举去找总值,显然不行 所以我们想到根据每个w值(因为区间有可能重叠) 每次处理两个数组,第一个去找区间可以满足矿的个数,另一个去找满足矿的总价值 这样找值的时候只有一层的m循环辣#include <cstdio>#include <iostream>#include <cmath>using namespace std原创 2017-06-12 10:48:12 · 416 阅读 · 0 评论 -
切割网线
二分长度 看每根网线能切割出来的数目 比要求的多了,证明找小了,左节点往右移 反之就是找大了 处理方法,读入后*100按整型处理因为要求精确到厘米#include <cstdio>#include <iostream>#include <algorithm> #include <cstring>#include <math.h> using namespace std;int d原创 2017-06-11 10:28:55 · 410 阅读 · 0 评论 -
跳石头
QAQ 话说我把变量弄错了,,,,,,,, 二分最小距离 如果距离小于最小距离的石子,也就是删去的石子的个数小于或者是等于m 证明最小距离取小了 反之则是最小距离取大了 把终点当做最后一个石子处理 需要注意在m==n的时候要特判,直接输出l#include <cstdio>#include <iostream>#include <algorithm> #include <cstr原创 2017-06-10 15:21:25 · 379 阅读 · 0 评论 -
立方体+仓库
立方体 cube.in/.out/.cpp 【问题描述】 在 n 维空间中,一个单位立方体由 2^n 个点组成。 他们的坐标形如 (x 1 ,x 2 ,…,x n ),x i ∈ {0,1}。 定义 n 维空间中两点的距离为其曼哈顿距离,点 p (p 1 ,p 2 ,…,p n ) 与点 q (q 1 ,q 2 ,…,q n ) 的距离为 ∑ n i=1 |p i − q i |。原创 2017-11-03 10:54:59 · 389 阅读 · 0 评论 -
日记+洗澡
洗澡的地方,有一段括号序列,将一个括号修改一次需要1的代价(将左括 号变成右括号或者相反),求最小代价使得括号序列合法。 【输入格式】 一行一个括号序列。 【输出格式】 一行一个整数代表答案。 【样例输入】 ())( 【样例输出】 2 【数据范围与规定】 50%的数据,括号序列长度不超过100。 对于100%的数据,括号序列长度不超过10 5 且一定为偶数,只包含小括 号右原创 2017-10-31 17:30:34 · 894 阅读 · 0 评论 -
Massacre at Béziers+赤の夜
等差数列求和,算出多少个整周期。 二分或解方程#include <cstdio>#include <iostream>#include <cmath>#define ll unsigned long longusing namespace std;ll n,t;bool check(ll a,ll d1,ll mid){ ll c=2; ll ans=a*mid+((原创 2017-11-08 14:29:03 · 349 阅读 · 0 评论 -
hahaha
小Q对计算几何有着浓厚的兴趣。他经常对着平面直角坐标系发呆,思考一些有趣的问题。今天,他想到了一个十分有意思的题目:首先,小Q会在轴正半轴和轴正半轴分别挑选个点。随后,他将轴的点与轴的点一一连接,形成条线段,并保证任意两条线段不相交。小Q确定这种连接方式有且仅有一种。最后,小Q会给出个询问。对于每个询问,将会给定一个点,请回答线段OP与条线段会产生多少个交点?小Q找到了正在钻研数据结构的你,希望原创 2017-10-06 11:42:01 · 191 阅读 · 0 评论 -
洛谷10月月赛R2·浴谷八连测R3 T2
传送门 不能转两次弯说明什么? 把图分成两个部分其实就相当于画一条单调的线。 如下图 如果我们分蓝色的,以上面那一行为最大,那么下面的蓝色的终点是不可以超过上面那行的。 但是蓝色既可以左右延伸,也可以上下延伸。 可以从4个方向出发。 但是写4个分色有些麻烦。 我们可以用从左开始,向右延伸的方法,然后分别把图选择90,180,270. 就可以得到所有的情况了。 得到了图该怎样做?原创 2017-10-28 08:30:09 · 295 阅读 · 0 评论 -
乒乓球
刚开始想用两侧循环来枚举S,T,请仔细一想没有必要,因为T确定了,S也就确定了 于是使用1层循环枚举T,这样我们看赢的多的人的局数,即为S 注意以下四种情况 1:没有人赢(无解) 2:两个人赢的一样多(无解) 3:赢的多的人却输了最后一局(因为先拿到大局数的人胜,显然最后一局是多的人赢的) 4:没有用完所有对局数大局就结束了(无解) 这样我们进行枚举,复杂度N^2,这是70的数据 其原创 2017-07-27 15:11:07 · 374 阅读 · 0 评论 -
读
数据升序排列 二分答案 x为最长的长度 i为当前读取点,j为当前数据点 如果a[i]#include <cstdio>#include <iostream>#include <algorithm>#define ll long longusing namespace std;const ll inf=1e15;const int maxm=1e5+100;ll a[maxm],原创 2017-09-27 16:26:49 · 181 阅读 · 0 评论 -
做汉堡
QAQ 思路很简单,就是二分能做的个数 如果钱够就增大做的个数 不够就减少 主要是右边界的判断 保证钱<=1e12 然后保证价钱>=1,原本的材料<=100 最极端的情况也就是可以做1e12+100个汉堡啦 要注意好多变量要搞成long long#include <cstdio>#include <cstring>#include <iostream>using namespa原创 2017-06-16 15:48:42 · 339 阅读 · 0 评论