随笔分类 - 二分
摘要:题目链接 【题目翻译】 有一个无限大的容器。 你轮流进行如下操作:倒一杯热水进去、倒一杯冷水进去。以此类推。 (热水温度是h,冷水温度是c) 容器中的水的温度等于倒进去的水的温度总和/倒水的次数。 问你需要进行多少次操作,水的温度才能最接近温度t。 【题解】 会发现,进行2,4,6,8,10...次
阅读全文
摘要:题目链接 【题目翻译】 给你n个月,每个月天数有d[i]天 你需要选取连续的几天(可以跨月、跨年) 然后你得到的收益为这些天是在所在月份的第几天对应的数字的和。 比如你选了第2月(设有30天)的第29、30天以及3月的第1,2天。 那么你的收益就是29+30+1+2 然后现在的问题是,让你从n个月份
阅读全文
摘要:"题目链接" 【题解】 如果没有旋转这么一说。 那么问题就是一道普通的二分查找的题目。 加上旋转之后。也没有让这个题变难多少。 问题的关键在于。 在二分查找的时候。 能够想到用nums[0]这个元素来确定当前二分枚举到的元素是在哪一个区间里面的。 即是在左边那个上升区间里面,还是在右边那个上升区间里
阅读全文
摘要:"题目链接" 【题解】 二分某个数的上下界。 其实这个方法并不难。 只要你想清楚了二分最后一次执行的位置在什么地方就不难了。 【代码】
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 二分最后轮了几圈。 二分之后直接o(N)枚举具体要多少时间即可。 注意爆long long的情况。 可以用对数函数,算出来有多少个0 如果大于17直接缩小点就好。 【代码】 cpp include define ll long long
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终能到达(x2,y2)的话 对于任意的时间t1 t,t1也能到达。 因为对于t后面的时间,比如t+
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 二分。 枚举每一个上升区的起始位置作为起点(这样做肯定是最优的),然后如果没有掉在地上的话就尽量往右二分(只有上升区之间的间隙会让他往下掉) 用前缀和处理出来每个上升区的长度,这样就能根据前缀和处理出来从第i个上升区到第mid个上升区之间
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 让你求出只由3个非0数字组成的数字在[li,ri]这个区间里面有多少个. 【题解】 只由3个非0数字组成的数字在1~10^18中只有60W个 dfs处理出来之后排序做个二分查找一下区间里有多少个就好。 【代码】 java import java.io.
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 让你根据冒泡排序的规则 建立一张图 问你这张图的最大独立子集的大小 【题解】 考虑a[i]会和哪些点连边? 必然是在a[i]左边且比它大的数字以及在a[i]右边比它小的数字 (根据冒泡排序的原理) 所以如果选择了a[i]就不能再选择它左边比它大的数字或者
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出)。 你是灭霸你要用以下方法消灭这k个复仇者: 一开始你获取整个区间[1..2^n] 假设你当前获取的区间为[l,r] mid = (l+r)/2 那么你每次有两种选择 1.将整
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 我们可以很容易知道区间的每个位置有哪些安排可以用。 显然 我们优先用那些花费的钱比较少的租用cpu方案。 但一个方案可供租用的cpu有限。 我们可以用一个线段树 线段树的下标表示价格。 那一位的值,为这个价格的cpu能租多少个。 弄个区间和(即
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 如果|x|+|y| n 显然。从(0,0)根本就没法到(x,y) 但|x|+|y| 【代码】
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 对于每个i,用二分的方法求出来y所在的位置j. 可以这样求。 假设现在二分到了位置mid. 那么随便用个rmq求出来mid..n这一段的最小值temp。 看看temp是否满足 【代码】 cpp include define rep1(i,a,b
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 我们可以二分n的值,设为mid 那么对于n=mid 我们可以算出来以下3个东西 temp1 = n/x; temp2 = n/y; temp3 = n/lcm(x,y);//lc(x,y)表示x和y的最小公倍数 temp1是第一个人在1..n中
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意相当于问你改变一个位置之后。 从左往右扫描最大值。这个最大值会改变多少次。 【题解】 假设我们改变的是i这个位置,下面说的a[i]都是改成q之后的a[i] 我们完全可以直接暴力算出来左边的最大值会改变多少次以及右边的最大值会改变多少次。 那么如何找呢
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 让你猜到火星的距离x是多少. 已知1y 但是系统有时候会撒谎 这个撒谎的过程由一个长度为n的序列决定 n=n了那么重新从1开始 p数组未知 但是长度n告诉你了 【题解】 前n个问题一直问m 看看系统回答什么,回答0直接输出m,否则根据这个询问来确定系统说
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 会发现如果x是reallynumber那么x+1也会是reallynumber.... (个位数+1,各位数的和+1了但是整个数也+1了。而且如果发生了进位的话,各个数码的和只会更小。。 因此这个reallynumber肯定有一
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 先用枚举回文串中点的方法。 得到这个字符串中出现的所有的回文。 得到他们的左端点以及右端点。 整理成一个pair数组 然后排序。 对于每一个回文串。 查找起点比这个回文串的终点大的所有回文串的个数。 【代码】 cpp inclu
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 给你n个数字 让你删掉最小的数字 使得: 剩余的数字中 "最大的数字"小于等于"最小的数字 2" 【题解】 把数据从小到大排序。 显然只有删掉最小的数字或者最大的数字才可能改变最大数字和最小数字的比例 那么我们枚举最后的结果产生的那一刻最小的数字是什么。
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 二分+网络流 先处理出所有的人到所有的门的最短路dis(x,y) 二分所用的时间mid 则把所有的门都分成mid个。 表示1..mid这些时间这个门可以通过一个人。 然后建立一个超级源点S S和所有的人各连一条边,边权为1 然后
阅读全文