愤怒的牛
农夫约翰建造了一座有$n$间牛舍的小屋,牛舍排在一条直线上,第$i$间牛舍在$xi$的位置,但是约翰的$m$头牛对小屋很不满意,因此经常互相攻击。约翰为了防止牛之间互相伤害,因此决定把每头牛都放在离其它牛尽可能远的牛舍。也就是要最大化最近的两头牛之间的距离。 牛们并不喜欢这种布局,而且几头牛放在一个隔间里,它们就要发生争斗。为了不让牛互相伤害。John 决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是多少呢? 输入格式: 第一行用空格分隔的两个整数$n$和$m$,$n$,$m$<=105; 第二行为$n$个用空格隔开的整数,表示位置$x_i$。$x_{i}$<$MAXINT$ 输出格式: 输出仅一个整数,表示最大的最小距离值。 输入样例: 125 31 2 8 4...
SecurityManager魔法
SecurityManager 曾经的我在某一次阅读Java代码的时候,发现了这一个神奇的东西。 让我有了很多圈米的Idea,本文介绍我是如何使用SecurityManager。 因为最近学习高版本Java时发现他要被删除了(555),想着用这个文章纪念纪念它。 我出生了! 自Java 1.0问世以来,SecurityManager便成为了Java生态系统的一部分。在那个 以Applet为主导的时代,Applet的运行依赖于Web浏览器。用户在浏览含有Applet的网页时, 浏览器会负责下载Applet的字节码,并在用户计算机上运行。通过设置SecurityManager,可以防止Applet访问本地文件系统或网络等敏感资源。 截止今日,你依旧能在各种 第三方库/JDK 源码中看到SecurityManager的身影。 不巧的是SecurityManager在JDK17已经被标识弃用。当你使用它的时候会警告用户 未来版本将删除 SecurityManager。 为了方便,本文章使用JDK1.8进行,且只介绍非正常用法 非正常用法 这边只介绍...
P5788 单调栈
题目描述 给出项数为 $n$ 的整数数列 $a_{1 \dots n}$。 定义函数 $f(i)$ 代表数列中第 $i$ 个元素之后第一个大于 $a_i$ 的元素的下标,即 $f(i)=\min_{i<j\leq n, a_j > a_i} {j}$。若不存在,则 $f(i)=0$。 试求出 $f(1\dots n)$。 输入格式 第一行一个正整数 $n$。 第二行 $n$ 个正整数 $a_{1\dots n}$。 输出格式 一行 $n$ 个整数表示 $f(1), f(2), \dots, f(n)$ 的值。 样例 #1 样例输入 #1 1251 4 2 3 5 样例输出 #1 12 5 4 5 0 提示 【数据规模与约定】 对于 $30%$ 的数据,$n\leq 100$; 对于 $60%$ 的数据,$n\leq 5 \times 10^3$ ; 对于 $100%$ 的数据,$1 \le n\leq 3\times 10^6$,$1\leq a_i\leq 10^9$。 分析 一道纯模板题,单调栈 一般是处理当前 索引数值 右边或者左边 第一个比他 大或小...
P1012 拼数
P1012题目链接 做题过程 先判断看一看数据范围,$1≤n≤20$,$1≤a_i≤{10^9}$,数组内最大长度只能为 $20$,每个数最大长度为$9$ 一开始,能清晰的判断出这题考查的是排序,两两字符串对比他们的首位,如果首位相同继续对比下一个数字。但是后认为实现起来会比较困难。对比选数字拼最大结果的问题 如何选出首位最大的数,于是我们可以使用字符串拼接达到目的 原理 假如我们有 $123759804368450$ 和 $54365789062$两个数字 我们可以先试用前后拼接,先后拼接出 $12375980436845054365789062$ 和 $54365789062123759804368450$ 可见,如果是首位更大的数字会更大一些,于是我们可以比较他们的差值,使用类似这个排序的代码进行对两数字排序 1Arrays.sort(arr,(o1, o2) -> o2.length() - o1.length()); 但由于限于长度,$long \ int$类型都无法进行运算,我们可以拿出 $BigInteger$进行高精度的运算 123456789//...
P3375 KMP算法
P3375题目链接 做题过程 认识KMP KMP算法的优点是可以在线性时间内在一个长字符串中查找一个短字符串,而不需要回溯。KMP算法的核心思想是利用一个部分匹配表(partial match table)来记录短字符串的前缀和后缀的匹配情况,从而避免重复比较已经匹配过的字符 部分匹配表 以ABAB为例子(这边的索引值不是单取出该位置的字符) 索引 字符 部分匹配值 0 A 0 1 B 0 2 A 1 3 B 2 按照步骤 索引0,即为 A ,没有前缀没有后缀,没有公共部分,所以部分匹配值为0 索引1,即为AB,前缀A,后缀B,没有公共部分,所以部分匹配值为0 索引2,即为ABA,前缀 A AB ,后缀 A BA,含有公共部分前缀A与后缀A,因为没有多组,所以最长部分匹配值为1 索引3,即为ABAB,前缀 A AB ABA,后缀 B AB BAB...