蓝桥杯(Java)(ing)
Java前置知识
输入流:
(在Java面向对象编程-CSDN博客里面有提过相关知识------IO流)
// 快读快写
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
// 常见读入
static Scanner sc = new Scanner(System.in);
Scanner:
基本类型和字符串的读取方法
- next():查找并返回下一个完整标记(token),即下一个由分隔符界定的字符串。
- nextLine():返回当前行的剩余部分,并移动到下一行。注意,nextLine() 在使用其他 nextXxx() 方法后可能需要单独处理换行符的问题。
- nextInt():扫描下一个整数作为 int 类型。
- nextLong():扫描下一个整数作为 long 类型。
- nextDouble():扫描下一个浮点数作为 double 类型。
- nextFloat():扫描下一个浮点数作为 float 类型。
- nextByte():扫描下一个字节值作为 byte 类型。
- nextShort():扫描下一个短整数值作为 short 类型。
- nextBoolean():扫描下一个布尔值作为 boolean 类型。
- nextBigInteger() 和 nextBigDecimal():分别扫描下一个大整数或大浮点数。
检查下一个元素是否存在的方法
- hasNext():如果输入有另一个标记,则返回 true。
- hasNextLine():如果有另一行输入,则返回 true。
- hasNextInt()、hasNextLong()、hasNextDouble() 等等:检查下一个标记是否为指定类型的值。
设置和获取分隔符
- useDelimiter(String pattern) 或 useDelimiter(Pattern pattern):设置此扫描器用于划分标记的分隔符模式。
- delimiter():返回此扫描器当前的分隔符模式。
其他有用的方法
- close():关闭此扫描器。如果这个扫描器已经关闭,则调用此方法将不起作用。
- reset():重置此扫描器,使其丢弃所有局部状态并恢复到其初始状态。
- findWithinHorizon(Pattern pattern, int horizon):尝试找到与给定模式匹配的输入子序列。
- skip(Pattern pattern):跳过输入中的所有输入,直到遇到与给定模式匹配的内容为止。
注意事项
当使用 nextXXX() 方法(如 nextInt()、nextDouble() 等)读取基本类型数据后,如果接下来想用 nextLine() 读取一整行输入,应该先调用一次 nextLine() 来消耗掉之前的换行符。否则,nextLine() 可能会立即返回一个空字符串。
使用完 Scanner 后应当调用 close() 方法以释放资源,尤其是在读取文件时。
BufferedWriter
- 缓冲写入:BufferedWriter 可以显著减少磁盘I/O次数,从而提高写入速度。
- 自动换行:newLine() 方法可以根据当前平台添加正确的换行符。
- 批量刷新:使用 flush() 方法确保所有缓冲的数据都被写入目标输出流。
BufferedReader
- 按行读取:BufferedReader 的 readLine() 方法可以高效地读取整行文本。
- 字符数组读取:如果需要逐字符处理,可以使用 read(char[] cbuf, int off, int len) 方法批量读取字符到一个字符数组中。
注意事项:
在读取多个值时,通常会先读取一行,然后用空格分割字符串,再转换为相应的类型。
使用 trim() 方法去除多余的空白字符,特别是换行符,这在读取整数或浮点数时非常重要。
二维字符数组读取:
在Java中读取二维字符数组,通常是通过读取每一行的字符串,然后将这些字符串转换为字符数组,并将其分配给二维字符数组的相应行。
for (int i = 0; i < 4; i ++) {String t = sc.nextLine();g[i] = t.toCharArray();}
递归和递推
指数型枚举
题目简述:从1~n中选取任意个数字,升序排列
解题思路:
对于每一个数字都有两种选择,选或者不选,从根节点开始搜索(空节点,什么都不选),可以类似于看作为有n位数字位,你往下搜索的过程中,你都可以选择向这个空位是否填数字,当你做完最后一个选择时(对第n个数进行选择之后),就可以递归回溯了,整个搜索的过程可以画出一个递归搜索树,如下图
import java.util.Scanner;public class Main{private static final int N = 20;private static int n;private static boolean[] st = new boolean[N];public static void dfs(int u) {if (u == n + 1){for (int i = 1; i <= n; i ++)if (st[i])System.out.printf("%d ", i);System.out.println();return; // 回溯}// 选当前数字st[u] = true;dfs(u + 1);// 不选当前数字st[u] = false;dfs(u + 1);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();dfs(1);sc.close();}
}
排列型枚举
题目简述:将1~n进行排列组合
题目思路:考虑每一位可以填哪几个数,用过的数字需要标记
补充:
输入输出流
InputStream/OutputStream 类:
InputStream.read(): 读取一个字节。
OutputStream.write(byte b): 写入一个字节。
BufferedReader/BufferedWriter 类:
BufferedReader.readLine(): 读取一行。
BufferedWriter.write(String str): 写入字符串。
import java.util.Scanner;
import java.io.*;public class Main {private static final int N = 15;private static int n;private static boolean[] st = new boolean[N];private static int[] path = new int[N];private static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));private static void dfs(int u) throws IOException{// 递归出口if (u == n) {for (int i = 0; i < n; i ++)out.write(path[i] + " ");out.write("\n"); return; // 回溯}// 向第u位填数for (int i = 1; i <= n; i ++) {if (!st[i]) {path[u] = i; // 第u位填上ist[i] = true; // 代表在当前分支上 i已经被用过了dfs(u + 1); // 填下一位st[i] = false; // 恢复现场,回溯过程}}}public static void main(String[] args) throws IOException{Scanner sc = new Scanner(System.in);n = sc.nextInt();dfs(0);out.flush();out.close();}
}
简单递推
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();if (n == 0) System.out.println(0);else if (n == 1) System.out.println("0");else if (n == 2) System.out.println("0 1");else {int a = 0, b = 1, c = 0;System.out.printf("0 1");for (int i = 3; i <= n; i ++) {c = a + b;System.out.printf(" %d", c);a = b;b = c;}}}
}
费解的开关
解析:
每一盏灯都有两种选择 : 按或者不按。
通过递推发现规律:
1. 当第一行的操作方案确定时,剩余行的操作方案也确定了
2.前一行的状态影响下一行的操作
举例:
假设第一行选择某一种方案进行操作后的状态如图所示:
第一行的状态决定了第二行的操作(要使得第一行灯灭的格子变亮,就必须对该格子下方的方格进行操作):
操作完成后第一行的格子全亮
以此类推......
思路:
1.枚举第一行格子的每一种操作方案:使用二进制表示操作方式,1表示按,0表示不按
2.枚举前四行的状态,操作下一行,使得前四行的格子全亮
3.判断最后一行格子是否全亮
题目:
你玩过“拉灯”游戏吗?
25盏灯排成一个 5×5 的方形。
每一个灯都有一个开关,游戏者可以改变它的状态。
每一步,游戏者可以改变某一个灯的状态。
游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。
我们用数字 1 表示一盏开着的灯,用数字 0 表示关着的灯。
给定一些游戏的初始状态,编写程序判断游戏者是否可能在 6 步以内使所有的灯都变亮。
输入格式
第一行输入正整数 n,代表数据中共有 n 个待解决的游戏初始状态。
以下若干行数据分为 n组,每组数据有 5 行,每行 5 个字符。
每组数据描述了一个游戏的初始状态。
各组数据间用一个空行分隔。
输出格式
一共输出 n 行数据,每行有一个小于等于 6 的整数,它表示对于输入数据中对应的游戏状态最少需要几步才能使所有灯变亮。
对于某一个游戏初始状态,若 6 步以内无法使所有灯变亮,则输出 −1。
数据范围
0<n≤500
输入样例:
3 00111 01011 10001 11010 1110011101 11101 11110 11111 1111101111 11111 11111 11111 11111
输出样例:
3 2 -1
import java.io.*;
import java.util.Scanner;public class Main {static int n;static final int N = 510;static char[][] c = new char[N][N];static int[][] g = new int[N][N];static int[][] backup = new int[N][N];static int[] dx = {0, 1, 0, -1, 0};static int[] dy = {0, 0, 1, 0, -1}; // 改变上下左右四个灯的状态private static void turn(int x, int y){for (int i = 0; i < 5; i ++){int a = x + dx[i], b = y + dy[i];if (a >= 1 && a <= 5 && b >= 1 && b <= 5){if (g[a][b] == 0) g[a][b] = 1;else g[a][b] = 0;}}}// 当前状态的最小步数private static int bfs(int[][] g) {int cnt = 0;for (int i = 1; i <= 4; i ++){for (int j = 1; j <= 5; j ++){if (g[i][j] == 0) {turn(i + 1, j);cnt ++;}}}for (int i = 1; i <= 5; i ++)if (g[5][i] == 0)return -1;return cnt;}// 将g数组重置private static void AmemcpyB(){for (int i = 1; i <= 5; i ++){for (int j = 1; j <= 5; j ++){g[i][j] = backup[i][j];}}}public static void main(String[] args) throws IOException{Scanner sc = new Scanner(System.in);n = sc.nextInt();while (true){if (n == 0) break;if (n >= 1)sc.nextLine();for (int i = 1; i <= 5; i ++){String str;str = sc.nextLine();c[i] = str.toCharArray();}for (int i = 1; i <= 5; i ++){for (int j = 1; j <= 5; j ++){g[i][j] = c[i][j - 1] - '0';backup[i][j] = g[i][j];}}int ans = 10; // 最终步数for (int op = 0; op < (1 << 5); op ++){AmemcpyB();int res = 0;for (int i = 0; i < 5; i ++){if ((op >> i & 1) == 1){turn(1, i + 1);res ++;}}int x = bfs(g);if (x != -1){res += x;ans = Integer.min(ans, res);}}if (ans > 6) ans = -1;System.out.println(ans);n --;}}
}
组合型枚举
AcWing 93. 递归实现组合型枚举
输入样例:
5 3
输出样例:
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
import java.util.Scanner;public class Main {static final int N = 50;static int n, m;static boolean[] st = new boolean[N];static int[] path = new int[N];private static void dfs(int u, int last) {if (m - u > n - last) return;if (u == m + 1) {for (int i = 1; i <= m; i ++)System.out.printf("%d ", path[i]);System.out.println();return;}for (int i = last; i <= n; i ++) {if (!st[i]) {path[u] = i;st[i] = true;dfs(u + 1, i);st[i] = false;}}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();dfs(1, 1);scanner.close();}
}
带分数
解析: n = a + b / c
经过变形得:b = nc - ac
import java.util.Scanner;public class Main {static final int N = 15;static int n;static boolean[] st = new boolean[N]; // 标记用过的数字static boolean[] backup = new boolean[N];static int res = 0;// n = a + b / c// b = nc - ac// 枚举a的全排列: u表示当前用掉的位数,a表示当前啊的值private static boolean check(int a, int c) {long b = (long)n * c - (long)a * c;if (a == 0 || b == 0 || c == 0) return false;System.arraycopy(st, 0, backup, 0, N);while (b > 0) {int x = (int)(b % 10);b /= 10;if (x == 0 || backup[x]) return false;backup[x] = true;}for (int i = 1; i <= 9; i ++) {if (!backup[i]) return false;}return true;}private static void dfs_c(int u, int a, int c) {if (u == 9) return; // 用完了if (check(a, c)) res ++;for (int i = 1; i <= 9; i ++) {if (!st[i]) {st[i] = true;dfs_c(u + 1, a, c * 10 + i);st[i] = false;}}}private static void dfs_a(int u, int a) {if (u == 9) return; // 全部用光了if (a != 0) dfs_c(u, a, 0); // 枚举可填的数for(int i = 1; i <= 9; i ++) {if (!st[i]) {st[i] = true; // 表示当前这个数字已用dfs_a(u + 1, a * 10 + i);st[i] = false; // 恢复现场}}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n = scanner.nextInt();dfs_a(0, 0);System.out.println(res);}
}
飞行员兄弟
输入样例:
-+--
----
----
-+--
输出样例:
6
1 1
1 3
1 4
4 1
4 3
4 4
思路:
这一题的数据范围较小,暴力枚举每一种方案,运用二进制表示操作方案
import java.util.Scanner;public class Main {private static final int N = 4;private static char[][] g = new char[N][N];private static char[][] backup = new char[N][N];public static void Print_Char(char[][] str) {for (int i = 0; i < 4; i ++) {for (int j = 0; j < 4; j++) {System.out.printf("%c", str[i][j]);}System.out.println();}System.out.println();}public static void op_c(char[][] str, int x, int y) {if (str[x][y] == '+') str[x][y] = '-';else if (str[x][y] == '-') str[x][y] = '+';}// 改变行列public static void Change_col_row(char[][] str, int x, int y) {// 改变x这一行,y这一列for (int i = 0; i < 4; i ++) {op_c(str, x, i);op_c(str, i, y);}op_c(str, x, y);}// 判断冰箱是否打开public static boolean is_success(char[][] str) {for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if (str[i][j] == '+') {return false;}}}return true;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);for (int i = 0; i < 4; i ++) {String t = sc.nextLine();g[i] = t.toCharArray();}for (int i = 0; i < (1 << 16); i ++) {for (int k = 0; k < 4; k ++) {System.arraycopy(g[k], 0, backup[k], 0, N);}int cnt = 0;for (int k = 0; k < 16; k ++) {if (((i >> k)&1) == 1) {Change_col_row(backup, k/4, k%4);cnt ++;} }boolean flag = is_success(backup);if (flag) {System.out.println(cnt);for (int k = 0; k < 16; k ++) {if (((i>>k)&1) == 1) {System.out.printf("%d %d\n", k / 4 + 1, k % 4 + 1);}}}}}
}
翻硬币
输入样例1:
**********
o****o****
输出样例1:
5
输入样例2:
*o**o***o***
*o***o**o***
输出样例2:
1
import java.util.Scanner;public class Main {private static final int N = 110;private static char[] a = new char[N];private static char[] b = new char[N];public static void turn(char[] str, int x) {if (str[x] == '*') str[x] = 'o';else if (str[x] == 'o') str[x] = '*';if (str[x + 1] == '*') str[x + 1] = 'o';else if (str[x + 1] == 'o') str[x + 1] = '*';}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);a = scanner.next().toCharArray();b = scanner.next().toCharArray();int cnt = 0;for (int i = 0; i < a.length - 1; i ++) {if (a[i] != b[i]) {cnt ++;turn(a, i);}}System.out.println(cnt);}
}
二分与前缀和
基础知识:
二分查找与前缀和文章浏览阅读197次。基础算法复习总结:快速排序+归并排序+二分查找+高精度运算+前缀和与差分+双指针算法+位运算+离散化+区间合并https://blog.csdn.net/m0_73569492/article/details/133460398?spm=1001.2014.3001.5501
机器人跳跃问题
输入样例1:
5
3 4 3 2 4
输出样例1:
4
输入样例2:
3
4 4 4
输出样例2:
4
输入样例3:
3
1 6 4
输出样例3:
3
思路:
从左边开始查找的二分问题
import java.util.Arrays;
import java.util.Scanner;public class Main {private static final int N = 1000010;private static int[] h = new int[N];private static int n;// 判断初始能量为e是否成功public static boolean check(int e) {for (int i = 0; i < n; i ++) {e += (e-h[i]);if (e < 0) return false;if (e >= N) return true;}return true;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();int l = 0, r = N;for (int i = 0; i < n; i ++) {h[i] = sc.nextInt();}// 二分法while (l < r) {int mid = (l + r) / 2;if (check(mid)) r = mid;else l = mid + 1;}System.out.println(l);}
}
四平方和
输入样例:
5
输出样例:
0 0 1 2
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int a = 0; a * a <= n; a ++) {for (int b = a; a * a + b * b <= n; b ++) {for (int c = b; a * a + b * b + c * c <= n; c ++) {int x = n - a * a - b * b - c * c;if (x < c * c) continue;else {double t = Math.sqrt((double)x); if (t - (int)t == 0) {System.out.printf("%d %d %d %d\n", a, b, c, (int)t);return;}}}}}}
}
分巧克力
输入样例:
2 10
6 5
5 6
输出样例:
2
思路:
分出来的巧克力边长越大越好,所以可以采用从右边开始查找的二分法
import java.util.Scanner;public class Main {private static final int N = 1000010;private static int[] h = new int[N];private static int[] w = new int[N];public static boolean check(int x, int n, int k) {int sum = 0;for (int i = 1; i <= n; i ++) {sum += (h[i] / x) * (w[i] / x);}if (sum >= k) return true;return false;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();for (int i = 1; i <= n; i ++) {h[i] = scanner.nextInt();w[i] = scanner.nextInt();}int l = 1, r = h[1];while (l < r) {int mid = (l + r + 1) / 2;if (check(mid, n, k)) l = mid;else r = mid - 1;}System.out.println(r);}
}
激光炸弹
输入样例:
2 1
0 0 1
1 1 1
输出样例:
1
思路:
二维前缀和
import java.util.Scanner;public class Main {private static final int N = 5100;private static int[][] g = new int[N][N];private static int[][] s = new int[N][N];private static int n, r;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);n = scanner.nextInt();r = scanner.nextInt();for (int i = 1; i <= n; i ++) {int x, y, c;x = scanner.nextInt();y = scanner.nextInt();c = scanner.nextInt();g[x + 1][y + 1] += c;}// 求二维前缀和for (int i = 1; i < N; i ++) {for (int j = 1; j < N; j ++) {s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + g[i][j];}}if (r >= N) {System.out.println(s[N - 1][N - 1]);return;}// 枚举起点int res = Integer.MIN_VALUE;for (int i = 1; i < N - r; i ++) {for (int j = 1; j < N - r; j ++) {// (i, j) 到 (i + r - 1, j + r - 1)的和int sum = s[i + r - 1][j + r - 1] - s[i - 1][j + r - 1] - s[i + r - 1][j - 1] + s[i - 1][j - 1];res = Math.max(res, sum);}}System.out.println(res);}
}
K倍区间
输入样例:
5 2
1
2
3
4
5
输出样例:
6
思路:
注意:
cnt[(int)(s[i] % k + k) % k]
因为s[i]的数据类型为long,数组下标可能会越界变成负数,所以需要将其操作使其为非负数
import java.util.Scanner;public class Main {private static final int N = 100010;private static int[] a = new int[N];private static long[] s = new long[N];private static int[] cnt = new int[N];public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();long sum = 0;for (int i = 1; i <= n; i ++) {a[i] = scanner.nextInt();s[i] = s[i - 1] + a[i];cnt[(int)(s[i] % k + k) % k] ++;}for (int i = 0; i < k; i ++) {if (cnt[i] != 0) sum += (long)(cnt[i] - 1) * cnt[i] / 2;}System.out.println(sum + cnt[0]);}
}
数学与简单Dp
小编:
人甚至不能共情自己。。。花了五个小时证明买不到的数目这题。。。
买不到的数目(裴蜀定理)
思路:
1.只有互质的情况下才有解
2.当两数互质时,根据裴蜀定理 ax+by=1
3.具体方法:
(1).通过暴力枚举,观察结果,发现规律,提出假设。
n = (p - 1)*(q - 1) - 1 = pq - p - q
import java.util.Scanner;public class Main {private static int p, q;public static boolean dfs(int m, int p, int q) {if (m == 0) return true;if (m >= p && dfs(m - p, p, q)) return true;if (m >= q && dfs(m - q, p, q)) return true;return false;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 输入个数while (n -- > 0) {p = scanner.nextInt();q = scanner.nextInt();int res = 0;for (int i = 1; i <= 1000; i ++) {if (!dfs(i, p, q)) res = i;}System.out.println(res);}}
}
(2).证明假设:
代码:
import java.util.Scanner;public class Main {private static int p, q;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);p = scanner.nextInt();q = scanner.nextInt();System.out.println(p * q - p - q);}
}
注意:如有错误,欢迎指正!!!
相关文章:
蓝桥杯(Java)(ing)
Java前置知识 输入流: (在Java面向对象编程-CSDN博客里面有提过相关知识------IO流) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…...
[Pro Git#2] 分支管理 | branch fix_bug , feature | 处理合并冲突
目录 一、Issue模板文件 二、Pull Requests模板文件 分支管理 1. 理解分支 2. 创建与管理分支 1. 切换分支与提交历史 2. 合并分支 3. 删除分支 4. 解决合并冲突 6. 查看分支合并情况 快速创建并切换分支 分支管理策略 分支合并模式 分支管理原则 日常开发环境 …...
Java——集合框架
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 集合框架概述1.1 内存层面需要针对多个数据进行存储。此时,可以考虑的容器有:1.2 数组存储多个数据方面的特点和弊端1.3 Java集合框架体系…...
Mac 环境 VVenC 编译与编码命令行工具使用教程
VVenC VVenC 是一个开源的高效视频编码器,专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准,主要目的是提供比 HEVC 更高的压缩效率,同时保持或提高视频质量。H.266/VVC…...
WebRTC:实现浏览器与移动应用的实时通信
1.技术简介 (Web Real-Time)是一种开放式实时通信技术,旨在使浏览器和移动应用程序通过简单的API即可实现实时音频、视频和数据传输,而无需安装插件或额外软件。它支持网络应用中的点对点通信,例如视频聊天、语音通话…...
curl+openssl 踩坑笔记
curl编译:点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …...
【NebulaGraph】变化的多跳查询
【NebulaGraph】变化的多跳查询 1. 需求2. 解决方案2.1 确定查询结构2.2 构建查询语句 3. 追加需求:如果增加每一跳都要指定查询某SPACE下的Tag,或者不查询某个Tag怎么办 1. 需求 存在多跳请求,其中每一跳是从上一跳查询结果为基础的。但是 …...
【C++】九九乘法表编程题详解与多角度对比分析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目概述题目描述 💯老师的实现方法代码解析优点不足 💯我的实现方法代码解析优点不足 💯实现方法对比💯优化与扩展代码优化…...
node.js卸载并重新安装(超详细图文步骤)
卸载node.js 重新安装nodejs 一、卸载 1、首先进入控制面板卸载程序 2、卸载后 到文件夹中进行进一步的删除 删除上述的几个文件夹 每个人可能不一样,总之是找到自己的nodejs安装路径,下面是我的 ①删除C:UsersAdminAppDataRoaming路径下的npm相关文件…...
redis的集群模式与ELK基础
一、redis的集群模式 1.主从复制 (1)概述 主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器ÿ…...
一份关于 Ubuntu 系统下代理配置的故障排查笔记
Ubuntu 网络代理配置与故障排查指南 在使用 Ubuntu 系统时,配置网络代理可以帮助提升网络访问速度或突破网络限制。然而,代理配置过程中可能会遇到各种问题。本文将详细介绍如何在 Ubuntu 下配置网络代理,并提供故障排查的步骤和解决方案。 …...
如何用jmeter工具进行性能测试
前言 今天我们来说说jmeter如何进行性能测试,我们都知道jmeter工具除了可以进行接口功能测试外,还可以进行性能测试。当项目趋于稳定,根据性能需求就可以着手准备性能测试了,今天就说一说jmeter如何进行性能测试,jmet…...
五、Vue 循环语句
文章目录 简介一、基础数组迭代二、对象属性迭代三、整数循环 简介 在 Vue.js 的世界里,当我们需要处理重复性的结构并依据数据动态渲染时,v-for 指令就成了不可或缺的工具,它赋予开发者简洁且强大的能力,轻松应对各种列表渲染场景…...
HMSC联合物种分布模型
联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,Hmsc是物种群落分层模型的缩写(Hierarchical Modelling of Species Communities),它是一种基于…...
【CPU】risc-v指令集和其他指令集的差别(个人草稿)
第三,在 RISC-V 中对于所有指令,要读写的寄存器的标识符总是在同一位置,意味着在解码指令之前,就可以先开始访问寄存器。在许多其他的 ISA 中,某些指令字段在部分指令中被重用作为源目的地,在其他指令中又被…...
处理元素卡在视野边界,滚动到视野内
效果图如下: 本示例处理场景:点击底部的折叠面板,展开后移动端滚动条位置不变,导致展开内容在视图外。造成面板展开无内容的错觉。 处理核心API: IntersectionObserver 此API可绑定元素并监听元素是否在视野内。若在视野外…...
环,域,体,整区,理想,极大理想,
环: 定义: 加法交换群 乘法半群 分配律 域的定义: 加法交换群 乘法群(去掉0元是交换群) 分配律 Eg:比如整数集合不是域,因为对于乘法来说,去掉0后没有单位元了,但是是环 Eg…...
音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
大模型—Ollama 结构化输出
Ollama 结构化输出 Ollama现在支持结构化输出,使得可以按照由JSON模式定义的特定格式来约束模型的输出。Ollama的Python和JavaScript库已经更新,以支持结构化输出。 结构化输出的用例包括: 从文档中解析数据从图像中提取数据结构化所有语言模型响应比JSON模式更可靠和一致开…...
基于Pytorch和yolov8n手搓安全帽目标检测的全过程
一.背景 还是之前的主题,使用开源软件为公司搭建安全管理平台,从视觉模型识别安全帽开始。主要参考学习了开源项目 https://github.com/jomarkow/Safety-Helmet-Detection,我是从运行、训练、标注倒过来学习的。由于工作原因,抽空…...
数据结构与算法基础(C语言版)
参考资料:https://www.bilibili.com/video/BV1GW421A7qY/ 所有代码均已在Ubuntu 20.04.6 LTS中测试通过 逻辑结构与存储结构 逻辑结构 逻辑结构指的是数据对象中数据元素间的相互关系,分为以下四种: 集合结构 集合结构中的数据元素除了同属于…...
Qt监控系统放大招/历经十几年迭代完善/多屏幕辅屏预览/多层级设备树/网络登录和回放
一、前言说明 近期对视频监控系统做了比较大的更新升级,主要就是三点,第一点就是增加了辅屏预览,这个也是好多个客户需要的功能,海康的iVMS-4200客户端就有这个功能,方便在多个屏幕打开不同的视频进行查看,…...
使用Locust对MySQL进行负载测试
1.安装环境 pip install locust mysql-connector-python 2.设置测试环境 打开MySQL服务 打开Navicat新建查询,输入SQL语句 3.编写locust脚本 load_mysql.py # codingutf-8 from locust import User, TaskSet, task, between import mysql.connector import ran…...
layui多图上传,tp8后端接收处理
环境:layui2.9.21\thinkphp8.1 前端代码: layui.use([upload, layer], function() {const upload layui.upload;const layer layui.layer;const $ layui.$;// 上传图片const uploadInstImage upload.render({elem: #uploadImage,url: /admin/demo/…...
【Rust自学】8.3. String类型 Pt.1:字符串的创建、更新与拼接
8.3.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编…...
Linux(Ubuntu)下ESP-IDF下载与安装完整流程(1)
本文主要看参考官网说明,如下: 快速入门 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 Linux 和 macOS 平台工具链的标准设置 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 一、安装准备 为了在ESP32-S3中使用ESP-IDF,需要根据操作系统安装一些软件包。可以参考以下安…...
Android性能优化—— 内存优化
Android 系统中,垃圾回收是自动的,比较隐蔽,这就导致一些内存问题表现的并不明显,出现问题后难以定位。常见的内存问题有内存泄漏、内存溢出(Out of Memory)、内存抖动等。 我们做内存优化的主要原因有以下…...
【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算
【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算 一、简介 在MATLAB中计算Sobol二阶效应指数通常涉及到全局敏感性分析(Global Sensitivity Analysis, GSA),其中Sobol方法是一种流行的技术,用于评估模型输入…...
【Scala】图书项目系统代码演练3.1/BookService
package org.app package serviceimport models.{BookModel, BorrowRecordModel}import org.app.dao.{BookDAO, BorrowRecordDAO}import java.time.LocalDateTime import scala.collection.mutable.ListBuffer// 图书业务逻辑层 class BookService {private val bookDAO new B…...
Gateway
目录 使用 工作机制 Predicate断言 Filter过滤器(鉴权) GatewayFilter GlobalFilter 使用 Gateway底层是使用Ribbon来实现负载均衡的 新建模块,端口5001 1、引入依赖 spring-boot-starter-web里存在tomcat,spring-cloud-st…...
SpringSecurity中的过滤器链与自定义过滤器
关于 Spring Security 框架中的过滤器的使用方法,系列文章: 《SpringSecurity中的过滤器链与自定义过滤器》 《SpringSecurity使用过滤器实现图形验证码》 1、Spring Security 中的过滤器链 Spring Security 中的过滤器链(Filter Chain)是一个核心的概念,它定义了一系列过…...
【OTA】论文学习笔记--《基于RTOS的车载ECU双分区OTA升级技术分析报告》
引言 研究背景 - 汽车智能化、网联化发展趋势下,OTA升级已成为智能网联汽车的必备功能 - 传统RTOS控制器在OTA升级失败后无法进行软件回滚,导致控制器功能失效 - 现有技术主要针对Linux、QNX等智能操作系统,缺乏针对RTOS的解决方案 研究目的 提出一种适用于RTOS控制器的双分…...
MLA:多头潜在注意力
MLA:多头潜在注意力 多头潜在注意力(MLA)机制是一种在深度学习模型中用于处理序列数据的注意力机制的改进形式,以下是对其原理和示例的详细介绍: 原理 低秩键值联合压缩:MLA机制利用低秩键值联合压缩来消除注意力模块中的某些计算,从而提高模型的运行速度和性能。在传…...
【python】matplotlib(moon cake)
文章目录 1、Style12、Style23、Style34、Style45、Style56、Style67、Style78、参考的库函数matplotlib.patches.Arcmatplotlib.patches.Wedge 9、参考 1、Style1 """ author: tyran """from numpy import sin, cos, pi import matplotlib.pyp…...
C++ hashtable
文章目录 1. 基本概念2. 哈希函数3. 哈希冲突及解决方法开放定址法链地址法再哈希法建立公共溢出区4. 哈希表的操作实现5. 内存管理及优化 时间复杂度理想情况(无哈希冲突或冲突极少)一般情况(考虑哈希冲突及解决方法)综合来看 以…...
ip怎么查域名?IP和域名分别是什么?
为什么我们可以通过简单的域名访问网站,而不是记住一串复杂的数字?IP地址和域名之间到底是什么关系?在互联网的世界里,IP地址和域名是两种重要的概念,它们共同构成了我们日常上网的基础。 IP地址是互联网协议地址的缩…...
大模型提示词初探
大模型提示词初探 在与大模型交互的过程中,提示词起着至关重要的作用,它犹如给模型下达的精准任务指令,直接影响着模型生成内容的准确性、高效性与合理性。合理运用提示词,能够有效减少模型出现错误和幻觉的情况,从而…...
Linux的进程替换以及基础IO
进程替换 上一篇草率的讲完了进程地址空间的组成结构和之间的关系,那么我们接下来了解一下程序的替换。 首先,在进程部分我们提过了,其实文件可以在运行时变成进程,而我们使用的Linux软件其实也是一个进程,所以进一步…...
《Vue进阶教程》第三十一课:ref的初步实现
往期内容: 《Vue进阶教程》第二十课:lazy懒执行 《Vue进阶教程》第二十一课:支持缓存 《Vue进阶教程》第二十二课:自定义更新(调度器) 《Vue进阶教程》第二十三课:渲染计算属性的结果 《Vue进阶教程》第二十四课&…...
Wend看源码-Java-集合学习(Queue)
概述 Wend看源码-Java-集合学习(List)-CSDN博客 Wend看源码-Java-集合学习(Set)-CSDN博客 在前两篇文章中,我们分别探讨了Java集合框架的父类以及List集合和Set集合的实现。接下来,本文将重点阐述Java中的Queue集合,包括其内部的数据结…...
大数据面试笔试宝典之HBase面试
1.HBase 数据存储位置 HBase 中的数据存储在哪里? 以什么格式存储?和 Zookeeper 什么关系? 参考答案: 1.HBase 中的所有数据文件都存储在 Hadoop HDFS 文件系统上。 2.包含两种文件类型: HFile : HBase 中 KeyValue 数据的存储格式。HFile 是 Hadoop 的二进制格式文件…...
React基础知识学习
学习React前端框架是一个系统而深入的过程,以下是一份详细的学习指南: 一、React基础知识 React简介 React是一个用于构建用户界面的JavaScript库,由Facebook开发和维护。它强调组件化和声明式编程,使得构建复杂的用户界面变得更…...
实战指南:Shiro、CAS打造完美单点登录体验
引言 想象一下,在日常工作中,我们经常需要进行系统认证和授权。当用户尝试登录一个网站时,他们需要提供用户名和密码,网站会检查这些信息,确认用户是谁。这就是认证的过程。 一旦用户被认证,他们可能会尝…...
光储充一体化解决方案详解。
一、光储充介绍 1、什么是光储充 “光储充”一体化,顾名思义,是由光伏发电、储能、充电集成一体、互相协调支撑的绿色充电模式。其工作原理是利用光伏发电,余电由储能设备存储,共同承担供电充电任务。在用电高峰,光储…...
TDengine 新功能 VARBINARY 数据类型
1. 背景 VARBINARY 数据类型用于存储二进制数据,与 MySQL 中的 VARBINARY 数据类型功能相同,VARBINARY 数据类型长度可变,在创建表时指定最大字节长度,使用进按需分配存储,但不能超过建表时指定的最大值。 2. 功能说明…...
2024年秋词法分析作业(满分25分)
【问题描述】 请根据给定的文法设计并实现词法分析程序,从源程序中识别出单词,记录其单词类别和单词值,输入输出及处理要求如下: (1)数据结构和与语法分析程序的接口请自行定义;类别码需按下表格…...
AF3 checkpoint_blocks函数解读
checkpoint_blocks 函数实现了一种分块梯度检查点机制 (checkpoint_blocks),目的是通过分块(chunking)执行神经网络模块,减少内存使用。在深度学习训练中,梯度检查点(activation checkpointing)是一种显存优化技术。该代码可以: 对神经网络的块(blocks)按需分块,并对…...
VITUREMEIG | AR眼镜 算力增程
根据IDC发布的《2024年第三季度美国AR/VR市场报告》显示,美国市场AR/VR总出货量增长10.3%。其中,成立于2021年的VITURE增长速度令人惊艳,同比暴涨452.6%,成为历史上增长最快的AR/VR品牌。并在美国AR领域占据了超过50%的市场份额&a…...
详解MySQL在Windows上的安装
目录 查看电脑上是否安装了MySQL 下载安装MySQL 打开MySQL官网,找到DOWNLOADS 然后往下翻,找到MySQL Community(GPL) Downloads>> 然后找到MySQL Community Server 然后下载,选择No thanks,just start my download. 然后双击进行…...
细说STM32F407单片机CAN基础知识及其HAL驱动程序
目录 一、CAN总线结构和传输协议 1、 CAN总线结构 (1)闭环结构的CAN总线网络 (2)开环结构的CAN总线网络 (3)隐性电平和显性电平 2、CAN总线传输协议 (1)CAN总线传输特点 &am…...