
算法
算法
霞鹜
这个作者很懒,什么都没留下…
展开
-
入门筛素数
#include<iostream>//筛某范围的素数 using namespace std; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { if (i <= 2) { continue; } else { int flag = 1; for (int j = 2; j*j <= i; j++) { if (i%j == 0) { fla原创 2021-06-04 16:57:03 · 143 阅读 · 0 评论 -
广度优先搜索入门——走迷宫
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。 请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。 数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。 输入格式 第一行包含两个整数 n 和 m。 接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。 输出格原创 2021-05-27 11:31:29 · 280 阅读 · 0 评论 -
深度优先搜索入门——排列数组
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1≤n≤7 输入样例: 3 输出样例: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 深度优先搜索的基础题目,一条路走到底,在进行单一路径逐步加深的时候,没加深一层就要加一层dfs,不断递归。 我的错误代码 #include<iostream> using n原创 2021-04-09 20:40:53 · 211 阅读 · 0 评论 -
小数二分
先上模板 double l,double r,double mid; while(fabs(r-l)<eps){ if(check(mid))r=mid; else l=mid; } //还是将l或r作为结果。 小数二分一般就是精度容易出问题。 先来第一个:电缆大师 Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunte原创 2021-02-28 17:11:22 · 367 阅读 · 0 评论 -
前缀和和差分
前缀和和差分是两种预处理方法。 都需要新建一个数组 #include<iostream> using namespace std; int main() { int a[100] = { 0 }; int b[100] = { 0 }; int c[100] = { 0 }; //前缀和 for (int i = 1; i <= 100; i++) { cin >> a[i]; b[i] = a[i] + b[i - 1]; } //差分 for (i原创 2021-02-28 15:56:41 · 145 阅读 · 0 评论 -
快速排序
#include<iostream> using namespace std; void quick_sort(int q[], int l, int r) { if (l >= r)//标志着排序结束 return; int i = l - 1, j = r + 1, x = q[l + r >> 1];//因为最开始有i++和j--,所以要写成-1,+1形势 while (i < j)//指针重合,则排序结束 { do i++; while (q[i]原创 2021-02-28 15:15:51 · 112 阅读 · 0 评论 -
二分查找
二分法常见有两个模板: 这个是划分区间为[l,mid]和[mid+1,r]两个部分。 int bsearch_1(int l, int r) { while (l < r) { int mid = (l + r) / 2; if (check(mid)) r = mid; else l = mid + 1; } return l; } 这个模板再对取mid时用直接除二,这就会出现1,4的mid值为2。 ——————原创 2021-01-25 15:13:26 · 142 阅读 · 0 评论 -
简单并查集
这里将介绍简单并查集。 例题部分是程序自动分析。 并查集是一种通过建立父节点和子节点的关系,来确立两者是否有联系。 a和b有关系,b和c有关系,a和d有关系,那么我想查找c和d的关系,就要用到并查集。 接下来给出一道例题,程序自动分析: Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当原创 2021-01-10 14:37:08 · 142 阅读 · 0 评论 -
二分法最终判断
先放两个代码: while(l<r) { mid=(l+r)/2; if(check(mid)) r=mid; else l=mid+1; } if(3*mid*mid+3*mid+1==m) printf("YES\n"); else printf("NO\n") while(l<r) { mid=(l+r)/2; if(check(mid)) r=mid; else l=mid+1; }原创 2021-01-05 10:36:35 · 269 阅读 · 0 评论 -
stl二分函数
菜鸟笔记1 第一次使用stl中的函数。 很不幸题目没法复制粘贴,简述题目如下: 输入n个整数,进行m次查找(就是查找程序运行m遍)每次查找找一个数。 题目如下: 输入样例: 第一行 2 个整数 n 和 m,表示数字个数和询问次数。 第二行 n 个整数,表示这些待查询的数字。 第三行 m 个整数,表示询问这些数字的编号,从 1 开始编号。 eg:输入 11 3 1 3 3 3 5 7 9 11 13 15 15 1 3 6 输出 1 2 -1 #include<cstdio>//及时复习,有关st原创 2020-11-29 00:09:24 · 471 阅读 · 0 评论