
蓝桥杯
文章平均质量分 72
nefu_zth
这个作者很懒,什么都没留下…
展开
-
蓝桥杯 Day12 java组 BFS
连通性判断连通性判断是图论中的一个简单问题,就是找一张图中互相连通的部分,是基础的搜索,用 DFS 或 BFS 都行:BFS判断连通性步骤: 从图上任意一个点u开始遍历,把它放进队列中。 弹出队首u,标记u已经搜过,然后搜索u的邻居点,若邻居点符合连通条件,放到队列中。 继续弹出队首,标记搜过,然后搜索它的邻居,把符合连通条件的放进队列。继续以上步骤,直到队列为空。此时所有连通点都已经找到。 DFS判断连通性步骤是: 从图上任意一个点u开始遍历,标...原创 2022-02-13 14:55:14 · 378 阅读 · 0 评论 -
蓝桥杯 Day 14 java组 DP
和贪心、分治一样,动态规划是一种解题的思路,而不是一个具体的算法知识点。动态规划是一种需要学习才能获得的思维方法。像贪心、分治这样的方法,在生活中,或在其他学科中有很多类似的例子,很容易联想和理解。但是动态规划不是,它是一种生活中没有的抽象计算方法,没有学过的人很难自发产生这种思路。硬币问题假设有五种面值的 循环五次#include<bits/stdc++.h>using namespace std;const int M = 251; ...原创 2022-03-01 09:33:03 · 307 阅读 · 0 评论 -
蓝桥杯 Day15 java组 初等数论
最大公约数 GCD 和最小公倍数 LCMGCD 即最大公约数Greatest Common Divisor。整数 a 和 b 的最大公约数是指能同时整除 a 和 b 的最大整数 编码时只需要考虑正整数的最大公约数GCD的性质:通常使用欧几里得算法(辗转相除法)来求GCD,如下所示:(其中默认a>b 且a,b都为正整数)import java.util.Scanner;public class Main { public static void main(Str..原创 2022-03-03 11:03:50 · 536 阅读 · 0 评论 -
蓝桥杯 java组 Day16 快速幂和矩阵快速幂
模运算模运算是大数运算中的常用操作。如果一个数太大,无法直接输出,或者不需要直接输出,可以把它取模后,缩小数值再输出。取模也是哈希的常用技术。定义取模运算为 a 除以 m 的余数,记为:amodm=a对于 a mod m = a,必须要求 a 和 m 的正负号一致,都为正数或都为负数;如果正负不同,取模和求余的结果是不同的。另外取模的结果满足 0 ≤ a mod m < m−1,题目会用给定的 m,限制计算结果的范围。取模运算的加减乘除第一题 快速幂...原创 2022-03-04 10:38:05 · 508 阅读 · 0 评论 -
蓝桥杯 java组 Day18 做题
第一题 卡片import java.util.*;public class Main { private static int[] a; private static int count = 0; public static void main(String[] args) { a = new int[10]; for(int i = 0;i<=9;i++){ a[i] = 2021; } int temp = 1; int flag = 0;原创 2022-03-10 13:28:39 · 267 阅读 · 0 评论 -
蓝桥杯 Day13 java组 剪枝
暴力法往往比较低效,把时间浪费在很多不必要的计算上。剪枝是一个比喻:把不会产生答案的,或不必要的枝条“剪掉”。而剪枝的关键在于剪枝的判断:剪什么枝、在哪里减。剪枝是搜索常用的优化手段,常常能把指数级的复杂度,优化到近似多项式的复杂度。BFS的主要剪枝技术是判重,如果搜索到某一层时,出现重复的状态,就剪枝。 DFS的剪枝技术较多,有可行性剪枝、最优性剪枝、搜索顺序剪枝、排除等效冗余、记忆化搜索等等:可行性剪枝:对当前状态进行检查,如果当前条件不合法就不再继续,直接返回 搜索顺序剪枝:搜索原创 2022-02-15 17:38:17 · 403 阅读 · 0 评论 -
蓝桥杯 Day17 java组 并查集
判断连通性除了可以用学习过的 BFS、DFS 外,还可以用一个叫”并查集“的算法并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并和查询问题。经典的应用有:判断连通性、最小生成树 Kruskal 算法、最近公共祖先(Least Common Ancestors, LCA)等。并查集在算法竞赛中也十分常见:一是简单且高效,二是应用很直观,三是容易和其他数据结构和算法结合。...原创 2022-03-08 17:49:51 · 365 阅读 · 0 评论 -
蓝桥杯 Day11 java组 DFS
所谓暴力法,是把所有可能的情况都罗列出来,然后逐一检查,从中找到答案。暴力法往往是“低效”的代名词。不过相对其他“高效”算法,暴力法不仅简单且编码量一般都更短更好写。所以当拿到一个题目后,首先想想如何用暴力法解决。如果暴力法的代码能满足题目要求的时间和空间限制,就用暴力法。若暴力法不能满足要求,也可以把它当成对照,用来验证高级算法的正确性。暴力搜索的思路很简单,但是有的时候操作起来并不容易。比如蓝桥杯中常见的迷宫问题:如何用数据结构表示一个迷宫?...原创 2022-02-10 15:24:11 · 793 阅读 · 0 评论 -
蓝桥杯 Day2 Java组 排序和排列
第一题 计算阶乘 n!输入一个正整数n,输出n!的值。n<=1000。1. 定义一个大数组A[]来存大数,数组的一个元素存大数的一位。例如A[0]存个位,A[1]存十位,A[2]存百位,等等。2. 那么A[]需要定义成多大?也就是说,1000!有多少位?可以自己估计,不过,可以用 windows 自带的计算器能直接算出来,1000! ≈ 4×10^{2567}。代码中定义一个更大的A[10000]。3. 模拟乘法计算,处理进位:例如356×8。先计算个位的6×8,得48,其...原创 2022-01-08 15:55:41 · 880 阅读 · 0 评论 -
蓝桥杯 Day4 java组 算法前
把第一天没有用编程实现的题尽量实现第一题 分数1/1 + 1/2 + 1/4 + 1/8 + 1/16 + …每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来,分子分母要求互质。Math.pow计算出来以后是浮点数 可以用(int)强制类型和转换成整形public class Main { public static void main(String[] args) { int a = (int) Math.pow(2,20)-1;原创 2022-01-27 15:05:36 · 148 阅读 · 0 评论 -
蓝桥杯 Day7 java组 倍增
倍增法和二分法是“相反”的算法。二分是每次缩小一倍,从而以 O(logn)的步骤极快地缩小定位到解;倍增是每次扩大一倍,从而以 O(2^n)的速度极快地扩展到极大的空间。所以倍增和二分的效率都很高。二分法与倍增的应用场景二分法是缩小区间,最后定位到一个极小的区间,小到这个区间的左右端点重合(或者几乎重合),从而得到解,解就是最后这个极小区间的值。所以二分法的适用场合,是在一个有序的序列,或者一个有序的曲线上,通过二分缩小查询区间,其目的是找到一个特定的数值。 倍增相反,是从小区间扩大到大区间。在区原创 2022-01-30 16:51:37 · 1334 阅读 · 1 评论 -
蓝桥杯 Day3 java组 排序与排列
第一题 统计数字某次科研调查时得到了 n 个自然数,每个数均不超过 (1.5×10^9 )。已知不相同的数不超过 10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入描述:第 1 行是整数 n,表示自然数的个数。第 2∼n 行每行一个自然数。8242451002100输出描述:输出 m 行(m 为 n 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。2原创 2022-01-09 16:34:41 · 462 阅读 · 0 评论 -
蓝桥杯 Day9 java组 贪心
贪心贪心(Greedy)可以说是最容易理解的算法思想:把整个问题分解成多个步骤,在每个步骤,都选取当前步骤的最优方案,直到所有步骤结束;在每一步,都不考虑对后续步骤的影响,在后续步骤中也不再回头改变前面的选择。简单地说,其思想就是“走一步看一步”、“目光短浅”。虽然贪心法不一定能得到最优解,但是它思路简单、编程容易。因此,如果一个问题确定用贪心法能得到最优解,那么应该使用它。贪心法求解的问题,需要满足以下特征:最优子结构性质。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性原创 2022-02-05 17:08:07 · 1047 阅读 · 0 评论 -
蓝桥杯 Day1 java组
第一题小蓝要为一条街的住户制作门牌号。这条街一共有 2020位住户,门牌号从 1到 2020编号。小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到 2020号门牌,总共需要多少个字符 2?public class Main { public static void main(String原创 2022-01-07 21:38:59 · 6159 阅读 · 0 评论 -
蓝桥杯 Day6 java组 二分法
二分法有「整数二分」和「实数二分」两种情况。实数二分的代码好写不易出错;整数二分的代码因为要考虑整除的问题,代码容易出错。二分法的效率极高。比如在有序的n个数中找某个数,只需要二分log2n 次,也就是说它的时间复杂度是 O(log2n) 的。例如有 n = 10^7个数,只需要24 次就能找到答案。总结一下,二分法把一个长度为 n 的有序序列上 O(n) 的查找时间,优化到了O(log2n)。注意,这个序列的数字一定要是「有序」的,二分才有...原创 2022-01-29 17:16:56 · 1671 阅读 · 1 评论 -
蓝桥杯 Day8 java组 前缀和
对于一个长度为n的数组 a[0]∼a[n−1],它的前缀和 sum[i] 等于 a[0]∼a[i] 的和。例如:sum[0] = a[0] sum[1] = a[0] + a[1] sum[2] = a[0] + a[1] + a[2] ⋯利用递推,只要计算 n 次,就能计算出所有的前缀和:sum[i] = sum[i-1] + a[i]。当然,我们也能用 sum[] 反推计算出 a[]:a[i] = sum[i] - sum[i-1]。如果预先算出了前缀和,这时想知道 a[...原创 2022-02-03 17:33:40 · 8259 阅读 · 0 评论 -
蓝桥杯 Day5 java组 尺取法
尺取法,可以叫做双指针、two pointers,是算法竞赛中一个常用的优化技巧,用来解决序列的区间问题。操作简单,容易编程。可以把两重循环转化为一重循环,从而把时间复杂度从 O(n2) 提高到O(n)。尺取法概念总结把循环指针 i 、j 称为「扫描指针」,在尺取法中,这两个指针 i、j,有两种扫描方向:反向扫描。i、j方向相反,i从头到尾,j从尾到头,在中间相会。也可以把反向扫描的i、j指针称为「左右指针」。 同向扫描。i、j方向相同,都从头到尾,但是速度不一样,比如可以让...原创 2022-01-28 17:59:47 · 421 阅读 · 1 评论 -
Java对文件进行数字的读写
最近在写论文,要用java进行文件的读写。记一下如何实现的。FileOutputStream fout; try { fout = new FileOutputStream("CCC.txt",true); PrintWriter pwr = new PrintWriter(fout); pwr.print(iter); pwr.print(" "); pwr.p原创 2021-05-04 09:01:12 · 1123 阅读 · 0 评论