题目内容 有这样一个二分: void calc(int s) { double l = a, r = b; int cnt = 0; while(cnt != s) { double mid = (l + r) / 2; if(check(mid)) l = mid; else r = mid; c…
题目大意 有 $ n $ 个箱子和 $ m $ 个小球,初始时第 $ i $ 个箱子有 $ a_i $ 个小球。每次操作可以将一个小球移到相邻的箱子里。求要使得最终数组 $ a_i \ge a_{i+1} $的最小操作次数。 解题思路 设$ dp_{i,j,k} $ 为前 $ i $ 个箱子里…
解题思路 显然,如果将$a_i$变为序列以外的数,相比于变为序列中的数而言,代价一定是较大的。所以说一定是将$a_i$变为序列内的其他数。 显然,对于每一个$a_i$,只有第一次出现的$a_i$会对数组$c$产生影响。如果将第一次出现的$a_i$改为其他值,那么对于数值为$a_i$的数,只有在下一次…
原题链接 思路过程 根据题意,可以很简单的想出一种暴力,在每一次询问时,都$O(n)$的扫一遍后的出答案。 显然,这样的暴力是超时的,但是我们通过这暴力可以想出一定的优化,显然,每亩草的顺序是不影响解题的,所以我们可以先将草的高度进行排序,使之具有单调性(在下面默认排为单调递增)。接下来在遍历时如果…
题意 给定一个正整数 $ n $ ,求一组正整数 $ a $ , $ b $ , $ c $ , $ d $ ,使得 $ a + b + c + d = n $ ,并且 $ \gcd ( a , b ) = \ \operatorname{lcm} ( c , d ) $ 。 题目思路 读完题目之后…
题意 给定整数 $ n $ ,求存在多少个 $ 1 $ 到 $ n $的排列 $ A $ ,使 $ \gcd ( 1 \times A_1 , 2 \times A_2 , … n \times A_n ) $ 题目思路 显然,这是一道数学题,但是不会想正解也不怕(主要是我不会推正解),这种只输入一…
题目大意 好看串的定义:在长度至少为 $2$ 的子串中, $0$ 的个数要小于等于 $1$ 的个数。 在一串 $01$ 串中你可以在任意位置任意插入 $1$ 或 $0$ 来使得这个串成为好看串,请输出最小的插入数的个数。 解题思路 稍加模拟即可发现,当遇到连续 $2$ 个 $0$ 时,在这 $2$ …
101 二分答案 思路如题 #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; const int N=1e5+10; int n; long long k,minn,ma…
manachar (马拉车算法) 回文: 回文的定义十分简单,判断回文串的方法也很简单。对于一个字符串,只需要从他的最中心向两边扩展就足够了,可以将它称之为中心扩展法,我们的马拉车算法也是从中心扩展法扩展而来。 马拉车算法的运用之处: 对于一个字符串,询问它的字串中长度最大的回文串的长度。 显然,我…
以下为本人代码。 说明:(乘法为高精乘高精,除法为高精除低精) 高精度代码: #include <iostream> #include <stdio.h> #include <algorithm> #include <cstring> using na…