随笔分类 - cpp学习 / cpp
2.3 搜索与图论(最小生成树和二分图)
摘要:1. 朴素版Prim算法 跟朴素dijkstra有点像,但是每次更新的是每个点到已收录的点的集合的距离,而不是到起点的距离。 先迭代n次,每次找到距离集合距离最小的点,将其收录、更新res,然后用其更新其余点到集合的距离 代码如下: #include <iostream> #include <cst
2.3搜索与图论(最短路)
摘要:1.朴素Dijkstra算法 稠密图用邻接矩阵,稀疏图用邻接表存 1≤m≤10^5,所以显然这是个稠密图,由于图中可能存在重边和自环,于是我们用g[N][N]存储每条边的距离时,先要将其初始化为无穷,然后读取时比较一下其与原数组中的值的大小,取最小值存储。Dijkstra方法中,对于每个数都循环一次
2.3搜索与图论
摘要:1.dfs n皇后问题 #include <iostream> using namespace std; const int N = 20; int n; char g[N][N]; int col[N] , dg[N] , udg[N];//列,正对角线,斜对角线 void dfs(int u){
2.2数据结构哈希表
摘要:#include <iostream> #include <cstring> using namespace std; const int N = 100003; int h[N] , e[N] , ne[N] , idx;//h是数组头,e是存的插的链表的值,ne是其下一个的idx void in
2.2数据结构(2)
摘要:1.Trie树 , 高速地存储和查找字符串集合的数据结构 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1e5+10; int son[N][26] , c
2.2数据结构
摘要:1.链表 1)单链表:邻接表 数组实现单链表: #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N = 100010; //e[N
2.1基础算法
摘要:1.双指针 2.位运算 3.离散化 1)去除重复元素 vector<int>all; sort(all.begin() , all.end());//排序 all.erase(unique(all.begin() , all.end()) , all.end());//删除末尾的重复元素 2)代码
2.1基础算法(排序)
摘要:1.快速排序:基本思想是分治,时间复杂度nlog(n) 1)确定分界点 2)调整区间 3)递归处理左右两段 #include <iostream> #include <cstdio> using namespace std; const int N = 100010; int a[N]; void
1.9位运算与常用库函数
摘要:1.位运算 & 与 AND | 或 OR ~ 非 NOT ^ 异或 XOR >> 右移 << 左移 求x的第k位数字 x >> k & 1 , 从后往前数,最末一位是0 lowbit(x) = x & -x,-x是(~x+1) ; 返回x的最后一位1 , 即110110,则返回10 ; 101000
1.8 STL、位运算、常用库函数
摘要:1.vector 头文件#include <vector> 常见的方法有vector.clear() ; vector.size() ; vector.empty(); 遍历输出vector: #include <iostream> #include <vector> using namespace
1.7类、结构体、指针与引用
摘要:1.类的定义 在类的大括号后面要加分号。 private:加私有的变量,方法等 public:加公开的变量方法等 类的调用:直接写类的名字就行 2.结构体和类 在类中没有声明是private还是public则默认为private,class count 在结构体中默认为pubic,struct co
1.6函数
摘要:1.静态变量,指某个变量只会创建一次,static 调用5次count方法,而n只会被定义一次0,所以输出的n并不会一直是1 2.函数调用赋值 此时a和b的值都不会变化,但是在被引用的函数添加上取地址符号就不一样了 3.数组参数调用 一维数组能省略数组的大小,多维数组只能省第一个 代码: 给定一个数
1.4字符串习题
摘要:题真的不会做 1.str.back()字符串的最后一位,比如"abc"的最后一位是c 2.str.pop_back(),删除最后一位。 3,swap(a,b)交换a和b。 4.用scanf读取字符串 , 推荐用%s读 , 比如读单个字母 char a[2]; scanf("%s" , a); 不需要
1.4字符串string
摘要:1.定义和初始化 2.string上的操作,str.c_str()方法 判断字符串是否为空,str.empty() 返回字符串长度,str.size()。 比较大小还有复制直接用比较符号,可以用+将字符串合并 遍历字符串 使用auto,当不确定或者写类别太麻烦 3.常用方法 string.pop_b
1.4字符串char
摘要:头文件#include <cstring> 1.ASCII码对照表 int 48表示0,65表示A,97表示a 输入一行字符,统计数字和字母各出现了多少次 2.字符串读入 字符使用单引号引起来的,字符串是用双引号。 字符串就是字符数组加上\0 可以使用字符串来初始化字符数组,但是因为要加\0,所以字
1.3数组
摘要:1.定义数组的方式 如果写int a[n];而不赋值的话,数组的值是随机的 但是把它放到函数外面存储到堆空间,为全局变量而不是局部变量,会全是0 想要定义一个数组但是不确定长度,可以定义的时候长度写多一点,比如int a[100] = {1,2,3};int a[10] = {1};指前几个数是你输
1.2判断语句
摘要:1.使数的宽度保持一定,用%n int a = 123;double b = 1.23; printf("%d",a);//输出123。 printf("%5d",a);//输出 123。printf("%-5d",a);//输出123 。 printf("%05d",a);//输出00123.pr
1.1输入输出习题错误
摘要:恢复内容开始 1.cin写成下面这个样子 #include <iostream> using namespace std; int main(){ int A,B,C,D; cin >> A >> B >> C >> D >>; cout << (A*B)-(C*D) <<endl; system(