洛谷
小南的学习笔记
这个作者很懒,什么都没留下…
展开
-
【暴力枚举】【JAVA】P1149火柴棒数
用数组把0-9,每个数字所需要的火柴棒数保存下来,序号是数字,值是该数字需要的火柴棒数,使用双重循环遍历0-9,判断n-4-arr[i]-arr[j]==arr[i+j],但是我并没有把火柴棒组成的所有数字的表给求出来,我只遍历了0-9,所以就没有办法过全部数据。(由于最大24根,减去符号4根,也就是还有20根可以组成三个数,一个为0(需要6根),剩余14根可以组成的最大数为711,需要7根),再通过双重循环遍历。原创 2022-10-11 16:12:16 · 291 阅读 · 0 评论 -
【暴力枚举】【JAVA】P3654First Step
双重遍历所有位置(因为是二维表),分别是向下和向右寻找可行的站位,注意判断寻找站位时可能会出现索引越界(开的数组大了就不用考虑),4和5数据是个特例,原创 2022-10-09 16:44:21 · 326 阅读 · 2 评论 -
【暴力枚举】【JAVA】P3392涂国旗
题中给出了几个限制条件,我想着去模拟一下这几个条件求解,用行头和行尾指针,每一行都求最优的方式去求解,当行数为3时三行都是确定的,大于三行就先把头行和尾行确定下来,再用头尾指针去不断确定两边要涂的颜色(找到该行最多的色块,并且确定该行是否可以涂该色(颜色顺序不能被改变,白蓝红)),但是实现起来发现条件太多,过于繁琐,因为头尾指针所在的行就算确定了要涂的色,但是要和整个国旗的统一起来就很难,不能有一个统一的方法去计算,需要用许多的条件判断等,于是放弃。,为什么我就是想不起来这种方式呢!原创 2022-10-08 17:14:07 · 290 阅读 · 0 评论 -
【暴力枚举】P1036选数
题目很好理解直接。原创 2022-10-04 19:56:29 · 163 阅读 · 0 评论 -
【暴力枚举】P1618 三连击(升级版)
写这道题前可以先完成普通版然后再完成升级版。原创 2022-10-04 10:55:55 · 301 阅读 · 0 评论 -
【递推与递归】【JAVA】P1002 [NOIP2002 普及组] 过河卒
思路:对于这道题,之前在写欧拉计划系列的时候曾经遇到过,当时用动态规划可以直接求出结果,这道题相当于是在基础上加了一个障碍点,在寻找路径的过程中需要跳过这些的障碍点,基本思路有了,接下来就认真分析一下怎么去实现这个算法。分析:1.状态转移方程在二维坐标系中寻找从A点到B点的所有路径,而且只允许往右和往下,每次只能走一步,A点到自身的路径只有一条,这里假设B坐标为(i,j),那么上一步到达B的方式只有两种(i-1,j)和(i,j-1),从A到达B的所有路径和是在上一次走的路径基础上求和,那么就可..原创 2022-03-09 15:50:10 · 424 阅读 · 0 评论 -
【排序】【JAVA】P1012 [NOIP1998 提高组] 拼数
思考:对于本题,关键是如何找出相邻两个数之间的比较方式,和以往比较的不同的是,要把符号意义上大的放前面,而不是比较值的大小,比如7和13,输出的应该是713而不是137。对于不同的数之间进行比较,要考虑到两个数的长度,也就是位数(存在同样长度的数,首位数相同,那么就需要比较其他位数)但这样处理起来过于麻烦,于是可以把这两个数分成两种方式拼接起来,a+b和b+a进行比较,这样解决了长度问题,也可以实现大小的比较,分成两种情况1.a+b>b+a a先于b输出 比如7 132.a+b<b+..原创 2022-03-05 17:03:48 · 594 阅读 · 2 评论 -
【排序】【JAVA】P1104生日
思路:通过用学生类将同学的数据封装起来方便存储,再通过重写TreeSet集合的compare方法实现排序的要求。注意:排序规则是生日从大到小,也就是出生年龄靠前的排在前面,而不是数值大的在前面输入靠前和靠后通过自定义的id存放,输入输入靠后的先输出,也就是大的排前面对于compare如何自定义数值大小排序,规则 从小到大,s1-s2 从大到小,s2-s1package LOQ.排序;import java.util.Comparator;import java.util.Scanne..原创 2022-02-26 17:55:33 · 653 阅读 · 0 评论 -
【排序】【JAVA】P1781宇宙总统
题目思路:这道题关键在于解决大整数的比较问题,通过比较,得到获得票数最多的值,java可以通过BigInterage实现由于BigInterage没有提供比较的方法,这里可以通过两种方法实现比较.//通过前一个和后一个做减法,转浮点型后和0进行比较,小于0就交换if(max.subtract(temp).doubleValue()<0) { max = temp; count = i;}//原来的max和temp比较,获取较大的哪一个,然后判断max是否和temp相等原创 2022-02-24 18:14:10 · 341 阅读 · 0 评论 -
【模拟与高精度】【JAVA】P1591 阶乘数码
思路:处理大数+求阶乘+字符串查找处理大数可以用java的BigInteger封装类求阶乘直接用循环求,返回值要是字符串才行,避免数值越界字符串查找比较的时候记得用equalpackage LOQ.模拟与高精度;import java.math.BigInteger;import java.util.Scanner;//阶乘数码public class P1591 { public static void main(String[] args) { Scan..原创 2022-02-21 20:10:35 · 208 阅读 · 0 评论 -
【模拟与高精度】【JAVA】P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
题意:根据题意总结几点1.牛和Farmer John(简称猎人)移动的方式相同2.如果牛或者猎人当前移动一步的位置是障碍物或者边界就转向,不移动,否则移动一步3.转向为顺指针转向90度思路:这道题和求地雷阵那道题有一点相似,都是模拟地图类,这道题就是模拟牛和人在10*10的地图中运动的过程,关键在于模拟人和牛的移动,还有控制转向,因为不知道什么时候找到,所以用while循环,模拟移动的话,可以通过两组坐标值来模拟,转向也可以通过定义一个变量(0代表上,1代表右,2代表下,3代表左)来控制.原创 2022-01-20 20:43:34 · 279 阅读 · 0 评论 -
【模拟与高精度】【JAVA】P1563 [NOIP2016 提高组] 玩具谜题
点击原题目题意:模拟寻找眼镜的过程,通过小人的面向和提供的指令寻找眼镜。思路:存放数据通过两个String数组实现 通过题上给出的条件可以总结以下结论1.小人朝向圈内,左边是顺时针方向2.小人朝向圈内,右边是逆时针方向3.小人朝向圈外,左边是顺时针方向4.小人朝向圈外,右边是逆时针方向寻找眼镜的指令就这四种情况,但是通过观察可以发现,其中的1、3可以合并2、4也可以合并 这样就是两种情况了。1.圈内左边和圈外右边为顺时针,也就是小人朝向为0指令为0 和小人朝向为1 指令为12.圈内右边原创 2022-01-19 10:43:00 · 282 阅读 · 0 评论 -
【模拟与高精度】【JAVA】P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
题意:就像题目所言,就是加入另外两种手势,根据手势的出两个小朋友的赢的次数思路:首先我想到用多个条件判断来实现,但这未必有些繁琐,可以简化一点的就是可以通过打表的方式,这样会减少许多程序中的判断,更加快速易懂。打表的话,我们首先要得到胜负表,通过题上给出的甲对乙的胜负表,加以转换就得到全部的胜负表(因为胜负有三种情况,胜、平、输,根据这点我们可以知道一个玩家的胜负即可反推出另一个玩家的胜负,打表中用1代表胜利,0代表输或者平),这样通过if判断当前玩家a对玩家b的结果便可以进行结果统计,循环.原创 2022-01-16 20:52:05 · 343 阅读 · 0 评论 -
【模拟与高精度】【JAVA】P2670 [NOIP2015 普及组] 扫雷游戏
题意:给你一个nm的地雷阵,其中“”代表地雷格,“?”代表非地雷格,非地雷格上要标记上附近的地雷数,“附近只”指的是非地雷格的上、下、左、右、左上、右上、左下、右下。思路:看着是道入门的题,但也卡了我好久,简单来说就是对地雷阵进行扫描1.扫描到地雷格,记录到要输出的新地雷阵中,扫描下一个地雷阵2.扫描到非地雷格,对地雷格的“附近”进行扫描,统计非地雷格“附近”的地雷数,把结果记录到要输出的新地雷阵中。注意:这里为了解决第一行、最后一行、第一列和最后一列会出现的数组越界问题,起始的地雷阵我.原创 2022-01-13 10:07:36 · 2422 阅读 · 0 评论 -
【字符串】【JAVA】P1553 数字反转(升级版)
思路:首先要对输入的数据进行判断并记录数据类型,这里我用index记录,然后对应不同的数据类型执行不同的操作,至于反转操作可以使用StringBuilder中的reverse方法,输出再通过前面的记录值进行不同的输出。从题目中可以得到信息1.整数、百分数直接反转2.小数、分数分成两部分反转,不交换整数(分子)和小数(分母)。需要注意的地方:1.整数若有后置零,反转后要把零去掉 例如120反转后是21。2.小数中小数部分反转后,小数部分的前置零需要去掉 例如1.023反转后是1.32.原创 2022-01-02 19:00:54 · 561 阅读 · 0 评论 -
【字符串】【JAVA】P1321 单词覆盖还原
思路:用String获取子串的方法求解?我想可以通过扫描一遍字符串,分别列出boy和girl被覆盖的情况,求出出现的和即可。以boy为例1.没有被覆盖,boy2.被覆盖一个,bo或者oy3.被覆盖两个,b、o、y需要注意的是,没有被覆盖的情况判断放在被覆盖的前面先判断,因为没有被覆盖的话会满足其他覆盖一个或者几个的情况,这样就不满足排他性的条件了,把没有覆盖的放前面可以解决这个问题。package LOQ.字符串;import java.util.Scanner;/*被覆盖的单词.原创 2021-12-25 23:42:25 · 371 阅读 · 0 评论 -
【字符串】【JAVA】P1765 手机
题意:根据字符的不同,敲击键盘的次数不同,求敲键盘次数之和。思路:增强for循环把字符串中字符全部扫描一遍,列出不同字符需要敲几次的if else语句,输出和即可。package LOQ.字符串;import java.util.Scanner;/*九键按了多少次 */public class P1765 { public static void main(String[] args) { Scanner sc = new Scanner(System.i.原创 2021-12-25 17:08:14 · 349 阅读 · 0 评论 -
【字符串】【JAVA】P5734 【深基6.例6】文字处理软件
一道让我读半天题目都没有读明白的题,一开始想不明白输入的格式和题上的要求之间的关系是什么。一开始输入的4,让我不是很明白要表达什么意思,感觉是一开始输入的字符串长度吧,但看输入样例的话,应该是5才对啊,我实在是想不到其他的含义了,先试试吧!后面的是对应输入的操作,对应四种对字符串的操作,这里可以通过switch语句来实现,至于具体内容的实现,我想这些类应该都被封装好了。写在后面不得不说对于一些封装好的操作,java真的很方便,这段代码顺利AC。通过帮助文档,对于四个条件再总结一下。同时对于这些字.原创 2021-12-23 19:29:16 · 803 阅读 · 0 评论 -
【字符串】【JAVA】P1125 [NOIP2008 提高组] 笨小猴
漫长的洛谷之旅思路:我觉得这一题的问题在于存放出现最多的字母的次数,和出现次数最少的字母的次数,解决了这个问题,其他的也就很好解决了,首先通过一个容器将每个字符出现的次数记录下来,那当然是要用数组了,顺便利用char类型的本质是ASCII码的特性,数组的索引就代表不同的字母,只不过是数字表示的,接下来一顿操作就出来了。注意在运行过程中也发现了一些问题1.数组的默认值是0,那么就会扰乱min的正常赋值,所以在给求min的时候要确保当前数组值不是0.2.max-min可能小于2,当小于2的时候原创 2021-12-21 20:42:58 · 457 阅读 · 0 评论 -
【数组】【JAVA】P2911 [USACO08OCT]Bovine Bones G
思路:第一眼就想用暴力循环,给的数据不大,三层循环也可以AC,简单来说就是把所有和都当做一个数组的索引,和出现的次数就是数组的值,最后判断数组值的大小,求出出现次数最多的和的数组的值。需要注意的就是,要是出现多个和出现的次数相同的情况,这个问题可以用判断语句解决,具体看代码注释。package LOQ.数组;import java.util.Scanner;public class P2911 { public static void main(String[] args) {原创 2021-12-19 16:32:20 · 616 阅读 · 0 评论 -
【数组】【JAVA】P5728 【深基5.例5】旗鼓相当的对手
思考一开始想通过用循环的方法,不断输入进行判断,但是题上说一个同学可能对应多个同学,这样的话就要双层循环了,用二维数组来存放数据,加上判断条件,顺利通过。package LOQ.数组;import java.util.Scanner;/*多维数组 */public class P5728 { public static void main(String[] args) { Scanner sc = new Scanner(System.in);原创 2021-12-12 16:21:03 · 880 阅读 · 0 评论