![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
MengYiKeNan
让我们一起成长吧!
展开
-
图论方法应用
声明:本博客题目和题解均来自www.acwing.com,侵权连删。各种图论题目最合适的解法如下:1. Dijkstra求最短路(朴素法)给定一个 nnn 个点 mmm 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 1 号点到 nnn 号点的最短距离,如果无法从 1 号点走到 nnn 号点,则输出 −1 。输入格式第一行包含整数 nnn 和 mmm。接下来 mmm 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个原创 2021-05-31 21:31:22 · 963 阅读 · 0 评论 -
给定三个点求其可以确定的圆的半径(C语言)
#include<stdio.h>#include<math.h>int main(){ double x1 = 5., y1 = 0., x2 = 0., y2 = 5., x3 = 10., y3 = 5.; //定义double型变量 double x12, y12, x13, y13, x12q, y12q, x13q, y13q; double a, b, xm, ym, R; printf("GEBEN SIE DIE KOORDINATEN x1,原创 2021-05-11 18:48:56 · 1342 阅读 · 0 评论 -
快速排斥、跨立实验判断线段是否相交
写在前面在其他博客中看到这方面的知识,很多都是重复,并且说的总是云里雾里的,所以这里我就自己总结一下这种问题如何求解,判断两个线段是否相交在前面我们提到了会用到叉积的一点知识,那么这里就来详细说一下怎么判断两个线段是否相交算法详解首先我们看一下快速排斥实验,快速排斥实验也就是以两条线段作为对角线做矩形,判断两个矩形是否相交,那么我们这里可以知道:1)如果两个矩形不相交,那么线段一定不相交2)如果两个矩形相交,那么线段不一定相交,如下图所以这里我们首先就要判断两条线段形成的矩形是否相交,只有相交转载 2021-03-20 14:52:13 · 643 阅读 · 0 评论 -
素数筛模板
查找N内所有素数1.埃氏筛#include<iostream>using namespace std;typedef long long ll;const int N = 2e7+10;int prime[N];bool vis[N];long long idx = 0;void aishi(){ for(ll i = 2; i < N; i++){ if(!vis[i]) { prime[idx++] = i;原创 2021-03-07 13:04:08 · 95 阅读 · 0 评论 -
最难公共祖先(最常用算法)
题目:https://www.luogu.com.cn/problem/P3379题解:LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。———来自百度百科例如:在这棵树中 17 和 8 的LCA就是 3, 9 和 7 的LCA就是 7 。明白了LCA后,就下来我们就要探讨探讨LCA怎么求了 qwqqwqqwq暴力算法以 17 和 18 为例,既然要求LCA,那么我们就让他们一个一个向上爬(我要一步一步往上爬 —转载 2021-03-02 13:04:32 · 174 阅读 · 0 评论 -
三门问题(代码实现)
凭感觉写的,也不知道对错#include<iostream>#include<ctime>#include<cstdlib>using namespace std;const int N = 1e8;int main(){ srand((unsigned)time(NULL)); int scount = 0; // select count int ccount = 0; // change count for(int i = 0; i &l原创 2021-02-02 14:41:18 · 494 阅读 · 0 评论 -
翻硬币(不用改变原字符串)
题目描述小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作。输入格式两行等长的字符串,分别表示初始状态和要达到的目标状态。输出格式一个整数,表示最小操作步原创 2021-02-01 16:26:57 · 127 阅读 · 0 评论 -
最长上升子序列问题的两个解题方法
题目描述给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1 ≤ N ≤ 1000,−10910^9109 ≤ 数列中的数 ≤ 10910^9109输入样例:73 1 2 1 8 5 6输出样例:4算法1(动态规划) O(n2n^2n2)状态表示:dp[i]表示从第一个数字开始算,以a[i]结尾的最大的上升序列。(以a[i]结尾的所有上升序列中原创 2021-02-01 16:16:01 · 538 阅读 · 0 评论 -
算法笔记
查找第k个数nth_element(a,a+k,a+n); //a为有n个数的数组原创 2021-01-09 19:55:31 · 99 阅读 · 0 评论 -
七种查找算法
查找1. 顺序查找2. 二分查找3. 插值查找4. 斐波那契查找5. 树表查找5.1 最简单的树表查找算法——二叉树查找算法。5.2 平衡查找树之2-3查找树(2-3 Tree)5.3 平衡查找树之红黑树(Red-Black Tree)5.4 B树和B+树(B Tree/B+ Tree)6. 分块查找7. 哈希查找本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找原创 2020-12-20 11:15:10 · 2852 阅读 · 1 评论