![](https://img-blog.csdnimg.cn/3460eacf6aa349809b41accdaa69d6be.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法竞赛
算法
失败才是人生常态
长风破浪会有时,直挂云帆济沧海!
展开
-
全网最详细!!算法竞赛中输入输出
在算法竞赛中,根据题目类型的不同,读入数据和输出数据的类型和数据量也不同,有时候,掌握各种各样的输入输出可以让你赢在起跑线上,不至于因为输入数据或者输出数据就超时了。因为c的快读快写网上教程已经很多了,下面我写一些java常用的输出输出方法。这篇博客面向的是一些算法入门的萌新写的,简单介绍了下各种输入输出的优缺点。输入第一种,最常见,但是也很费事.简单的输入可以用这种但是慢Scanner s...原创 2020-03-18 10:48:42 · 1705 阅读 · 0 评论 -
java算法竞赛中各种自定义排序模板
1package 排序;import java.util.Arrays;public class test { public static void main(String[] args) { xx[] arr= new xx[]{ new xx(1), new xx(3), new xx(2) }; Arrays.sort(arr); for(int ...原创 2020-03-01 19:26:12 · 649 阅读 · 2 评论 -
洛谷题单:【入门1】顺序结构
(1) P1001 A+B Problem入门题,这题估计只是为了让大家熟悉洛谷这个平台吧!题目给定数据范围|a|,|b|都小于10e9,所以用int即可,因为int可以储存的最大值是2147483647,就是2*10e9多一点。如果题目数据稍微再大一点,就要用long来存储了。import java.util.Scanner;public class Main { public st...原创 2020-03-13 11:46:22 · 3087 阅读 · 4 评论 -
洛谷题单:【入门2】分支结构
(1)P5710 【深基3.例2】数的性质定义两个布尔型的变量来记录这两个性质是否满足,true代表满足,false代表满足。然后对4个人根据他们的要求输出1或者0即可。代码比较长,但都是一些复制粘贴的活。import java.util.Scanner;public class Main { public static void main(String[] args) { Scan...原创 2020-03-14 22:32:28 · 878 阅读 · 2 评论 -
洛谷题单:【入门3】循环结构
(1)P5718 【深基4.例2】找最小值不亏是第一题,果然简洁明了。就是一个for循环,维护一个最小值。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(...原创 2020-03-15 14:21:14 · 1132 阅读 · 0 评论 -
洛谷题单:【入门4】数组
(1)P1428 小鱼比可爱第一题果然一如既往的水题,两个循环。外层循环表示那只鱼正在往左看,内层循环表示被看的鱼。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nex...原创 2020-03-17 00:24:26 · 1341 阅读 · 1 评论 -
洛谷题单:【入门5】字符串
(1)P5733 【深基6.例1】自动修正第一道字符串的题目,小写转大写,两种做法,第一种直接调用字符串自带的转换函数,第二种,遍历字符串,判断如果是小写字符的话就转换成大写,但我觉得直接用第一种就完事了,又快又稳。import java.util.Scanner;public class Main { public static void main(String[] args) { ...原创 2020-03-17 17:36:32 · 1461 阅读 · 1 评论 -
洛谷题单:【入门6】函数与结构体
(1)P5735 【深基7.例1】距离函数求三角形周长,就是把三条边加起来,所以可以写个根据坐标求边长的函数,然后把3次函数求和输出。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); dou...原创 2020-03-18 15:03:21 · 1161 阅读 · 2 评论 -
洛谷题单:【算法1-1】模拟与高精度
(1)P1042 乒乓球这是一道模拟题,有11分制和21分制,然后每种规则的结束这一场的条件是到达11分或者21分,并且双方球员的比分差距大于等于2,那么就开始下一场比赛。直到字符串到达E。我们一开始建立4个数组分别储存球员A和球员B在两种规则下的比分,然后遍历字符串模拟比赛就行啦。import java.io.BufferedReader;import java.io.IOExceptio...原创 2020-03-19 18:56:31 · 538 阅读 · 0 评论 -
洛谷题单:【算法1-2】排序
(1)P1271 【深基9.例1】选举学生会这题对于C++的选手来说不算题目,直接调快速排序即可。但这可苦了java选手,java直接用快排会超时,所以得使用一个更高效的算法,桶排序,把数据装进1000的大小的数组里,数据元素值对应着数组下标,个数对应着数组的值,这样Java就可以过了。import java.io.BufferedReader;import java.io.IOExcept...原创 2020-03-21 20:07:02 · 668 阅读 · 0 评论 -
洛谷题单:【算法1-3】暴力枚举
(1)P2241 统计方形(数据加强版)这道题经过数据加强后,只能通过两个循环解决,那么我们肯定是枚举长和宽的长度,然后找规律发现,在确定了长度和宽度后,能横向平移,或者纵向平移的次数是:(大矩阵的长度-当前矩阵的长度+1),宽度也是同理,那么我们可以知道,长和宽移动的次数相乘便是这个形状的小矩形的个数。然后枚举所有小矩形的形状即可。import java.io.BufferedReader;...原创 2020-03-22 00:04:31 · 798 阅读 · 0 评论 -
洛谷题单:【算法1-4】递推与递归
(1)P1255 数楼梯很经典的一道入门递归题。递推公式为f(n)=f(n-1)+f(n-2)。这里数据量很大,要用大数进行递归import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new...原创 2020-03-23 09:04:14 · 738 阅读 · 0 评论 -
洛谷题单:【算法1-5】贪心
(1)P2240 【深基12.例1】部分背包问题看到题目以为是动态规划,然而是贪心。就是讲单价性价比高的金币排在前面,然后如果能拿光就拿走全部,不能拿光就尽可能多的拿走。很基础的贪心方法。import java.util.Arrays;import java.util.Scanner;public class Main{ public static void main(String[]...原创 2020-03-23 14:37:22 · 494 阅读 · 0 评论 -
洛谷题单:【算法1-6】二分查找与二分答案
(1)P2249 【深基13.例1】查找这道题本身并不难,典型的一个二分查找,用java自带的二分查找函数就可以实现.但是这题存在多个值相同的情况,根据例题我们知道,返回的是第一个数字。但如果直接用二分搜索肯定不能保障搜索到的是第一个,那么 我们就要自己手写一个二分查找,并且当找到了元素后再判断一下是不是第一个,如果不是我们就往前移。import java.io.BufferedReader;...原创 2020-03-25 17:55:25 · 694 阅读 · 0 评论 -
洛谷题单:【算法2-1】前缀和与差分
(1)P2671 求和直接暴力寻找x,y,z三种循环可以拿20分,复杂度O(n^3),根据x和z可以推导出是否存在y满足条件,所以不用循环b,可以拿40分,复杂度O(n ^2)。这道题满分做法是用数学推导出一个前缀和的公式,暂时没有写出来。。import java.util.Scanner;public class Main { public static void main(Strin...原创 2022-01-12 20:43:27 · 219 阅读 · 0 评论 -
洛谷提单:【数据结构1-1】线性表
(1)【数据结构1-1】线性表这是一道很基础的题目。就是单纯的考察数组的存储和使用,但是因为数据量会超过java的极限。所以用输入挂才可以过。import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import...原创 2020-03-25 17:54:52 · 516 阅读 · 0 评论 -
洛谷题单:【数据结构1-2】二叉树
(1)P4715 【深基16.例1】淘汰赛这题好像不用二叉树来做,直接把数据一分为二,找到左边的最大值和右边的最大值,然后二者小的就是亚军,把它的下标输出即可。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(Syst...原创 2022-01-12 20:43:37 · 308 阅读 · 0 评论 -
洛谷题单:【数学1】基础数学问题
(1)P1143 进制转换java对进制转换有非常好的API,可以实现无限长度的任意进制转换。import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.i...原创 2022-01-12 20:43:03 · 151 阅读 · 0 评论 -
洛谷题单:【动态规划1】动态规划的引入
(1)P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles很简单的一道动态规划入门题,即一直取上面一行最大值再加上本身,dp方程为dp[i][j]=dp[i-1][j]+dp[i-1][j-1].import java.io.BufferedReader;import java.io.IOException;import java.io.Input...原创 2020-03-27 13:40:13 · 370 阅读 · 0 评论 -
蓝桥杯第四届javaB组
(1)标题:世纪末的星期标题: 世纪末的星期 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星期日...... 1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)? 请回答该年份(只原创 2020-09-22 08:13:06 · 386 阅读 · 0 评论 -
蓝桥杯第五届javaB组
(7)标题:扑克序列标题:扑克序列 A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。 要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。 请填写出所有符合要求的排列中,字典序最小的那个。例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。这道题比较简单,只要用一个全排列,然后判断原创 2020-09-22 09:20:15 · 236 阅读 · 0 评论 -
蓝桥杯第六届javaB组
(7)标题:牌型种数牌型种数小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。(8)标题:饮料换购饮料换购乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。请你原创 2020-10-02 11:59:10 · 311 阅读 · 0 评论 -
蓝桥杯第七届javaB组
(8)标题:四平方和四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a,b,c,d 为联合主键升序排原创 2020-10-02 12:02:56 · 444 阅读 · 0 评论 -
蓝桥杯第八届javaB组
(1)标题: 购物单标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。 小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。 现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购...原创 2020-04-16 09:07:52 · 1469 阅读 · 2 评论 -
蓝桥杯第九届javaB组
(6)标题:递增三元组标题:递增三元组给定三个整数数组A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN],请你统计有多少个三元组(i, j, k) 满足:1. 1 <= i, j, k <= N 2. Ai < Bj < Ck 【输入格式】第一行包含一个整数N。第...原创 2020-04-14 12:11:07 · 461 阅读 · 0 评论 -
蓝桥杯第十届javaB组
(7)试题G:外卖店的优先级试题 G: 外卖店优先级时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分【问题描述】“饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有一个优先级,初始时 (0 时刻) 优先级都为 0。每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级...原创 2020-04-12 23:20:32 · 849 阅读 · 0 评论 -
蓝桥杯第十一届javaB组
(1)试题 A: 跑步训练本题总分:5 分【问题描述】小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如环。如果某个时刻小明的体力到达 0,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案中只填写数,不填写单位。【答案提交】这是一道结果填空题,你只需要算出结果后提交即可。本题的结果原创 2020-09-24 12:51:29 · 3379 阅读 · 3 评论 -
蓝桥杯第一次校内模拟赛java题解
说明一下,一下代码不是官方题解,仅仅只是个人的题解,不一定完全正确,如果有错误,希望大家在评论区指出来。(1)问题描述 在计算机存储中,15.125GB是多少MB?答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。签到题:1024*15.125=15488(2)问题描述 1200000有...原创 2020-03-14 16:13:38 · 2120 阅读 · 6 评论 -
第二届传智杯初赛java题解
(1)P6363 软件工程实习一道模拟题目,题目并不复杂,主要是细心。首先定义一个类存放一个人的成绩和队伍,然后写一个自定义排序,优先成绩高的,第二优先队伍编号小的。然后开始读入数据,初始化类的数组。接下来开始算出每个队伍的平均分,用数组存起来,然后筛掉差值大于15的,再取平均分。最后根据总成绩对类数组排序即可。注意四舍五入保留整数。import java.io.BufferedReader;...原创 2020-04-11 22:07:21 · 1232 阅读 · 1 评论 -
宽度优先搜索求解迷宫最短路径——《挑战程序设计》
宽度优先搜索,即BFS,有时也叫做广度优先搜索。与深度优先搜索的一条路走到黑不同,它是先遍历离自己最近的一些点,然后逐步向更远的路径进行搜索。它利用的是队列来完成这一操作。在这道迷宫求解问题中它的时间复杂度约为O(MxN)。另外,对于bfs而言,通常我们需要建立一个结构体来储存当前的坐标和当前路径的长度。在我们实际算法竞赛中,如果dfs和bfs都能解决的问题,我们尽可能用bfs,因为dfs会存在...原创 2020-04-30 10:32:23 · 624 阅读 · 0 评论 -
设计算法就是一个不断降低时间复杂度的过程——《挑战程序设计》
这道题是第一章开篇的第一道例题,但也是第一章的最后一道例题,改变的只是数据范围。首先,作为第一道算法竞赛的练手题,直接上4个for循环判断是否相等就完事了,复杂度为n4n^4n4,但n<50的数据范围完全可以接受。import java.util.Scanner;public class Main { public static void main(String[] args) {...原创 2020-04-29 20:32:43 · 350 阅读 · 0 评论 -
一往直前“贪心法”——《挑战程序设计》
这道题根据我们日常生活中的习惯,我们很容易得出要想使花费的硬币最少,肯定是尽可能优先用大面额的硬币来支付。分别用两个数组存储硬币的金额和该硬币金额的个数,然后用一个循环来不断的使用硬币即可。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=n...原创 2020-05-01 09:26:11 · 153 阅读 · 2 评论 -
如何从一道简单题里找到巧妙的做法?——《挑战程序设计》
这道题书上给出了暴力解法,即三重循环。这没啥说的,只要判断下这三条边能否组成一个三角形即可,组成三角形的充要条件是最大边小于另外两条边,然后在所有满足条件的边中选周长最大的。import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner sc=new Scanne...原创 2020-04-29 09:43:07 · 190 阅读 · 0 评论 -
最基础的的“穷竭搜索”——《挑战程序设计》
这是一道非常简单的深度优先搜索的模板题目,对于每个元素,我们可以选择选或不选,这样每个结点可以分支出两个结点。状态转移的量是选出数的和以及当前取舍元素的下标。import java.util.Scanner;public class Main { static int n,k; static int[] arr; static boolean flag=false; public ...原创 2020-04-30 09:14:41 · 151 阅读 · 0 评论 -
一起来挑战程序设计——Ants(POJ NO.1852)
这道题书上说很容易想到暴力搜索,枚举每种蚂蚁的的朝向,但我觉得这种做法其实代码是比较难写,因为如果有多只蚂蚁的话你很难写出每只蚂蚁之间碰撞产生的掉头状态。所以我们可以分析一下,题目要求的是最短时间和最长时间,最短时间比较好想,因为只要保证每只蚂蚁都朝着离杆子近的地方下去,那么不会有碰撞,那么最后一只蚂蚁走出竿子的时候就是最短时间。而对于最长时间,就需要一些想象力了。根据上图我们可以看出,...原创 2020-04-29 16:05:21 · 193 阅读 · 0 评论 -
一起来挑战程序设计——Lake Counting(POJ NO.2386)
这道题目也是一个经典的模板题,另外,这道题也说明了DFS可以用来解决“连通块问题”。我们在外面遍历循环,当找到有水洼的地方,进入dfs朝着八个方向进行消除水洼,直到连通的地方没有水洼了,退出dfs。在外面循环继续找下一个水洼。import java.util.Scanner;public class Main { static int n,m; static char[][] map;...原创 2020-04-30 09:30:33 · 146 阅读 · 0 评论 -
一起来挑战程序设计——棋盘问题(POJ NO1321)
POJ 1312 棋盘问题在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8...原创 2020-04-20 12:05:49 · 200 阅读 · 0 评论 -
蓝桥杯——摆动序列
动态规划的题目一般都是先找到变化的量,再找到状态转移方程,最后建立一个dp表即可。但对于动态规划的难点就是如何寻找状态转移方程。下面我会很详细的一步步的说明如何找到状态转移方程。问题描述 如果一个序列满足下面的性质,我们就将它称为摆动序列: 1. 序列中的所有数都是不大于k的正整数; 2. 序列中至少有两个数。 3. 序列中的数两两不相等; 4. 如果第i – 1个数比第i ...原创 2020-03-13 17:05:33 · 1128 阅读 · 3 评论 -
蓝桥杯——幂方分解
问题描述 任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如: 1...原创 2020-03-15 21:55:04 · 544 阅读 · 0 评论 -
蓝桥杯——集合运算
问题描述 给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。输入格式 第一行为一个整数n,表示集合A中的元素个数。 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。 第三行为一个整数m,表示集合B中的元素个数。 第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。 集合中的所有元素均为int范围内的整数,n、m<=1000。输出格...原创 2020-03-13 23:09:27 · 1322 阅读 · 0 评论