C++算法进阶
c++算法进阶:进阶篇欢迎来到进阶篇!如果你已经学完了入门篇的枚举、模拟、递归、贪心、二分、前缀和、DFS、BFS、栈、队列、树、图、动态规划和基础图论算法,那你已经具备了不错的基础。接下来我们要往更深处探索——高精度乘除法、排序算法、二分进阶、前缀和与差分进阶、动态规划的更多模型、图论中最短路和并查集、字符串匹配、数论、STL进阶以及各种优化技巧。准备好了吗?Let’s go!
第1章 高精度乘除法在入门篇我们学了高精度加法和减法,原理就是用数组模拟竖式,倒着存数字,逐位运算。这一章我们继续学高精度的乘法和除法,思路一样,但细节更丰富。
1.1 高精度乘法(模拟竖式)高精度乘法的思路:还是模拟竖式。想象一下小学做乘法:
1 2 3× 4 5-------- 6 1 5+ 4 9 2--------= 5 5 3 5
核心规律:a的第i位乘以b的第j位,结果会累加到c的第i+j位上。然后统一处理进位。
#include <iostream>#include <cstring>using namespace std;int a[1010], b[1 ...
C++算法入门
c++算法入门:基础篇第1章 枚举算法枚举,说白了就是 把所有可能的情况都试一遍。你想啊,如果一个问题可能的答案只有有限的几种,那最直接的办法不就是挨个儿试吗?暴力出奇迹嘛!
1.1 什么时候用枚举?
问题的可能情况是 有限的
数据范围 比较小(一般在几万到几十万以内)
实在想不出更好的算法了(保底方案)
1.2 例题1:求1~100中所有能被3整除的数这题太简单了,直接遍历1到100,判断每个数能不能被3整除就行。
#include <iostream>using namespace std;int main(){ for (int i = 1; i <= 100; i++) { if (i % 3 == 0) { cout << i << " "; } } return 0;}
运行结果会输出:3 6 9 12 … 99。这就是最基础的枚举——穷举所有可能,然后筛选出符合 ...
C++语法进阶
c++语法进阶:进阶篇第1章 二维数组以及多维数组数组都是线性存储的,但我们可以用“数组的数组”来表示多维结构。最常用的是二维数组,它就像一个表格或矩阵。
1.1 二维数组的定义// 定义在全局区(自动初始化为0)int a[110][110]; // 110 行,110 列,下标从 0 到 109// 定义在局部时,需要手动初始化int b[5][5] = {0};
1.2 二维数组的使用通过 [行下标][列下标] 访问每个元素,下标从 0 开始。
#include <iostream>using namespace std;int main() { int a[3][4]; // 3行4列 // 赋值 a[0][0] = 1; a[1][2] = 5; // 输入 cin >> a[2][3]; // 输出 cout << a[1][2] << endl; return 0;}
1.3 二维 ...
C++语法基础
C++语法基础:基础篇语言基础简介
本章将会介绍编程相关的知识,C++ 入门教程.
程序是算法与数据结构的载体,是解决 OI 问题的工具.
在 OI 中,最常用的编程语言是 C++.
学习编程是学习 OI 最基础的部分.
第1章 输入输出C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序(入门阶段可以这么认为)。
1.1 基本概念C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、通用的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。
C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
1.1.1 面向对象程序设计C++ 完全支持面向对象的程序设计,包括面向对象开发的四大 ...
C++指针详解
C++指针详解第一部分:指针基础概念1.1 什么是指针?指针是一个变量,其值是另一个变量的内存地址。
#include <iostream>using namespace std;int main() { int var = 10; // 普通整型变量 int *ptr = &var; // 指针变量,存储var的地址 cout << "变量var的值: " << var << endl; cout << "变量var的地址: " << &var << endl; cout << "指针ptr的值: " << ptr << endl; cout << "通过ptr访问的值: " << *ptr << endl; return 0;}
1.2 指针 ...
C++STL总结
C++ STL 总结-基于算法竞赛本文介绍常用STL知识,注重应用,强调用法,不强调原理和繁杂的记忆。看过之后请多运用,多敲代码试。
费尽心思重新梳理了一下,注意了些美观性,修改了部分错误,添加了部分解释,编写过程非常难。
编译时建议添加编译参数 -std=c++11(C++11 即可,C++17 或 C++20 更好)。
使DEV支持C++20 : https://blog.csdn.net/qq_50285142/article/details/122930647
1 vector1.1 介绍1.1.1 简介vector为可变长数组(动态数组),定义的vector数组可以随时添加数值和删除元素。
注意:在局部区域中(比如局部函数里面)开vector数组,是在堆空间里面开的。
在局部区域开数组是在栈空间开的,而栈空间比较小,如果开了非常长的数组就会发生爆栈。
故局部区域不可以开大长度数组,但是可以开大长度vector。
包含头文件:
#include <vector>
1.1.2 初始化
一维初始化:
vector<int> a; ...
GESP(C++)大纲
C++编程能力等级认证标准(GESP)一级标准(一)知识点详述
了解计算机的基本构成(CPU,内存,I/O设备等),了解Windows、Linux等操作系统基本概念和常见操作,了解计算机的历史及在现代社会中的常见应用。
熟悉集成开发环境使用(例如DevC++):创建文件、编辑文件、保存文件、编译、解释、调试。
掌握基础的cin语句、scanf语句、cout语句、printf语句,赋值语句等。
掌握标识符、关键字、常量、变量、表达式的概念。
掌握常量与变量的命名、定义、作用、初始化与赋值以及变量的自加与自减运算。
掌握基础算术表达式:加、减、乘、除、整除、求余。
掌握逻辑运算与(&&)、或(||)、非(!)。
掌握关系运算:大于、大于等于、小于、小于等于、等于、不等于。
掌握基础的数据类型的定义和使用(整型、实数型、字符型、布尔型)。
掌握顺序结构程序的编写。
掌握分支结构程序的编写,掌握if语句、if-else语句、switch语句,了解三目运算。
掌握循环结构程序的编写,掌握for、while、do-while循环语句的使用以及continue语句和brea ...
代码风格
代码风格1.文件结构与头文件
建议使用标准头文件,也可使用 #include <bits/stdc++.h>标准头文件可移植性更好;bits/stdc++.h 在竞赛环境中通常支持,能减少记忆负担、提高编码速度,但需注意其非标准、可移植性差的缺点(见下方说明)。
必须使用 using namespace std;简洁优先,避免代码冗长。
#include <bits/stdc++.h>using namespace std;
万能头文件的缺点
编译时间增加虽然 OI 通常不限制编译时间,但在一些在线评测系统中,如果编译器需要处理大量头文件,可能会轻微增加编译耗时。不过对大多数竞赛环境来说,这点影响可忽略。
非标准,可移植性差该头文件并非 C++ 标准的一部分,只在 GCC 环境中可用(包括 MinGW、Clang 在某些模式下也支持)。如果比赛环境使用其他编译器(如 MSVC 或未配置的 GCC),代码可能无法编译。
命名冲突风险由于包含了大量命名空间中的符号,可能会意外与自定义变量名冲突(虽然概率很低,但理论上存在)。
部分竞赛明令禁止少数严格的竞赛( ...
kali-linux安装到U盘中
kali-linux安装到U盘中前言由于手上正好有一个固态U盘,还有一些时间,就决定折腾一下kali,俗话说的好kali学的好,入狱入的早
但是又不想用虚拟机装kali第一是性能问题风扇噪音太大,第二是总感觉怪怪的。所以就直接把kali装到固态U盘里,相当于半个实体机安装了。优点就是便携,缺点就是换系统需要重启,看个人需求吧。
1、准备工作1、首先要准备一个高速U盘或者固态硬盘(固态+硬盘盒)都可以,速度快一点就行,我这里用的是移速的512gb固态U盘还是挺不错的
2、将U盘分好区安装好ventoy
3、准备一个kali的iso
2、安装ventoy首先去ventoy的官网https://www.ventoy.net/cn/download.html
下载一个ventoy然后插入u盘运行
运行之前务必确保U盘中没有重要资料
运行之前务必确保U盘中没有重要资料
运行之前务必确保U盘中没有重要资料
然后分区类型建议选gpt,分区设置可以根据U盘大小在后面留出大概五六十GB的空间给kali系统
这样的话前面的空间还是可以当正常U盘来使用的
之后安装即可
3、准备kali安装 ...
arch-linux安装教程六(zsh的安装与美化)
一、安装zsh以及oh-my-zsh1、zsh安装zsh的话就不多说了,有很多的自定义选项,并支持扩展。可以实现更强大的命令补全,命令高亮等一系列酷炫功能。但是zsh配置起来有一些麻烦所以我们借助oh-my-zsh去直接配置。
首先我们需要安装zsh非常简单sudo pacman -S zsh就可以
2、oh-my-zsh安装oh-my-zsh的官网给出了两种方式安装https://ohmyz.sh/
第一种是用curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
第二种是用wget
sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
不过两种方式都差不多主要看网络好不好,如果按上一篇或者配置好,科学上网的话是没有问题的,要不然会报错。
所以我们有第二种方法
可以直 ...










