自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Java基础知识总结(持续更新中)

Java基础知识

2024-02-07 10:12:51 2096 1

原创 洛谷 P2256 一中校运会之百米跑 (Java)

如果学生 A 与学生 B 在同一组里,学生 B 与学生 C 也在同一组里,就说明学生 A 与学生 C 在同一组。它通过查找两个选手的祖先,并将其中一个选手的祖先设为另一个选手的祖先,从而合并两个集合。m:循环读入每组选手的信息,并通过 union() 方法将同一组的选手合并到一个集合中。k:循环处理每次查询,通过 sear() 方法判断两个选手是否在同一集合中,并输出结果。map:HashMap类型的变量,用于将选手的名字映射到编号。N:指定一个足够大的常量,用于表示选手数量的上限。

2024-02-23 20:32:54 927

原创 洛谷 P3367 【模板】并查集 (Java)

通过递归查找x的父节点,直到找到根节点,同时进行路径压缩,即将查找路径上的所有节点的父节点都直接指向根节点,以减少后续查找的时间。首先找到x和y的根节点(即各自集合的代表元素),如果它们的根节点不同,则将其中一个集合的根节点指向另一个集合的根节点,实现合并操作。首先找到x和y的根节点,然后比较它们的根节点是否相同,若相同则说明它们在同一个集合中,返回true,否则返回false。如果操作为2,则读取两个元素x和y,执行查询操作,并根据查询结果输出相应的结果。p:表示并查集的数组,用于存储每个元素的父节点。

2024-02-23 19:34:56 1169

原创 洛谷 P2032 扫描 (Java)

算法的核心思想是使用一个双端队列来存储当前被覆盖数字的下标,并保证队列中的数字是单调递减的。这样在每次移动木板时,队列的第一个元素即为当前被覆盖数字中的最大值。保证队列单调递减:在每次遍历元素时,如果队列中有元素,并且当前元素大于等于队列末尾元素对应的数字,则将队尾元素出队,直到队列中的元素单调递减。向右移动木板:如果队列中的数字个数大于 0,且当前的下标与队头元素相差超过了 k,则将队头元素出队,即向右移动木板。这道题可以用单调队列来维护一个最大值队列,用于找出每次移动木板时被覆盖的数字中的最大值。

2024-02-22 22:06:28 1042

原创 洛谷 B3666 求数列所有后缀最大值的位置(Java)

每次给一个数,先判断这个数和队顶的大小,若栈非空且栈顶小于(这里可以随机应变)这个数,就弹出这个数,直到找到一个比这个数大的数或者栈空为止,然后把这个数入栈即可。每次操作后请输出一行一个整数,表示当前数列所有后缀最大值下标的按位异或和。可以发现,这个单调栈就是专门针对“后缀最值”问题的数据结构。所有的后缀最大值的下标(下标从 1 开始)。的后缀最大值下标当且仅当:对于所有的。最后就是由于 对于全部的测试点,保证。所有后缀最大值的下标的按位异或和。第一行是一个整数,表示操作次数。对于全部的测试点,保证。

2024-02-22 12:10:42 754

原创 洛谷 P2866 [USACO06NOV] Bad Hair Day S (Java)

对于出栈的每头牛,计算当前牛能够看到的牛的数量,即当前牛右边比它低的牛的数量(栈顶元素所代表的位置就是右边第一个比当前牛高的牛的位置)。如果当前牛的身高大于栈顶牛的身高,说明栈顶牛可以被当前牛看到,需要出栈,直到栈顶牛的身高大于等于当前牛的身高或者栈为空。时间复杂度:遍历一次奶牛,对于每头奶牛的入栈和出栈操作都是O(1),因此总的时间复杂度为O(N)。通过遍历奶牛的身高,利用单调栈找出每头奶牛能够看到的牛的数量,并。从前往后遍历每头牛,保证单调栈中的元素身高单调非递增。头牛所能看到的牛的数量。

2024-02-21 23:39:06 943

原创 洛谷 P2947 [USACO09MAR] Look Up S (Java)

如果当前奶牛的身高大于等于栈顶奶牛的身高,说明栈顶奶牛不再是当前奶牛的仰望对象,需要出栈,直到栈顶奶牛的身高大于当前奶牛的身高或者栈为空。因为使用了单调栈,使得在一次遍历中就能够得到每头奶牛仰望的下标,而不需要额外的操作。【输出说明】奶牛 #1,#2 仰望奶牛 #3,奶牛 #4,#5 仰望奶牛 #6,奶牛 #3 和 #6 没有仰望对象。从后往前遍历奶牛,保证单调栈中的元素单调递减,这样可以确保栈顶奶牛身高大于当前奶牛。行,按顺序每行输出一只奶牛的最近仰望对象,如果没有仰望对象,输出。头奶牛站成一排,奶牛。

2024-02-21 22:55:41 2190

原创 栈与队列 - 数组模拟 (Java)

常见模型:找出每个数左边离它最近的比它大/小的。常见模型:找出滑动窗口中的最大值/最小值。示例代码:Acwing 154 滑动窗口。示例代码:Acwing 830 单调栈。

2024-02-20 23:41:47 131

原创 洛谷 P1241 括号序列 (Java)

当遇到右括号时,程序会向前搜索左括号,直到找到与之匹配的左括号或者不再有未匹配的左括号为止。如果找到了匹配的左括号,则将其配对,并将 a 数组中对应位置的值置为 1 表示已匹配。如果未找到匹配的左括号,则配对失败。遍历完字符串后,再次遍历字符串 s,根据 a 数组中记录的匹配情况,对未匹配的括号进行补全。如果某个位置的括号未匹配,则输出一个新的括号使其匹配。中全部未配对的括号,请你在其旁边添加一个字符,使得该括号和新加的括号匹配。首先,使用了一个整型数组 a 来记录每个括号是否已经匹配。

2024-02-20 23:39:27 1147

原创 Arrays类数组(Java)

用二分查找算法在数组中搜索给定值的对象(Byte,Int,double等)。如果查找值包含在数组中,则返回索引;JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。在下表为 0 - 9 中搜索。建议使用Collections.sort()方法,比Arrays.sort()效率高。Arrays.binarySearch(数组, 开始, 结束, 值);

2024-02-19 23:35:16 247

原创 AtCoder Beginner Contest 341 D - Only one of two (Java)

由题目分析,暴力会超时,我们可以通过二分来解题。如果x=24,x/a=6,x/b=4,x/c=2。出现个数:6+4-2*2=6,对应 4,6,8,我们通过二分不断改变x的值,知道cnt与k相等。假设x是我们要找的数,c是a,b的最小公倍数。例如:a=4,b=6,则c=12;,而c的倍数会被计算两次。中一个整除的正整数。

2024-02-19 23:26:59 1010

原创 Java 数据结构

该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。Java 的 java.util 包中提供了许多这些数据结构的实现,可以根据需要选择合适的类。你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。

2024-02-18 22:31:42 955

原创 AcWing 第 143 场周赛 B.(5471) 数对推理 (Java)

如果两个数对完全相同,令公共数为0;贝茜会准备 n 个两两不同的数对,这些数对均包含两个 1∼9之间的不同整数,其中一个数对恰好是它拥有的数对,它会将这些数对全部发送给贝蒂。贝蒂会准备 m个两两不同的数对,这些数对均包含两个 1∼9之间的不同整数,其中一个数对恰好是它拥有的数对,它会将这些数对全部发送给贝茜。第二行包含 n个两两不同的数对,这些数对均包含两个 1∼9之间的不同整数,表示贝茜准备的数对。第三行包含 m个两两不同的数对,这些数对均包含两个 1∼9之间的不同整数,表示贝蒂准备的数对。

2024-02-18 20:33:53 546

原创 Math类常用操作/方法(Java)

向上取整:Math.ceil(double a) [n/x] = [(n+x-1)/x] 向下取整:Math.floor(double a) 四舍五入取整:Math.round(double a)

2024-02-17 23:47:58 467

原创 Codeforces Round 926 (Div. 2) C. Sasha and the Casino (Java)

首先,我们需要明白赌场可以操控我们的输赢,但不能连输超过x次,即赌场可以让我们连续输x次,但第x+1次我们一定赢。循环从第2次下注开始,第 x+1 次结束,如果下注的钱大于a,说明下注的钱不够,一定会输。所以,每一次下注,我们需要保证:该次下注如果赢了,我们至少能够赚钱,即 总硬币>a。第2到x次下注我们假设赌场让我们输,则第x+1次我们必赢。对于第1次下注,由于之前没有下注,默认sum = 1。只要证明下注可以赚钱,即可输出答案。now:该次最少下注的钱。sum:之前已经花的钱。

2024-02-17 23:41:14 909

原创 StringBuilder/StringBuffer类(Java)

当对字符串进行修改的时候,使用 StringBuffer / StringBuilder 类更方便。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

2024-02-16 22:39:49 731

原创 Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java)

在 n=4 时,有6个单元格着色可以获得2个对角线,有2个单元格,着色可以获得1个对角线。在 4(n-1)+1 到 4n-2 个对角线,着色1个单元格,最多可以获得1个对角线。在 1到 4(n-1) 个对角线,着色1个单元格,最多可以获得2个对角线。由题可知,要我们计算着色。

2024-02-16 22:32:37 513

原创 String类常用方法(Java)

使用 String 类的 replace() 方法来实现这个功能: replace(“target”,“replacement”)返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。compareTo() 方法用于按字典顺序比较两个字符串的大小,该比较是基于字符串各个字符的 Unicode 值。方法从指定的起始索引位置开始,提取字符串的一部分,直到结束索引之前的位置。如果你想将引号添加到字符串中,你可以使用转义字符。

2024-02-15 23:50:51 784

原创 Codeforces Round 925 (Div. 3) E. Anna and the Valentine‘s Day Gift (Java)

我们将list集合升序排列,定义len是list集合的长度,从list集合的第 n-1,n-3,n-5,…的元素对应的尾部0,Anna操作都会消失,而第 n-2,n-4,n-6,…我们遍历先遍历数组a[i],对于每个a[i],我们计算这个数发生反转一定不会消失的数字个数,并将尾部0的个数添加到 list 集合中。最后得到的 cnt 是最后剩余数字长度的最大值,如果cnt > m,则 Sasha 胜利,否则 Anna 胜利。我们知道,一个数发生反转,非0的数字和位于两个非0之间的数字0不会消失。

2024-02-15 12:38:56 449

原创 Codeforces Round 925 (Div. 3) D. Divisible Pairs (Java)

定义 ArrayList b 先存储 (x-a.get(0))%x 再 存储 t%y。我们定义一个HashMap的集合,集合的键 List 用来存储 a。计算 map 中 b 出现的次数,然后将 a 加入到 map 中。定义 ArrayList a 先存储 t%x 再 存储 t%y。%y 的值,集合的值用来存储键出现对应的次数。题目要我们求美丽对的数量。定义一个变量 t 来存储。

2024-02-14 12:22:38 1559 1

原创 洛谷 P1678 烦恼的高考志愿 (Java)

计算机竞赛小组的神牛 V 神终于结束了高考,然而作为班长的他还不能闲下来,班主任老 t 给了他一个艰巨的任务:帮同学找出最合理的大学填报方案。该算法的时间复杂度取决于排序学校录取分数的时间复杂度(通常为 O(mlogm))和遍历所有学生计算不满意度的时间复杂度(O(nlogm))。位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。函数中使用了二分查找的方法,找到学校录取分数线最接近学生估分的学校,然后计算该不满意度。

2024-02-13 22:14:43 1005

原创 洛谷 P1102 A-B 数对 (Java)

因为在第一个循环中构建了 HashMap,而在第二个循环中通过查找 HashMap 进行计数,每个查找操作的时间复杂度是 O(1)。相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!如果 HashMap 中存在键值为 a[i]+c 的项,则将其值加到 cnt 中。创建一个 HashMap map,用于记录数组中每个数字的出现次数。的数对的个数(不同位置的数字一样的数对算不同的数对)。创建一个数组 a,用于存储输入的整数数组。,要求计算出所有满足。

2024-02-13 22:05:37 1109 2

原创 洛谷 P3853 [TJOI2007] 路标设置 (Java)

B 市和 T 市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。否则,调整 l,增加 mid,继续搜索。,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。行,包含一个整数,表示增设路标后能达到的最小“空旷指数”值。

2024-02-12 21:18:07 903

原创 洛谷 P3743 kotori的设备 (Java)

你可以在任意时间给任意一个设备充能,从一个设备切换到另一个设备的时间忽略不计。能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗。同时 kotori 又有一个可以给任意一个设备充电的充电宝,每秒可以给接通的设备充能。所以 kotori 想知道,在充电器的作用下,她最多能将这些设备一起使用多久。初始化二分查找的边界,进行二分查找,直到左右边界的差小于等于1e-6为止。遍历所有设备,如果设备在mid秒内能量耗尽,则将差值加到pt中。行,每行表示一个设备,给出两个整数,分别是这个设备的。

2024-02-12 20:54:11 1107

原创 洛谷 P1182 数列分段 Section II ((Java)

如果切割次数小于等于m-1,则说明当前的mid值足够大,但不一定是最小的满足条件的值,因此更新右边界r为mid-1,并更新答案ans为当前的mid值。如果切割次数大于m-1(因为切割次数比总段数少1),则说明当前的mid值太小,需要增加mid,因此更新左边界l为mid+1。使用循环进行二分查找,在每次循环中,计算当前的中间值mid,然后遍历整个数组,累计每一段的和。题目考察二分搜索,用于找到使得每段和的最大值最小的分段方案中的最小可能值。初始化左右边界,边界最小为数组中的最大元素,最大为数组元素总和。

2024-02-11 23:34:04 917

原创 解决Typora导出HTML不显示图片

Typora导出HTML不显示图片,可能时图片存放在我们的硬盘中。我们可以将markdown中的图片转化为base64格式,嵌入到html中。

2024-02-11 15:04:08 875

原创 在VSCode中创建Java项目

Win+R -> 输入cmd -> 输入 java -version -> 然后可以看到安装的JDK版本,如果没安装可以去找教程。Extension Pack for Java(会自动下载其他Java相关插件)打开VSCode,打开扩展(Ctrl + Shift + S),安装插件。Chinese (Simplified) (简体中文)输入 文件名.java ,然后按Enter键。首先,保证安装了Java的JDK.输入代码看看能否运行。

2024-02-11 12:53:09 1026

原创 AcWing 第 142 场周赛 B.最有价值字符串(AcWing 5468) (Java)

还如果 max+n >= s.length(),可以修改字符串直到max = s.length(),再修改时字母时,max不变。所以,如果 max = s.length() ,并且n=1,max最大为s.length()-1。如果 max+n < s.length(),说明无论怎么修改 max 最大为 max+n。我们可以定义一个数组记录每个字母出现的次数,定义max记录出现某字母。由于该字符串必须修改n次,每修改一个都可以更新max的值。题目不难,不过有坑😭。

2024-02-10 23:10:50 191

原创 为什么IDM下载速度很慢,IDM下载速度很慢怎么办

IDM采用的是多线程下载模式。如果说单线程下载“一个人完成一项工作”,那多线程下载就是“多个人完成一项工作”。它能让用户从服务器获得更高的带宽,从而提高资源下载速度。一般IDM会默认使用8线程下载。默认最大连接数改为16(选择更大也可以)打开IDM,在状态栏中点击“选项”连接类型/速度选择图中所示。

2024-02-10 17:30:53 1182

原创 洛谷 P2678 [NOIP2015 提高组] 跳石头 (Java)

洛谷 P2678 跳石头 Java如果step 大于 m ,说明需要搬走的石头太多,我们不能跳跃这么多,缩小跳跃距离,更新r = mid-1;否则 需要搬走的石头

2024-02-10 11:21:39 667

原创 Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)

Codeforces Round 923 (Div. 3) E题为了使 max(s) - min(s)

2024-02-09 15:20:53 239

原创 查看/解决端口占用问题 - 以8080端口为例

查看/解决端口占用问题 - 以8080端口为例打开命令提示符(Win+R),输入cmd,点击确认。(会显示所有已经在运行的端口情况)

2024-02-09 13:17:28 259

原创 洛谷P1024 [NOIP2001 提高组] 一元三次方程求解 (Java)

三个答案都在[-100,100]范围内,两个根的差的绝对值>=1,保证了每个为1的区间里最多有1个解。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后。均为实数),并约定该方程存在三个不同实根(根的范围在。这样的一个一元三次方程。给出该方程中各项的系数(当区间的两个端点的函数值异号时,区间内一定有解。个实根,从小到大输出,并精确到小数点后。之间),且根与根之差的绝对值。NOIP 2001 提高组第一题。【二分】因为区间很大。

2024-02-08 17:29:11 822

原创 洛谷P1163 银行贷款 (Java)

当一个人从银行贷款后,在一段时间内他(她)将不得不每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。一个实数,表示该贷款的月利率(用百分数表示),四舍五入精确到。要注意的是,这里是小数,要用 double。如果没有还完的话,利率就比mid大,就要更改r。,第三个整数表示分期付款还清贷款所需的总月数。如果还完了,利率就比mid小,就要更改l。,第二个整数表示每月支付的分期付款金额。首先,计算出还款之后还剩多少贷款。第一个整数表示贷款的原值。三个用空格隔开的正整数。最后注意答案的精度。

2024-02-08 15:28:15 1092

原创 数字、字符串、字符之间的相互转化

数字、字符串、字符之间的相互转化

2024-02-08 11:32:24 167

原创 对数字取整 - 向上取整、向下取整、四舍五入

向上取整:Math.ceil(double a) [n/x] = [(n+x-1)/x]四舍五入取整:Math.round(double a)向下取整:Math.floor(double a)

2024-02-08 11:31:25 211

原创 Codeforces Round 923 (Div. 3) D. Find the Different Ones!(Java)

我们可以定义一个数组 p[i] ,用于记录a[i]的”前缀和“,p[i] = p[i-1] + com,定义 com 用于记录 p[i] 每次增加的值(相邻的 a[i] 是否相等),如果 a[i] = a[i-1],则com = 0;如果 a[l] = a[r],找到答案;如果 p[l] = p[mid] ,说明在 l 到 mid 中,a[i] 都相等,答案可能在 mid 到 r,更新 l 的值;在数组 a[i] 中,在下标l到r中找到不同的 a[i] ,如果存在输出两个下标,否则输出-1。

2024-02-07 14:25:52 201 1

原创 Codeforces Round 923 (Div. 3) C. Choose the Different Ones(Java)

定义二维数组b[k+10][2],b[i][0]记录a[i]中1-k整数是否存在,b[i][1]记录b[i]中1-k整数是否存在,当b[i][0]==b[i][1]=1时,说明有共同的数。题目要我们判断从a[i]和b[i]中分别选k/2个元素,以便所选元素包含从 1 到 k 的每个整数。我们可以定义3个变量cnt0,cnt1,com,每个相同数字只计算一次,cnt0是。a[i]中1-k整数的个数,cnt1是。a[i]和b[i]中1-k整数的个数。b[i]中1-k整数的个数,com是。

2024-02-07 10:02:21 489 1

原创 Codeforces Good Bye 2023 B.Two Divisors (Java)

但某些情况下,x比a,b最小公倍数小,即a,b不互质时。分析答案发现,x与a,b最小公倍数相关。当a,b互质,x是a,b的最小公倍数。

2024-02-06 20:50:11 252 1

原创 windows如何关闭Skype开机自启动

法1:打开高级用户菜单(Win + X) -> 点击任务管理器 -> 点击启动 -> 找到Skype,禁用法2:设置(Win + i) -> 应用 -> 启动 -> 找到Skype,关闭法3:打开运行窗口(Win + R) -> 输入msconfig -> 打开任务管理器 ->找到Skype,禁用

2024-02-06 10:15:54 505 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除