地图上我们的距离只有三厘米
qq_52051345
博客转移至www.acming.net和51codefly.com
展开
-
树状数组与线段树
引入线段树和树状数组是两个十分相似的数据结构,它们能使对一个区间的数据修改以及查询的速度提升许多。两个结构本质相同,但是各有优缺点,下面我们实现它们的单点修改,单点查询,区间修改,区间查询。线段树线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。...原创 2019-11-17 12:10:47 · 551 阅读 · 0 评论 -
Floyd最短路、Dijkstra最短路、SPFA最短路模板
Floyd最短路这种方法我们可以求出任意两个点之间最短路径,它的时间复杂度是O(n ^ 3)。Dijkstra最短路Dijkstra本质上是一种贪心,每次找的是离起点最近的,并且是确定的,如果有负边权,当前找到的就不一定是最近的了,所以它不能处理负权边。它的时间复杂度是O(n ^ 2)...原创 2019-10-26 16:40:12 · 240 阅读 · 0 评论 -
关于n列火车的列车调度问题
题目编号为1,2,3,4的四列火车通过一个栈式的列车调度站,可能得到的调度结果有哪些?如果有n列火车通过调度站,请设计一个算法,输出所有可能的调度结果。分析栈具有先进后出、后进先出的特点,任何一个调度结果应该是1,2,3,4全排列中的一个元素。由于进栈的顺序是由小到大的,所以出栈序列应该满足以下条件:对于序列中的任何一个数其后面所有比它小的数应该是倒序的,例如4321是一个有效的出栈序列,1...原创 2019-10-25 10:40:20 · 2005 阅读 · 1 评论 -
bfs经典例题
给定一个大小为N x M的迷宫。迷宫由通道和墙壁组成,每一步可以由邻接的上下左右四格的通道移动。请求出从起点到终点所需最小步数。(’#’、’.’、‘S’、'G’分别表示墙壁、通道、起点、终点)输入:10 10#S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#......#...原创 2019-07-28 17:14:28 · 1800 阅读 · 1 评论 -
贪心练习
问题 A: 看电视 按照结束时间排序,结束时间越早越排前。#include <iostream>#include <algorithm>using namespace std;int s[105], e[105];int main(){ int n; while (1) { cin >> n; if (!n) { break...原创 2019-08-07 16:33:42 · 198 阅读 · 0 评论 -
栈练习
问题 A: 简单计算器 算法分析:对于这个题,大体思想是这样的:把所有乘除先算出来,再算加减(废话)。①首先我们把字符串中的空格去掉,不过这里在输入时候记得一定要用getline②然后用两个栈分别存储数据和运算符,在此之前还要写一个precede函数来判断运算符的优先级,由于栈是先进后出,所以栈顶元素的运算符优先级更高。③在存储运算符的时候,是否压入栈是根据运算符优先级(precede返...原创 2019-08-10 09:50:10 · 200 阅读 · 0 评论 -
优先队列练习
你需要驾驶一辆卡车行驶L单位距离。最开始时,卡车上有P单位的汽油。卡车每开1单位距离需要消耗1单位的汽油。如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。在途中一共有N个加油站。第i个加油站在距离起点Ai单位距离的地方,最多可以给卡车加Bi单位汽油。假设卡车的燃料箱的容量是无限大的,无论加多少油都没有问题。那么请问卡车是否能到达终点?如果可以,最少需要加多少次油?如果可以到达终点...原创 2019-08-11 19:01:31 · 875 阅读 · 0 评论 -
中国剩余定理
在一千多年前的《孙子算经》中,有这样一道算术题:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文数学文献中也会将中国剩余定理称为孙子定理。宋朝数学家秦九韶于12...原创 2019-08-28 17:29:15 · 1156 阅读 · 0 评论 -
数论
一些数论基本定理① 合成律( a + b ) mod c ≡ ((a mod c) + (b mod c)) mod c( a * b ) mod c ≡ ((a mod c) * (b mod c)) mod c② 消去律若 gcd (c,p ) = 1,则ac ≡ bc mod p => a b mod p下面给出证明:ac ≡ bc mod p => ac = b...原创 2019-08-29 16:52:53 · 148 阅读 · 0 评论 -
最大字段和问题
一、穷举法int s, e, max = -0x3f3f3f3f;for (int i = 0; i < n; i++){ for (int j = i; j < n; j++) { int sum = 0; for (int k = i; k <= j; k++) { sum += a[i]; } if (sum > max) {...原创 2019-09-28 21:28:25 · 92 阅读 · 0 评论 -
平衡二叉树
struct node { int v, height;//v为结点权值,height为当前子树高度 node *lchild, *rchild;//左右孩子结点地址}; 生成一个新结点,v为结点权值//生成一个新结点,v为结点权值node *newNode(int v){ node* Node = new node; Node->v = v; Node->he...原创 2019-10-06 13:20:58 · 79 阅读 · 0 评论 -
dfs经典例题
给定整数a1,a2,…,an,判断是否可以从中选出若干个数,使它们的和恰好为k。输入:4 131 2 4 7输出:1(总共一种方案)#include <iostream>using namespace std;int a[100];int n, k, cnt;void dfs(int sum, int i){ if (i > n) { retur...原创 2019-07-28 16:17:57 · 666 阅读 · 1 评论 -
贪心法经典例题
有1元,5元,10元,50元,100元,500元的硬币各C1,C5,C10,C50,C500枚。现在要用这些硬币支付A元,最少需要多少枚硬币?输入:3 2 1 3 0 2620输出:6#include <iostream>using namespace std;int main(){ int c[6]; const int v[6] = {1, 5, 10, ...原创 2019-07-31 15:47:15 · 257 阅读 · 0 评论 -
使用C++class求最大公约数
#include <iostream>using namespace std;class Integer {private: int _num;public://构造函数 Integer(int num) : _num(num){ }//计算当前Integer 和 b之间的最大公约数 int gcd(Integer b) { whi...原创 2019-03-31 08:17:11 · 176 阅读 · 0 评论 -
丑数
只包含因子2,3,5的正整数被称作丑数,比如4,10,12都是丑数,而7,23,111则不是丑数,另外1也不是丑数。请编写一个函数,输入一个整数n,能够判断该整数是否为丑数,如果是,则输出True,否则输出False。#include <iostream>using namespace std;void f(int n){ if (n == 1) { cout <...原创 2019-03-31 09:51:38 · 302 阅读 · 0 评论 -
递归判断字符串是否回文
bool is_huiwen(char* str, int size){ if (size <= 1) return true; if (str[0] != str[size - 1]) return false; return is_huiwen(++str, size - 2);}原创 2019-03-31 10:07:31 · 1393 阅读 · 0 评论 -
c_str()函数的使用
char c[20];string s;cin >> s;strcpy(c, s.c_str());Note:这里只能用strcpy,不能直接将c_str()的返回值赋给c,因为s对象被析构,内容被处理原创 2019-03-31 10:19:21 · 151 阅读 · 0 评论 -
今日头条2018春季校园招聘第一题
在n个元素的数组中,找到差值为k的数字对去重后的个数。输入:第一行,n 和 k,n 表示数字个数,k 表示差值第二行,n 个正整数输出:差值为 k 的数字对去重后的个数#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 7;int a[N];int...原创 2019-03-27 22:48:12 · 140 阅读 · 0 评论 -
实验报告
声明一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。#include<iostream>using namespace std; enum CPU_Rank{P1 = 1, P2, P...原创 2019-04-02 18:54:51 · 958 阅读 · 0 评论 -
建堆及堆排序
#include<iostream>using namespace std;/*1499 5 36 7 22 17 46 12 2 19 25 28 1 92*/const int SIZE_ARRAY = 101;int heap[SIZE_ARRAY] = {0}; // 堆中元素int n;//堆中元素个数//交换函数void heapSwap(int ...原创 2019-05-16 19:33:31 · 160 阅读 · 0 评论 -
并查集
查集通过一个一维数组来实现,其本质是维护一个森林。刚开始的时候,森林的每个点都是孤立的,每个人都是自己的王,也可以理解为每个点就是一颗只有一个结点的树,之后通过一些条件,逐渐将这些树合并成一棵大树。其实合并的过程就是一个“认爹的过程”。在这个过程中,要遵守“靠左”原则和”擒贼先擒王“原则(这里靠左或者靠右都并无大碍,但一旦选择一个原则,便要一直遵循)在每次判断两个结点是否以及在同一棵树上的时候...原创 2019-05-16 20:02:33 · 150 阅读 · 0 评论 -
C++中find()函数用法
algorithm中的find()函数返回值是目标元素的下标,找不到时返回值为迭代器结尾 string = "hello"; find(s.begin(), s.end(), 'o') == s.end()string中的与find相关函数① find() string str1, str2; char c; str1.find(str2);//从串str1中查找时str...原创 2019-07-25 19:04:06 · 47938 阅读 · 2 评论 -
动态规划经典例题
01背包问题有n个重量和价值分别为wi,vi的物品。从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。首先使用最朴素的方法,针对每个物品是否放入背包进行搜索。/*4 52 31 23 42 2*/#include <iostream>using namespace std;int w[105], v[105], n;int f(i...原创 2019-08-03 10:09:15 · 523 阅读 · 0 评论 -
c++中map与unordered_map的区别
https://blog.csdn.net/batuwuhanpei/article/details/50727227转载 2019-03-30 16:10:58 · 367 阅读 · 0 评论