算法板子
summermoonlight
满船清梦压星河
展开
-
算法板子--数据结构
模拟散列表(拉链法)#include<iostream>#include<cstring>using namespace std;const int maxn=100003;//取一个大于数据范围的质数就行int n;int h[maxn],e[maxn],ne[maxn],idx;void insert(int x){ int k=(x%maxn+maxn)%maxn; e[idx]=x; ne[idx]=h[k]; h[k]=原创 2021-05-20 09:45:09 · 94 阅读 · 0 评论 -
算法板子--图
dijkstra算法const int inf = 1e9;const int maxn = 1005;int g[maxn][maxn];int d[maxn];bool vi[maxn];vector<int> pre[maxn];int n;void dj(int s) { fill(d, d + maxn, inf); d[s] = 0; for (int i = 0; i < n; i++) { int u = -1, minn = inf; fo原创 2021-05-17 13:44:30 · 159 阅读 · 0 评论 -
oj常用函数及模板
stoi(str)将string转换为数字串,直到遇到第一个非法字符为止。需要首字符是数字或者空格,否则返回错误。int main(){ char ss[]="_5"; int a = stoi(ss); cout << a+10; return 0;}//out//运行时异常atoi(str)将string转换为数字串,直到遇到第一个非法字符为止。首字符为非法字符时,输出0。int main(){ char ss[]="_5"; int a = ato.原创 2021-04-09 10:14:13 · 354 阅读 · 0 评论 -
算法板子--DP总结
01背包问题详细推导过程:链接当前背包容量不够(j < v[i]),没得选,因此前 i 个物品最优解即为前 i−1个物品最优解:对应代码:f[i][j] = f[i - 1][j]。当前背包容量够,可以选,因此需要决策选与不选第 i 个物品:选:f[i][j] = f[i - 1][j - v[i]] + w[i]。不选:f[i][j] = f[i - 1][j] 。我们的决策是如何取到最大价值,因此以上两种情况取 max()朴素版code#include<iost原创 2021-05-11 15:03:57 · 167 阅读 · 0 评论 -
寻找有序序列第一个满足某条件的元素的位置(二分查找)
//二分区间为[left,right]=[0,n],初值必须能够覆盖解的所有可能取值int solve(int left,int right){ int mid; while(left<right){ mid=left+(right-left)/2; if(条件成立){//条件成立,第一个满足条件的元素的位置<=mid right=mid;//往左区间[left,mid]查找 }else{ left=mid+1; } } return left;//此处r原创 2021-04-20 21:10:30 · 177 阅读 · 1 评论 -
算法板子--基础算法
vector<int> add(vector<int> &a,vector<int> &b){ vector<int > c; int t=0;//进位 for(int i=0;i<a.size()||i<b.size();i++) { if(i<a.size())t+=a[i]; if(i<b.size())t+=b[i]; c.push_back(t%10); t/=10; } if(t)原创 2021-04-27 11:48:00 · 172 阅读 · 0 评论 -
算法板子-数学相关
文章目录质数判断分解质因数筛素数求所有约数求最大公约数质数判断bool is_prime(int x){ if(x<=1)return false; for(int i=2;i<=x/i;i++){ if(x%i==0) return false; } return true;}分解质因数vector<pair<int,int> > divide(int x){ vector<原创 2021-05-16 20:46:30 · 65 阅读 · 0 评论