摘要:
1.宏定义: 宏定义又称为宏替换、宏代换,简称“宏”,是C提供的三种预处理功能的其中一种①。其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率。 2.格式: 简单宏定义 格式:#define <宏名/标识符> <字符串> eg:#define PI 3 阅读全文
摘要:
原题 寻找道路相通最小数,并查集即可 判断需要几条道路:并查集合并之后就成了类似于一棵树,不在一棵树上的说明不能合并,判断最小合并次数即需要最少道路 问题转化成:并查集,判断树的多少,即有多少个集合(x个),把这些集合合并需要多少次(x-1次) #include <cstdio> #include 阅读全文
摘要:
原题 #include <cstdio> #include <iostream> using namespace std; int main(){ int s, v, t = 0; cin>>s>>v; //上去整, 直接算到垃圾分类的时间 if(s % v == 0) t += 10; else 阅读全文
摘要:
3. 区间合并 原理:区间排序左端点有交集的区间可以合并 struct OI{int l, r;}num[N]; inline int cmp(OI a, OI b){return a.l < b.l;} //按照左端点排序 sort(num+1, num+1+n,cmp); void combin 阅读全文
摘要:
拉链法 #include <iostream> #include <cstring> using namespace std; //空间(数组长度)最好是质数,离2的整数次幂尽可能的远(减少冲突) const int N = 1e6 + 3; int e[N], ne[N], h[N],n, idx 阅读全文
摘要:
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 8, M = 1e6 + 2; char p[N], s[M]; int n, m, ne[M]; int main(){ // p --> 模板串 s --> 模式串 阅读全文
摘要:
单链表 int head, e[N], ne[N], idx; // 0 号点 e[0] 指针 ne[0] = 1; head --> 头结点下标 // e[i] --> 表示节点 i的值 // ne[i] --> 表示节点 i 的next指针 // idx --> 存储当前用到的地址,相当于指针, 阅读全文
摘要:
朴素Dijkstra //Dijkstra算法,用于单源最短路边都为正数的情况 int n, m; int dis[N], g[N][N]; //dis -> 最短距离 g -> 图 bool st[N]; int Dijkstra(){ memset(dis, 0x3f, sizeof(dis)) 阅读全文
摘要:
深度优先搜索: 深度优先搜索其实就是暴力枚举的优化版本,深度优先搜索从一种情况一直走下去,直到错误了或者是已经是答案时就不再枚举(返回上一层寻找还有没有其他的解,直到所以可能可行的情况都试过为止)。 水 //模板: void dfs(int x){ if (边界条件){记录答案/最优解;return 阅读全文
摘要:
手写小根堆:堆一般就是完全二叉树,满足父节点小于等于子节点(大根堆相反) 数组存储堆: 1.父亲节点为 x ,则左右儿子节点分别为 2x , 2x + 1 2.插入一个数: head[++size] = x ; up(size); 3.求集合中最小值: head[1]; 4.删除最小值: head[ 阅读全文