日历清单算法笔记
Trie
高效的存储和查找字符串集合的数据结构
并查集
1、将两个集合合并2、询问两个元素是否在一个集合当中,3,时间复杂度为o(m),m为边数
O2优化
用了ios::sync_with_stdio(false),和cin.tie(0)就不能用scanf和printf了
最大异或对
最大异或对:一个数乘以2,相当于把这个数的二进制向左移1位,也就是在后面加一个0除以2也是同理for循环中的 i > = 0可以改成~ i ;这两者等价
系统分配空间
系统为某个程序分配空间时所需的时间与空间大小无关,与申请次数有关capacity()表示数组的实际容量size()表示已经使用的数据容量
getline()
substr()函数在string头文件里,作用是截取一段字符串getline函数这样用 ; getline(cin,str);
scanf和cin
超过1百万就用scanf,1百万以下和cin差不多
count()和find()
全局变量 char g[N][N]的好处就是每个元素默认为’\0’,所以可以用puts输出每一行!!但要保证N比 ...
快速幂和线性筛法
算法分解质因数123456789101112131415161718192021222324#include<iostream>using namespace std;int main() { int T; cin >> T; while(T --) { int n; cin >> n; for(int i = 2; i <= n / i; i ++) { int s = 0; while(n % i == 0) { s ++; n /= i; } if(s) cout << i << ' ' << s << endl; } if(n > 1) c ...
树形dp和记忆化搜索
算法石子合并
f[i][j]表示的是将第i堆石子到第j堆石子合并所需的最小代价。 非入口初始化无穷大,入口考虑将i堆石子和i堆石子和合并的情况。
最后一步肯定是将 两堆石子合并,合并有很多种情况,这里枚举了位置。
1234567891011121314151617181920212223242526272829303132#include<iostream>#include<cstring>using namespace std;const int N = 310;int n;int a[N], s[N];int f[N][N];int main() { cin >> n; memset(f, 0x3f, sizeof(f)); for(int i = 1; i <= n; i ++) { cin >> a[i]; s[i] = a[i] + s[i - 1]; f[i][i] = 0; } // 因为f[1][n ...
sort()和最短编辑距离
算法力扣302周赛t3
c++自定义排序规则~
12345678910111213141516171819202122class Solution {public: vector<int> smallestTrimmedNumbers(vector<string>& nums, vector<vector<int>>& qs) { int n = nums.size(), m = qs.size(); vector<pair<string, int>> str(n); for(int i = 0; i < n; i ++) str[i] = {nums[i], i}; vector<int> ans; for(int i = 0; i < m; i ++) { int k = qs[i][0], trim = qs[i] ...



