
算法板子
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 · 138 阅读 · 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 · 348 阅读 · 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 · 415 阅读 · 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 · 202 阅读 · 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 · 246 阅读 · 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 · 359 阅读 · 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 · 86 阅读 · 0 评论