建设网站物业经理上岗证陈俊华,如何提升进入网站的速度,建站时候源码有验证怎么办,民宿网站怎么做16届蓝桥杯算法类知识图谱.pdf
1. 格式打印
%03d#xff1a;如果是两位数#xff0c;将会在前面添上一位0
%.2f#xff1a;会保留两位小数
如果是long#xff0c;必须在数字后面加上L。
2. 进制转化
2.1. 十进制转任意进制#xff1a;
十进制转任意进制时#xff…16届蓝桥杯算法类知识图谱.pdf
1. 格式打印
%03d如果是两位数将会在前面添上一位0
%.2f会保留两位小数
如果是long必须在数字后面加上L。
2. 进制转化
2.1. 十进制转任意进制
十进制转任意进制时将这个十进制数除以进制数比如2也就是十进制转二进制得到商和一个从0~1的余数然后再以这个商为被除数除了进制数2继续得到商和一个从0~1的余数。以此方式不断相除直到得到的商为0为止。此时得到若干个余数把这些余数按从后到先的顺序排列起来那么这个排列起来的值即为该十进制转换成二进制的值。计算如图所示 最后得到的余数为二进制的非零的最高位最先得到的余数为二进制的最低位可知十进制数9转换成二进制数为1001。 2.2. 任意进制转十进制
任意进制转十进制时以二进制数1001为例该进制的最低位右一的值1就表示实际的十进制值1次低位右二的值0表示进制数2的一次方的0倍即为0次次低位右三的值0表示进制数2的二次方4的0倍即为0最高位左一的值1表示进制数2的三次方8的1倍即为8以此类推将每位得到的十进制数相加得到9该和即为二进制数1001对应的十进制数。计算如图所示 3. 一维前缀和 快速求解某区间内的各种形式的和即可使用使用迭代求和
sum[i]sum[i-1]num[i]
4. 一维差分
bi ai-ai-1
其中b1 a1
如果c是b的前缀和即ci ci-1 bi那么c就是原数组a
4.1. 常见性质
差分数组都是0说明原数组每个元素都相同差分数组的前缀和就是原数组如果bl d 与 br1 - d同时作用则c数组就是原数组aid的结果对差分的某一个位置减一等价于对原数组此位置及以后的位置减一
4.2. 特殊数列
数列 1 4 10 20 35
对应的差分数列1 3 6 10 15
差分数列是等差数列
5. 快读模板
static FastReader in new FastReader(); // 创建一个静态的 FastReader 对象用于处理输入
static PrintWriter out new PrintWriter(System.out); // 创建一个静态的 PrintWriter 对象用于输出数据// FastReader 类用于处理高效的输入
static class FastReader {static BufferedReader br; // 静态的 BufferedReader用于高效读取输入static StringTokenizer st; // 静态的 StringTokenizer用于将输入字符串分割为标记// 构造函数初始化 BufferedReader 以从标准输入读取数据FastReader() {br new BufferedReader(new InputStreamReader(System.in)); // 使用 System.in 作为输入流初始化 BufferedReader}// next() 方法返回下一个字符串标记String next() {String str ; // 定义一个空字符串用于存储读取到的行// 如果 StringTokenizer 为 null 或没有更多标记可读取读取新行while (st null || !st.hasMoreElements()) {try {str br.readLine(); // 使用 BufferedReader 读取一整行输入} catch (IOException e) { // 捕获可能的 I/O 异常throw new RuntimeException(e); // 如果发生异常抛出运行时异常}st new StringTokenizer(str); // 将读取到的行传递给 StringTokenizer 进行分割}return st.nextToken(); // 返回 StringTokenizer 的下一个标记}// nextInt() 方法返回下一个整数输入int nextInt() {return Integer.parseInt(next()); // 使用 next() 方法读取字符串并转换为整数}// nextDouble() 方法返回下一个双精度浮点数输入double nextDouble() {return Double.parseDouble(next()); // 使用 next() 方法读取字符串并转换为双精度浮点数}// nextLong() 方法返回下一个长整数输入long nextLong() {return Long.parseLong(next()); // 使用 next() 方法读取字符串并转换为长整数}
}
StringTokenizer 的分词作用 StringTokenizer 的作用是将一行输入拆分成多个标记便于依次处理比如单词或数字。可以理解为st 是一个“分词器”根据空格等分隔符来划分输入。
总结记忆方法 输入原理BufferedReader StringTokenizer 快速读取并分词。输出原理PrintWriter 快速输出。类型方法next() 负责读取字符串标记nextInt() 等方法负责类型转换。
6. 二维差分
二维差分是在一维差分的基础上推导的公式。
之前学过差分数组的前缀和就是原数组由此进行推导即可。 使用 s表示前缀和数组a表示原数组。
则
s(i,j) a(i,j) s(i-1,j) s(i,j-1) - s(i-1,j-1)
那么我们现在要求二维差分数组就
将原数组看做差分数组将前缀和看做原数组
具体原因见下图。 那么我们要求差分定为 b就将差分移到左边原式中的 a
a(i,j) s(i,j) - s(i-1,j) - s(i,j-1) s(i-1,j-1)
更换为正确的字母后
b(i,j) a(i,j) - a(i-1,j) - a(i,j-1) a(i-1,j-1)
上式就是二维差分的公式。
要求原数组的话就将 b 求前缀和即可。
6.1. 二维数组对于某个区域加常数 c
使用二维差分数组。 b(x1,y1) c;
b(x1,y21) - c;
b(x21,y1) - c;
b(x21,y21) c;多减了一次
之后再对 b 数组求前缀和得到二维原数组。 1. 格式打印
%03d如果是两位数将会在前面添上一位0
%.2f会保留两位小数
如果是long必须在数字后面加上L。
2. 进制转化
2.1. 十进制转任意进制
十进制转任意进制时将这个十进制数除以进制数比如2也就是十进制转二进制得到商和一个从0~1的余数然后再以这个商为被除数除了进制数2继续得到商和一个从0~1的余数。以此方式不断相除直到得到的商为0为止。此时得到若干个余数把这些余数按从后到先的顺序排列起来那么这个排列起来的值即为该十进制转换成二进制的值。计算如图所示 最后得到的余数为二进制的非零的最高位最先得到的余数为二进制的最低位可知十进制数9转换成二进制数为1001。 2.2. 任意进制转十进制
任意进制转十进制时以二进制数1001为例该进制的最低位右一的值1就表示实际的十进制值1次低位右二的值0表示进制数2的一次方的0倍即为0次次低位右三的值0表示进制数2的二次方4的0倍即为0最高位左一的值1表示进制数2的三次方8的1倍即为8以此类推将每位得到的十进制数相加得到9该和即为二进制数1001对应的十进制数。计算如图所示 3. 一维前缀和 快速求解某区间内的各种形式的和即可使用使用迭代求和
sum[i]sum[i-1]num[i]
4. 一维差分
bi ai-ai-1
其中b1 a1
如果c是b的前缀和即ci ci-1 bi那么c就是原数组a
4.1. 常见性质
差分数组都是0说明原数组每个元素都相同差分数组的前缀和就是原数组如果bl d 与 br1 - d同时作用则c数组就是原数组aid的结果对差分的某一个位置减一等价于对原数组此位置及以后的位置减一
4.2. 特殊数列
数列 1 4 10 20 35
对应的差分数列1 3 6 10 15
差分数列是等差数列
5. 快读模板
static FastReader in new FastReader(); // 创建一个静态的 FastReader 对象用于处理输入
static PrintWriter out new PrintWriter(System.out); // 创建一个静态的 PrintWriter 对象用于输出数据// FastReader 类用于处理高效的输入
static class FastReader {static BufferedReader br; // 静态的 BufferedReader用于高效读取输入static StringTokenizer st; // 静态的 StringTokenizer用于将输入字符串分割为标记// 构造函数初始化 BufferedReader 以从标准输入读取数据FastReader() {br new BufferedReader(new InputStreamReader(System.in)); // 使用 System.in 作为输入流初始化 BufferedReader}// next() 方法返回下一个字符串标记String next() {String str ; // 定义一个空字符串用于存储读取到的行// 如果 StringTokenizer 为 null 或没有更多标记可读取读取新行while (st null || !st.hasMoreElements()) {try {str br.readLine(); // 使用 BufferedReader 读取一整行输入} catch (IOException e) { // 捕获可能的 I/O 异常throw new RuntimeException(e); // 如果发生异常抛出运行时异常}st new StringTokenizer(str); // 将读取到的行传递给 StringTokenizer 进行分割}return st.nextToken(); // 返回 StringTokenizer 的下一个标记}// nextInt() 方法返回下一个整数输入int nextInt() {return Integer.parseInt(next()); // 使用 next() 方法读取字符串并转换为整数}// nextDouble() 方法返回下一个双精度浮点数输入double nextDouble() {return Double.parseDouble(next()); // 使用 next() 方法读取字符串并转换为双精度浮点数}// nextLong() 方法返回下一个长整数输入long nextLong() {return Long.parseLong(next()); // 使用 next() 方法读取字符串并转换为长整数}
}
StringTokenizer 的分词作用 StringTokenizer 的作用是将一行输入拆分成多个标记便于依次处理比如单词或数字。可以理解为st 是一个“分词器”根据空格等分隔符来划分输入。
总结记忆方法 输入原理BufferedReader StringTokenizer 快速读取并分词。输出原理PrintWriter 快速输出。类型方法next() 负责读取字符串标记nextInt() 等方法负责类型转换。
6. 二维差分
二维差分是在一维差分的基础上推导的公式。
之前学过差分数组的前缀和就是原数组由此进行推导即可。 使用 s表示前缀和数组a表示原数组。
则
s(i,j) a(i,j) s(i-1,j) s(i,j-1) - s(i-1,j-1)
那么我们现在要求二维差分数组就
将原数组看做差分数组将前缀和看做原数组
具体原因见下图。 那么我们要求差分定为 b就将差分移到左边原式中的 a
a(i,j) s(i,j) - s(i-1,j) - s(i,j-1) s(i-1,j-1)
更换为正确的字母后
b(i,j) a(i,j) - a(i-1,j) - a(i,j-1) a(i-1,j-1)
上式就是二维差分的公式。
要求原数组的话就将 b 求前缀和即可。
6.1. 二维数组对于某个区域加常数 c
使用二维差分数组。 b(x1,y1) c;
b(x1,y21) - c;
b(x21,y1) - c;
b(x21,y21) c;多减了一次
之后再对 b 数组求前缀和得到二维原数组。