Junit单元测试 JUnit是Java中最流行的单元测试框架之一。它提供了一组注解和断言方法,用于编写和执行单元测试。单元测试是针对代码的最小可测试单元(通常是方法或类)的自动化测试。使用JUnit,开发者可以创建测试类,其中包含用于测试被测代码的测试方法。这些测试方法使用JUnit提供的断言方法来验证代码的行为是否符合预期。在运行测试时,JUnit会自动执行这些测试方法,并报告测试结果。
JVM虚拟机 在早期的JVM版本中,方法区被实现为永久代(PermGen),而在较新的JVM版本中,方法区被实现为元空间(Metaspace)。当加载的类数量过多、字符串常量过多或者动态生成类的数量过多时,方法区/永久代的空间可能会被耗尽,导致溢出错误。为了避免这些错误,开发者应该注意及时释放不再使用的对象、避免无限递归调用和过深的方法调用链条,并且合理配置JVM的内存参数,以确保程序能够正常运行而不发生内存溢出问题。在JVM中,有三种常见的内存溢出错误:堆溢出、栈溢出和方法区/永久代溢出。
String类源码 final修饰String类,表示String类不可变,不可继承,并且其中的成员方法不能被覆盖重写(补)实现了序列化Serializable接口(补)实现了用于比较两个字符串大小的Comparable接口,理解为String实现了Comparable接口,而Comparable接口使用了泛型来确定处理compareTo的入口参数实现了char的有序可读序列CharSequence(补)
天崩地裂【R】(擂台赛题目) 命题人:四毛拽根知识点:二维前缀和难度:中等时间限制:1000ms内存限制:65536KiB天崩地裂【R】Description“银龙重铸之日,骑士归来之时!我们是冠军!”11月7日凌晨,中国战队EDG3:2战胜韩国战队DK夺得2021英雄联盟全球总决赛冠军。EDG终于不负众望,时隔多年梦不减,用实力证明了自己,也圆了老粉的一个梦。在决赛的第一轮中,EDG打野jiejie的皇子敢于冲锋,有勇有谋,表现可谓完美。皇子的大招叫做天崩地裂,会在目标周围形成环形障碍,是开团的好技能。被
CF1478C Nezzar and Symmetric Array 题目链接题目大意:定义一个长2∗n2*n2∗n且每个元素都不同的数组aaa,对于每个i都可以找到一个jjj,使得ai=−aja_{i}=-a_{j}ai=−aj。又定义d[i]=∑j=12n∣ai−aj∣d[i]=\sum_{j=1}^{2n}\left | a_{i}-a_{j} \right |d[i]=∑j=12n∣ai−aj∣,现在给出ddd数组,问可否构造出aaa数组。题目分析:容易看出,d数组必须有两个相同的元素,因为ddd的定义中有绝对值,所以aia_{i}ai和−ai-
CF1498C Planar Reflections 题目链接明明没那么难,也不知道为什么做了这么长时间,吐了题目大意:如上图所示:一个能量为kkk的粒子,射入有nnn个反射板的空间,粒子每经过一个反射板,会有一个k−1k-1k−1能量的粒子被反射,当然k=1k=1k=1的时候,就不会反射出粒子。问最后可以有多少个粒子,答案对1e9+71e9+71e9+7取模。题目分析:这个是不能在多组输入前预处理出来的,因为nnn和kkk都相互牵制。题目给出的范围正好是可以让我们进行O(n∗k)O(n*k)O(n∗k)的dpdpdp的。用dp[k][n]dp[
CF1513C Add One 题目链接题目大意:称“将一个数上每一位的值+1”为一次操作,例如对于9393进行一次操作后的结果为104104。输入n,m,输出对n进行m次操作的结果。题目分析:很容易发现数字的每个位置上互不影响,所以可以分开单独考虑。转移方程为dp[j][i]=dp[j+1][i−1]dp[j][i] = dp[j + 1][i - 1]dp[j][i]=dp[j+1][i−1],dp[j][i]dp[j][i]dp[j][i]表示数字j:0 8j:0~8j:0 8进行了iii次后的位数。特
Parsa‘s Humongous Tree 题目链接题目大意:给出一个树,每个节点都会有一个权值范围,让你找到一中赋值权值的方案,使 ∑(u,v)∈E∣au−av∣\sum_{\left ( u,v \right )\in E}^{}\left | a_{u} - a_{v} \right |∑(u,v)∈E∣au−av∣最大。输出最大值。题目分析:假设根节点的孩子都赋值了合适的权值,要使根节点距离每个子节点最大,那么需要使根节点距离子节点的中位数最远,那么不是在l上取,就是在r上取。所以我们就可以用dp[i][1/0],1表示在r上
2021年ACM创新实践班&SDUTACM暑假集训选拔 7-5题解 递归思维题我们先除去第一条和第二条光线(因为由等边三角形可以得到光线1+光线2等于ab),剩下的很明显看出是递归。我们由图看到这需要递归的两条边都是在不断地缩小,而且满足x和y,递归后是y,x % y的关系。 新增加的边数等于2乘以(x - x % y) 的关系。(因为不能整除,所以要先减去多出来的部分。再乘以2)。还要注意:最后一步时,即x % y == 0时,我们观察一下,由等边三角形的规律,我们发现,增加的边数等于2 * x - y(因为y前面已经算入)。结合参考代码更好理解。参考代码:
K. Lonely Numbers 题目链接1600的题,不难,稍微一推就可以。题目大意:gcd(a,b),agcd(a,b),bgcd(a,b)gcd(a,b),\frac{a}{gcd(a,b)},\frac{b}{gcd(a,b)}gcd(a,b),gcd(a,b)a,gcd(a,b)b,如果这样的三个数可以作为三角形的边长(能看到这题,不可能有人不知道三个数可以组成三角形边长的条件是什么吧),那么a,b就是不孤独的数字,让你找出1—n中,孤独的数字的个数。分析:t组数据,t和n的范围都是1e6,所以需要预处理出来,然后
D. Genius‘s Gambit 题目链接标签是1900的数学构造题,感觉这个题不是很值这个分数。题目大意:给出a,b,k,问是否可以构造出两个满足以下条件的数x,y:x,y的二进制数都有a个0,b个1.x - y的二进制恰好有k个1可以的话输出,不可以就输出No。可以构造出11∗∗∗∗0∗∗\mathbf{11****0**}11∗∗∗∗0∗∗10∗∗∗∗1∗∗\mathbf{10****1**}10∗∗∗∗1∗∗*表示该位置的数相同。这样构造出x - y的二进制数最多可以有a + b - 2个1。这样也判断出
E. Arranging The Sheep 题目链接1400的 div 3 E题,难度不大。题目大意:给出一个字符串,“ * ” 表示羊," . "是空地。让你用最小的操作数把所有的羊排成一排。每次操作可以让一只羊左移或者右移(当然前提是移动到的地方是空地)。分析:题目题意好理解,思路也不难,稍微一推就出来了。可以设排好序的第一个位置是x,第二个位置就是x + 1… 并且每只羊不能越过另一只样。所以有了初始位置和末尾位置就可以列出来式子:(以sample1为例:**.*…)...
D. Maximum Sum of Products(dp) 最近在cf上刷math的题,这道题感觉挺好,1600的题。题目链接题目大意:给出n的长度的a,b两数组,你可以至多一次的反转a的子数组,使得∑i=1nai∗bi\displaystyle\sum_{i=1}^{n} a_i*b_ii=1∑nai∗bi最大化。分析:n的范围是5000,可以开个二维dp,第一维表示反转的子数组的初始下标,第二维表示子数组的长度(也可以直接表示子数组的末尾下标,目前先按照我当时敲的代码来讲,两者的效果是一样的),dp的值表示子串反转后,在这个子串对应的区间内的a
SDUT 2021 Spring Team Contest--- 18 F 题目链接题意:一个月有30天,要求办音乐会必须有k个音乐家。每个音乐家空闲的天数用二进制表示(第i位为1代表第i天空闲)。要求怎样选择这k个音乐家使得办音乐会的天数对应二进制和最大。(在某一天,这k个音乐家都有空闲时间,音乐会才可以举办)分析:题面翻译+理解还是不容易的,理解好题意以后,思路应该也是比较好出的。贪心做法:枚举这30天,也就是二进制的位置,如果有一个高位的天数会使至少k个音乐家有时间参加。那么答案中k个音乐家必然会在这中间选择。因为后面的天数就算都有时间,所得的二进制和还是没有当天
520 PTA钻石争霸赛 2021(部分题解) 这个题还是挺有意思的,当时看见题意后,第一反应是求前缀,然后暴力,但是n的范围是1e4,所以是会爆long long的(这样应该是少1分)。然后我就推了一下公式。以下是我的推导过程:(好久没在纸上写过程了,字不好,请见谅)接下来就是暴力了code:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>..
CF166E Tetrahedron 题目链接小dp:fi 表示走了i步,位置在原点的方案数,gi 表示走了i步,位置不在原点的方案数。所以fi = 3 * gi-1,gi = fi-1 + 2 * gi-1。code:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include &
CF25D Roads not only in Berland 题目链接样例输入1:21 2输出1:0样例输入2:71 22 33 14 55 66 7输出2:13 1 3 7分析:并查集code:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <de
CF2B The least round way 题目链接sample:input:31 2 34 5 67 8 9output:0DDRR分析:题目没有说是输入范围在1 — n * n 的数,数的范围是到0 —109 。所以,就算找到一条合适的路径,直接把路径上的数相乘,判断末尾0的个数,这种方法是绝对行不通的。我们知道,只有是2的倍数和5的倍数相乘,才可以出现末尾0,所以我们计算答案的末尾0的个数,就是看这个数中有多少对<2,5>,并让其最小。众所周知,当其中一个数的数量最小的时候,另外一个数的数量不管多大都不
Codeforces Round #707 (Div. 2)C.Going Home (鸽巢原理) 题目链接样例:Sample1:62 1 5 2 7 4YES2 3 1 6Sample2:51 3 1 9 20NO题目大意:给出n个数字,求满足ax + ay = az + aw,(x,y,z,w不相同) 的一组数的下标。找不到就输出NO。思路:因为ai 的范围是[1,2.5 * 106],所以ax + ay = az + aw 的范围是[2,5 * 106] ,而某个数(这里表示的是每个1~n 的ai与1~n 的aj 的加和,i != j)在此范围内出现四次则必
SDUT 2021 Spring Individual Contest - A A - All about that base题目链接题目大意:简单来说就是问一个等式在1-36进制中,哪个进制可以成立,一个都没有的话就输出 ”invalid“。然后10-35进制是用a-z表示,36进制是用0表示。分析:题目给出的范围描述是所以数在10进制下都是不超过long long级别的。所以我们就可以直接暴力判断1-36进制,可以先把当前的进制数用10进制表示,再看等式是否成立。注意题目说:在1进制的时候,只能有数字0,并且用数字1代表数字0。这个会wa在第4个样例。算是个大模拟,过