算法题
文章平均质量分 59
Easenyang
java
展开
-
试题 算法训练 操作格子(线段树模板题)
资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述有n个格子,从左到右放成一排,编号为1-n。共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值。对于每个2、3操作输出你所求出的结果。输入格式第一行2个整数n,m。接下来一行n个整数表示n个格子的初始权值。接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为原创 2022-12-07 16:03:01 · 1087 阅读 · 4 评论 -
试题 算法提高 网格贪吃蛇(离散化 + DP)
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s那个曾经风靡全球的贪吃蛇游戏又回来啦!这次贪吃蛇在m行n列的网格上沿格线爬行,从左下角坐标为(0,0)的格点出发,在每个格点处只能向上或者向右爬行,爬到右上角坐标为(m-1,n-1)的格点时结束游戏。网格上指定的格点处有贪吃蛇喜欢吃的豆豆,给定网格信息,请你计算贪吃蛇最多可以吃多少个豆豆。输入数据的第一行为两个整数m、n(用空格隔开),分别代表网格的行数和列数;原创 2022-11-22 20:52:43 · 1146 阅读 · 0 评论 -
试题 算法提高 最大连续子段和
动态规划解决最大连续子段和原创 2022-11-04 16:50:18 · 766 阅读 · 0 评论 -
试题 算法训练 小明爬山(最长公共子序列 Java)
思路: 可以很容易看出是求最长上升子序列的题,根据其思想去解决求解:代码:复杂度分析: 两个for循环会达到 O(n2)O(n^2)O(n2),数据量大会超时,所以只能通过部分测试点。下面举个例 high[ ] = {4,8,9,5,6,7}这里说明一下为什么要替换第一个大于等于它的数字 ? 因为后面可能有很多数都比 tmp[len]tmp[len]tmp[len] 小,而用这些数组成子序列可能会有更好的结果,我们用比 tmp[len]tmp[len]tmp[len] 小的 hig原创 2022-06-14 09:29:34 · 727 阅读 · 0 评论 -
试题 算法提高 新型斐波那契数列(矩阵快速幂 Java)
问题描述 新型斐波那契数列的第一、二、三项都为1,从第四项起每一项等于前面三项之和,求此数列第n项模m的余数。输入格式 输入一行为两个整数n、m,用空格隔开。输出格式 输出一行为新型斐波那契数列第n项模m的余数。样例输入7 3样例输出2数据规模和约定 1≤n≤10^18,1≤m≤100...原创 2022-06-08 18:54:41 · 721 阅读 · 0 评论 -
蓝桥杯 k倍区间【第八届】【省赛】【B组】(Java)
问题描述给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗?输入格式 第一行包含两个整数N和K。(1 <= N, K <= 100000) 以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)输出格式 输出一个整数,代表K倍区间的数目。例如,输入格式 5 2 1原创 2022-04-07 13:27:55 · 639 阅读 · 2 评论 -
第十二届蓝桥杯真题Java B组 【砝码称重】
思路:采用动态规划(DP),找到状态转移方程就很好解了。对于每个砝码的放置有3种状态:不放:isOk[i][j] = isOk[i-1][j] (结果为前i-1个是否能称出重量j)放一边:isOk[i][j] = isOk[i-1][j-w[i]] (结果为前i-1个是否能称出j减去当前砝码重量)放另一边:isOk[i][j] = isOk[i-1][j+w[i]] (结果为前i-1个是否能称出j+当前砝码重量)...原创 2022-03-15 14:44:56 · 953 阅读 · 4 评论 -
第十二届蓝桥杯真题Java B组 【直线】
题目描述:在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,那么这些点中任意两点确定的直线是同一条。给定平面上2 × 3 个整点{(x, y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z},即横坐标是0 到1 (包含0 和1) 之间的整数、纵坐标是0 到2 (包含0 和2) 之间的整数的点。这些点一共确定了11 条不同的直线。给定平面上20 × 21 个整点{(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z原创 2022-03-13 22:44:42 · 2077 阅读 · 4 评论 -
第十二届蓝桥杯真题Java B组 【路径】
题目描述:小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。小蓝的图由2021 个结点组成,依次编号1 至2021。对于两个不同的结点a, b,如果a 和b 的差的绝对值大于21,则两个结点之间没有边相连;如果a 和b 的差的绝对值小于等于21,则两个点之间有一条长度为a 和b 的最小公倍数的无向边相连。例如:结点1 和结点23 之间没有边相连;结点3 和结点24 之间有一条无向边,长度为24;结点15 和结点25 之间有一条无向边,长度为75。请计算,结点1 和结原创 2022-03-14 17:44:06 · 1339 阅读 · 0 评论 -
第十二届蓝桥杯真题Java B组 【时间显示】
【题目】小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。 现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。 给定一个用整数表示的时间,请将这个时间对应的时分秒输出。【输入格式】输入一行包含一个整数,表示时间。【输出格式】输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值为 0 到 23原创 2022-03-14 17:33:59 · 502 阅读 · 0 评论 -
第十二届蓝桥杯真题Java B组 【双向排序】
思路:我的想法是直接暴力骗分,直接调用函数库的排序方法。Arrays.sort(int[] arr, int start, int end),arr是需要排序的数组,start-end是排序的范围,包括start但不包括end,即排序的索引范围是start-end-1。Arrays.sort(int[] arr, int start, int end, Collections.reverseOrder()),加入Collections.reverseOrder()参数后就可以实现倒序排列。然后去测..原创 2022-03-15 19:19:02 · 1731 阅读 · 3 评论 -
第十一届蓝桥杯真题 Java B组 【回文日期】
思路:直接暴力枚举,找到合适的值就结束。主要就是要考虑日期是否合法,及当前日期是否回文。注:虽然蓝桥杯说用例<=89991231,实际上大于它,所有这里需要定义i<=99999999。判断日期是否合法:static int[] mo = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31}; // 定义月份,判断日期是否合法的时候会用到private static boolean isValid(int num){ //判断日期是..原创 2022-03-17 14:43:01 · 1268 阅读 · 3 评论 -
试题 算法提高 最小字符串 (Java 贪心)
问题描述 给定一些字符串(只包含小写字母),要求将他们串起来构成一个字典序最小的字符串。 输入格式 第一行T,表示有T组数据。 接下来T组数据 每组第一行一个正整数n,表示字符串个数。 接下来n行,每行一个字符串(长度不超过100)。 输出格式 T行,每行一个字符串。 样例输入13abc样例输出abc数据规模和约定 T<=7000,n<=100;思路:我最开始想的直接用Arrays.sort()排个序就行了,在蓝桥杯测试了一遍发现出原创 2022-03-19 15:07:26 · 1033 阅读 · 1 评论 -
试题 算法训练 士兵杀敌(二)(Java) 逻辑清晰
问题描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。 小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。 南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。 输入格式 多组测试数据,以EOF结尾; 每组第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000) 随后的一行是N个整数,ai表原创 2022-03-17 20:57:49 · 849 阅读 · 0 评论 -
试题 算法训练 逗志芃的危机 (Java实现 通俗易懂)
问题描述: 逗志芃又一次面临了危机。逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了。现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从最前面或者最后面取走一个数,全部取完则游戏结束,之后每个人取走的数的和就是每个人的得分。由于逗志芃妹子很厉害,但他又不想输,所以只能找到你了,你要告诉他最多可以得到多少分。(注意,妹子智商是maxlongint所以是不会犯错的,每次的策略必然最优,而且逗志芃是先手) 输入格式 第一行一个数n,表示原创 2022-03-11 10:58:55 · 5747 阅读 · 0 评论 -
试题 算法训练 藏匿的刺客 (Java 贪心)
问题描述 强大的kAc建立了强大的帝国,但人民深受其学霸及23文化的压迫,于是勇敢的鹏决心反抗。 kAc帝国防守森严,鹏带领着小伙伴们躲在城外的草堆叶子中,称为叶子鹏。 kAc帝国的派出的n个看守员都发现了这一问题,第i个人会告诉你在第li个草堆到第ri个草堆里面有人,要求你计算所有草堆中最少的人数,以商议应对。 “你为什么这么厉害”,得到过kAc衷心赞美的你必将全力以赴。输入格式 第一行一个数字n,接下来2到n+1行,每行两个数li和ri,如题。输出格式 输出一个数,表示最少人原创 2022-03-20 11:43:35 · 764 阅读 · 0 评论 -
Java进位制转换小技巧
在进行进位制转换时,若是自己写一个函数出来,是比较麻烦的,此时我们就可以调用封装类(Integer、String)的方法,来更容易地操作进位制。将其他进制转十进制:Integer.valueOf(String s, int radix);Integer.parseInt(String s, int radix);int a = Integer.valueOf("-111",2); // 将字符串-111转换为二进制的整数int b = Integer.parseInt("111",3);原创 2022-03-17 12:30:19 · 936 阅读 · 0 评论 -
试题 算法训练 YBH数数 (Java 动态规划)
问题描述: YBH数学很差,她数数时分不清4,5和8;我们定义YBH[i]为YBH的计数法对应的i的值。 规定:YBH[4] = 5,YBH[5] = 8;YBH[i]运算规则如下: ① YBH[i+j] = YBH[i] + YBH[j] ② YBH[i*j] = YBH[i] * YBH[j] 我们会发现,用不同方法算出的YBH[i]的值是不同的,例如:当i=20时, YBH[20] = 5*YBH[4] = 25; YBH[20] = 4*YBH[5] = 32;原创 2022-05-12 16:49:03 · 590 阅读 · 1 评论 -
试题 算法提高 搬运冰块(贪心 Java)
问题描述 丑枫接到了一份奇葩的工作:往冰库里搬运冰块.冰库外放着N箱冰块,由于室外温度高,冰块会很快融化,且每箱冰块的融化速度不同.因为每箱冰块的体积,质量不等,把每箱冰块搬运进冰块花费的时间也不同.因此需要合理安排搬运顺序,才能使总的冰块融化量最小.丑枫请你帮忙计算最少的总融化量是多少,以便汇报上司.输入格式第一行输入整数N 接下来N行,每行两个整数,分别表示每箱冰块的搬运耗时Ti及融化速度Di.输出格式输出最少的总融化量样例输入6 6 1 4 5 4 3 6 2 8 1 2原创 2022-05-23 18:28:47 · 1683 阅读 · 15 评论 -
试题 算法训练 礼物 (Java)
问题描述: JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行, 他决定带回一些礼物给好朋友。 在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子。 这些石子很漂亮,JiaoShou决定以此为礼物。 但是这N个石子被施加了一种特殊的魔法。 如果要取走石子,必须按照以下的规则去取。 每次必须取连续的2*K个石子,并且满足前K个石子的重量和小于等于S, 后K个石子的重量和小于等于S。 由于时间紧迫,Jiaoshou只能取一次。 现在JiaoShou找原创 2022-03-06 09:55:22 · 1168 阅读 · 0 评论 -
试题 算法训练 跳马 (Java、DFS)
问题描述一个8×8的棋盘上有一个马初始位置为(a,b),他想跳到(c,d),问是否可以?如果可以,最少要跳几步?输入格式:一行四个数字a,b,c,d。输出格式:如果跳不到,输出-1;否则输出最少跳到的步数。样例输入:1 1 2 3样例输出:1数据规模和约定:0<a,b,c,d≤8且都是整数。思路:用深度优先遍历(DFS)搜索每一种可能到达的情况。我们熟知马在象棋中智能走“日”,因此:对于当前坐标x、y的变化共有8种情况:(1,2)(1,-2)(-1,-2)(原创 2022-03-06 14:46:42 · 770 阅读 · 0 评论 -
洛谷 P1220 关路灯 (Java 动态规划)
题目描述某一村庄在一条路线上安装了 n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电。他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯。开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大的一边,再回过头来关掉另一边的路原创 2022-05-14 15:34:26 · 815 阅读 · 3 评论 -
试题 算法训练 粘木棍 (Java)
问题描述:有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。输入格式:第一行两个整数N,M。一行N个整数,表示木棍的长度。输出格式:一行一个整数,表示最小的差距样例输入:3 210 20 40样例输出:10数据规模和约定:N, M<=7思路:将原小木棍数组排序,然后将m大(最大的m个数)的木棍放入长木棍数组,每次将剩余短木棍中最大的粘在长木棍数组最小的木棍上,再将长木棍数组重新排序,再次粘短木棍中最长的木棍,这样保证最终长木棍数组中的最长和最原创 2022-03-03 11:55:36 · 1023 阅读 · 0 评论 -
试题 算法训练 移动 (Java实现)
问题描述 给定一个n长的数列,有m次操作,第i次操作表示将整个数列循环移动mi位,询问每次操作结束后的开头k个数字 输入格式 第一行三个整数n,m,k。 第二行n个整数表示数列。 接下来m行,每行一个整数mi,表示移动位数,若mi为正,表示向左移mi位,若mi为负数,表示向右移-mi位。 输出格式 m行,每行k个数,表示开头k个数字 样例输入5 2 31 2 3 4 52-2样例输出3 4 51 2 3数据规模和约定 n<=1000000原创 2022-04-01 19:26:38 · 925 阅读 · 0 评论 -
ACWing 2206. 排队(数学 Java)
分析:本题考数学的排列组合,结果非常大,long的数据范围都不够,可以直接用BigInteger来处理大数思路:代码:原创 2022-06-03 12:32:19 · 471 阅读 · 0 评论 -
AcWing 2456. 记事本
题目描述最初在一个记事本上只有一个字符 A。你每次可以对这个记事本进行两种操作:Copy All (复制全部) :你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) :你可以粘贴你上一次复制的字符。 给定一个数字 n。你需要使用最少的操作次数,在记事本中打印出恰好 n 个 A。输出能够打印出 n 个 A 的最少操作次数。输入格式一个整数 n。输出格式一个整数,表示最少操作次数。数据范围1≤n≤1061≤n≤10^61≤n≤106题目链接:记事本.原创 2022-05-31 14:17:44 · 376 阅读 · 0 评论 -
AcWing 343. 排序(Floyd传递闭包,Java)
题目描述:给定 n 个变量和 m 个不等式。其中 n 小于等于 26,变量分别用前 n 的大写英文字母表示。不等式之间具有传递性,即若 A>B 且 B>C,则 A>C。请从前往后遍历每对关系,每次遍历时判断:如果能够确定全部关系且无矛盾,则结束循环,输出确定的次序;如果发生矛盾,则结束循环,输出有矛盾;如果循环结束时没有发生上述两种情况,则输出无定解。输入格式输入包含多组测试数据。每组测试数据,第一行包含两个整数 n 和 m。接下来 m 行,每行包含一个不等式,不等原创 2022-05-24 22:40:01 · 460 阅读 · 2 评论 -
算法训练——动态规划
几道动态规划的典型题,助你熟悉动态规划原创 2022-05-22 20:30:58 · 650 阅读 · 6 评论 -
Acwing 167.木棒(剪枝必刷题)
超经典剪枝例题,没刷过的一定要看看原创 2022-05-22 19:57:12 · 807 阅读 · 5 评论 -
Acwing 171. 送礼物(双向dfs + 二分)
题目描述:达达帮翰翰给女生送礼物,翰翰一共准备了 N 个礼物,其中第 i 个礼物的重量是 G[i]。达达的力气很大,他一次可以搬动重量之和不超过 W 的任意多个物品。达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。输入格式第一行两个整数,分别代表 W 和 N。以后 N 行,每行一个正整数表示 G[i]。输出格式仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。数据范围1 ≤ N ≤ 46,1 ≤ W, G[i] ≤ 231−1题.原创 2022-05-21 14:39:22 · 319 阅读 · 0 评论 -
Acwing 164.可达性统计(Java)
题目描述:给定一张N个点M 条边的有向无环图,分别统计从每个点出发能够到达的点的数量。输入格式第一行两个整数N,M,接下来M行每行两个整数 x,y,表示从x到y的一条有向边。输出格式输出共N行,表示每个点能够到达的点的数量。数据范围1≤N,M≤30000题目链接:可达性统计思路:不能直接使用DFS,因为对于a->b, a->c, b->d, c->d的情况,使用DFS得到 a 可达的点有4个,b , d , c , d,...原创 2022-05-20 22:17:23 · 1277 阅读 · 4 评论