二分
河渔船
成长的小垃圾
展开
-
Hamburgers [CF-371C]
最好的做法:二分答案。根据枚举的答案判断是否能做出这个数量的汉堡,不断优化答案。(需要注意上边界,不要忘了原有的材料数)。 代码:#include<iostream>#include<cstdio>#include<cstring> #include<cmath>#define LL long longusing namespace std;int nb,ns,nc;int pb,p原创 2017-06-16 16:04:39 · 463 阅读 · 0 评论 -
luogu 模拟题 青蛙叫
等差数列。 因为直接算的话可能会有较大的精度丢失(个人认为), 所以用到二分,二分有多少项。 时间复杂度O(nlogT)#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LL long longusing namespace std;const原创 2017-11-08 11:36:50 · 307 阅读 · 0 评论 -
NOIP 2015 疫情控制
评测传送二分答案+贪心。 越往上越优,所以在枚举的范围内,能往上就往上。 细节处理很重要。 我的代码有一处是待优化的,调了一下午,身心俱疲,不想再写了。 就这样吧 95分。#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<vector>#include<algorithm>#def原创 2017-10-23 11:31:46 · 372 阅读 · 0 评论 -
刷题#R4
题目链接 T1 模拟即可,但是要仔细一点。 T2 素数筛,前缀和,简单二分就可以过。 T3 30分floyed暴力。 T1#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=100009;char s[N];int n,sl[N原创 2017-10-31 13:58:20 · 421 阅读 · 0 评论 -
NOIP 2015 运输计划
评测传送二分答案+LCA+树上差分最好用Tarjan求LCA,有的oj会卡倍增。做法: 我们用LCA求出需要查询的每个计划的路径长度。 然后二分答案,check( )的时候,我们把大于mid的路径(因为这一些都是要去边的)求一下交点(边), 如果并非全都都交于一条边或者去掉交边后也不能让这些路径都小于等于mid,那么mid就是不可以的。 求交边时,用到树上差分。#include<iostre原创 2017-10-23 17:14:01 · 249 阅读 · 0 评论 -
NOIP 模拟题 小G搭积木
文件名 输入文件 输出文件 时间限制 空间限制 box.cpp box.in box.out 2s 128MB题目描述 小 G 喜欢搭积木。 小 G 一共有 n 块积木, 并且积木只能竖着一块一块的摞, 可 以摞多列。小 G 的积木都是智能积木,第 i 块积木有一个情绪值 X i 。当摞在该积 木上面积木总数超过 X i 时,i 号积木就会不高兴。小 G 情商这么高,肯定不希望 有积木不高原创 2017-10-24 17:40:24 · 938 阅读 · 0 评论 -
刷题#R8
T1 这是一个更相减损。 出现的所有的不同的数就是更相减损过程中出现的; 直接这样做的话,会T或者爆; 再进一步分析一下,就会发现,我们可以把更相减损优化为辗转相除,因为多几次更相减损就是辗转相除,那么不同数的个数在辗转相除中就是每次的a/b,因为a只有减损a/b次才会达到b,a%b的状态,这之间的数是递减的,不会出现重复。T2 50分,我们可以倒着加边,添加进新的边时,用并查集维护,合并原创 2017-11-03 08:05:21 · 228 阅读 · 0 评论 -
刷题#R11
卖书 问题描述 大 C 开了一家 noip 辅导资料店,每本资料售价 5 元,且每人限购一本。前来买书的人络绎 不绝,他们带着 5 元,10 元和 20 元。可是由于启动资金有限,大 C 进完货之后手上已经没 有钱了,所以他只能用前面收的钱找钱。现在大 C 想知道他能不能成功的找钱。输入格式 第一行一个整数 n 表示来买书的人数 第二行 n 个整数表示每个人身上带的钱数,数据保证一定是原创 2017-11-04 08:17:41 · 472 阅读 · 0 评论 -
刷题#R13
纸牌 题目描述 在桌面上放着n张纸牌,每张纸牌有两面,每面都写着一个非负整数。你的邪王真眼可以看到所有牌朝上的一面和朝下的一面写的数字。现在你需要将一些牌翻过来,使得所有牌朝上的一面中,至少有一半(≥n/2)的数字是一样的。请你求出最少需要翻几张牌,或者判断无解。 注意:在翻牌的时候,你不能把牌扔掉,不能偷偷把别的牌放进来,也不能用笔涂改牌上面的数字。输入格式 第一行包含一个整数n,原创 2017-11-04 18:48:08 · 683 阅读 · 0 评论 -
刷题#R12
T1 贪心模拟 从右往左,遇见m是1的位,有选或者不选两种操作:如果这一位是负数,那肯定不选更优,把这一位的二进制看做0,那么前面就可以任意选;如果选,那么sum+a[i],继续向前扫。 T2 二分答案 +DP 二分两个数之间的差的最大值 F[i]表示i不改变的最小修改的元素个数 f[i] = min(f[j] +(i-j-1), i-1) abs(A[j]-A[i]) < 二分出来原创 2017-11-05 13:56:38 · 249 阅读 · 0 评论 -
P3017 [USACO11MAR]布朗尼切片Brownie Slicing
题目传送 二分答案+贪心+前缀和优化对于二分的答案x,我们对于每一条,先假设宽为1,看看能不满足分为不小于x的b块,如果不满足,宽度就加宽,如此处理即可。 一开始循环中的终止条件写错,调了好长时间。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath> #define L原创 2017-11-05 15:53:33 · 586 阅读 · 0 评论 -
P2985 [USACO10FEB]吃巧克力
题目传送二分答案+贪心需要注意的问题是,最后上下的巧克力要在最后一天吃完! 因为这个问题,调了2个小时!#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath> #define LL long longusing namespace std;int n,d,a[50009原创 2017-11-05 17:29:55 · 313 阅读 · 0 评论 -
洛谷 NOIP 模拟 DAY1
T1题目链接 每次新产生的兔子一定是前面的兔子生的。 先预处理出菲波那切数列,然后用a-f[x]就是a的父亲。(f[x]是小于a的最大的)#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define LL long longusing namespace std;const int N=30原创 2017-11-07 17:07:44 · 233 阅读 · 0 评论 -
读 read
问题描述: 有一个两端无限长的磁带,有 N 个读取指针在某些位置,需要读取 M 个 位置上的数据。每一个单位时间每个读取指针都可以向左或向右移动一格。如 果存在某个时刻某个读取指针在某一个位置上(包括 0 时刻) ,那么这个位置上 的数据就会被读取。 (注意,不需要读取的位置也能被指针经过) 现在你需要解决一个问题,最少经过多少时间,M个需要读取的位置都能被读取?输入格式 第一行两个整数原创 2017-09-29 15:17:25 · 306 阅读 · 0 评论 -
P1281 书的复制(二分)
dp:http://blog.csdn.net/qq_36820605/article/details/72910904 二分:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<cmath>using namespa原创 2017-06-11 09:37:15 · 522 阅读 · 0 评论 -
P1297 网线切割(二分答案)
https://www.luogu.org/problem/show?pid=1297#sub 将小数先转化为整数处理,而且最后要/100.0 而不是100#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<cmath>原创 2017-06-11 10:13:36 · 360 阅读 · 0 评论 -
P1314 聪明的质检员NOIP 2011T2
https://www.luogu.org/problem/show?pid=1314#sub 看到这个题,想到二分是不难的,但是如果就直接上二分,简单暴力地求和,就会超时。O(mnlogw) 观察题目,区间可能是重合的或者叠盖,就考虑到前缀和来优化,将m*n缩减到m+n。 最终复杂度为O((m+n)*logw).#include<iostream>#include<cstdio>#inc原创 2017-06-12 10:12:31 · 539 阅读 · 0 评论 -
P2658 汽车拉力比赛
luogu 传送门标准的二分答案。 check中,我们用bfs判断以当前的标准是否能拓展出所有的路标。 注:此题是m行n列。#include<iostream>#include<algorithm>#include<cstdio>#include<cmath> #include<queue>#include<vector>#include<cstring>using namespa原创 2017-08-10 16:50:42 · 512 阅读 · 0 评论 -
乒乓球
问题描述 Gob和Michael常在一起打乒乓球。他们是这样决定比赛的输赢的:比赛由若干大局组成;谁最先赢下s大局谁就获得比赛的胜利;在每一大局中,谁先得t分就获得本大局的胜利。在一次比赛中,他们只记录了比赛中的每一分是谁得的,但忘记了记录s和t。现在给出比赛的每一分的得分情况,求出所有可能的s和t。Gob保证,得分表是完整的,也就是在比赛恰好在最后一人,得到最后一分后结束。输入格式(game.i原创 2017-07-27 15:31:06 · 659 阅读 · 0 评论 -
P1083 [NOIP 2012]借教室
https://www.luogu.org/problem/show?pid=1083#sub一开始容易想到的方法是线段树,每次修改时,如果出现负数,那么当前这个人一定不能满足了。 但是在noip里,这肯定不是正解,所以会超时那么一两个点。#include<iostream>#include<cstdio>#include<cmath>#include<stdlib.h>#define M原创 2017-08-05 15:55:50 · 212 阅读 · 0 评论 -
K`th number
二分答案,check()用two point写#include<iostream>#include<cstdio>#include<algorithm>#define LL long long#define N 200009using namespace std;int n,m;LL k;LL a[N],b[N],num,L,R,mid;bool flag;inline int原创 2017-08-22 10:59:28 · 221 阅读 · 0 评论 -
Dinner 点餐
二分答案。 关键在于check()的写法。20分的写法: check(x) 中O(n*n)的写法:直接枚举起点,一直往后加,一旦>x,就加一张菜单,如此枚举。60分的写法: 二分加二分。用一个前缀和来优化。 check(x)中枚举起点s,设当前这一张菜单的起点为L,那么下一个起点就是sum[L]+x的前驱,可以用upper_bound()来找,然后再把找出来的那个位置减 1 ,就是下一个起点原创 2017-08-22 18:01:06 · 297 阅读 · 0 评论 -
兔子
【问题描述】 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝。更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连。换句话讲,这些兔子窝之前的路径构成一张N个点、M条边的无向连通图,而度数大于2的点至多有1个。 兔子们决定把其中K个兔子窝扩建成临时避难所。当危险来临时,每只兔子均会同时前往距离它最近的避难所躲避,路程中花费的时间在原创 2017-09-17 16:35:54 · 306 阅读 · 0 评论 -
排列组合问题
这数据写个暴力都拿不了30分 T_T。 C(n,i)*C(n,i)=C(n,i)*C(n,n-i) => 结合现实意义,在n个里面选 i 个,再在n个里面选n-i个的方案数。 就等价于在前n个中选 i 个,在后n各种选n-i个。而且i = 0~n => 在2*n各种选n个。 那么=C(2*n,n);答案要对1000000007取模, C(2∗n,n)modp=(2∗n)!∗(n!∗n!)x原创 2017-08-23 17:21:28 · 313 阅读 · 0 评论 -
LYK快跑!(run)
Time Limit:5000ms Memory Limit:64MB题目描述 LYK陷进了一个迷宫!这个迷宫是网格图形状的。LYK一开始在(1,1)位置,出口在(n,m)。而且这个迷宫里有很多怪兽,若第a行第b列有一个怪兽,且此时LYK处于第c行d列,此时这个怪兽对它的威胁程度为|a-c|+|b-d|。 LYK想找到一条路径,使得它能从(1,1)到达(n,m),且在途中对它威胁程度最小的怪原创 2017-10-07 16:47:46 · 319 阅读 · 0 评论 -
洛谷八连测 #R7
LISTT1T2T3题目链接T1T1 每次spfa(或者bfs),时间复杂度O(spfa*Q); 每次先把每一个查询的特殊点入队,距离为0; spfa或者bfs即可。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cti原创 2017-11-06 16:29:55 · 564 阅读 · 0 评论