![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法例题
致敬美好的未来
这个人写bug贼6
展开
-
算法练习
排列数字(排列坑,回溯)#include<bits/stdc++.h>using namespace std;bool flag[10];int n;vector<int> vec;void dfs(int be,int ed){ if(be == n){ for(int i =0; i<vec.size(); i++){ cout<<vec[i]<< ' '; .原创 2020-09-21 22:01:25 · 155 阅读 · 0 评论 -
装睡
你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。输入格式:输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。输出格式:按照输入顺序检查每个人,如果其至少一项原创 2020-05-23 00:55:41 · 296 阅读 · 0 评论 -
是否完全二叉搜索树
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24原创 2020-05-09 22:31:29 · 366 阅读 · 0 评论 -
愿天下有情人都是失散多年的兄妹
呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?输入格式:输入第一行给出一个正整数N(2≤N≤104),随后N行,每行按以下格式给出一个人的信息:本人ID 性别 父亲ID 母亲ID其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。接下来给出一个正整数K,随后K行,每行给出...原创 2020-05-09 18:36:24 · 442 阅读 · 0 评论 -
列车调度
火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N(2≤N≤105),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。输...原创 2020-05-08 19:39:41 · 503 阅读 · 0 评论 -
红色警报
战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0<N≤500)和M(≤5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的...原创 2020-05-06 18:43:35 · 259 阅读 · 0 评论 -
仓库选址
在一条数轴上有NN家商店,它们的坐标分别为A1A1~ANAN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数N。第二行N个整数A1A1~ANAN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤1000001≤N≤100000...原创 2020-05-05 21:51:49 · 341 阅读 · 0 评论 -
树的遍历
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41...原创 2020-04-27 22:30:11 · 513 阅读 · 1 评论 -
集合相似度
给定两个整数集合,它们的相似度定义为:Nc/Nt×100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。输入格式:输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤104),是集合中元素的个数;然后跟M个[0,109...原创 2020-04-27 22:26:37 · 895 阅读 · 0 评论 -
给定二叉树的层次遍历和中序遍历-----求前序遍历
树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。输入格式两行,每行是由大写字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。输出格式一行,表示二叉树的先序序列。数据范围...原创 2020-03-26 18:44:29 · 1572 阅读 · 0 评论 -
给定二叉树的前序遍历和中序遍历-----求后续遍历和层次遍历
输入数据:ABDEFCDBFEAC输出数据:DFEBCAABCDEF#include<iostream>#include<map>#include<cstring>#include<queue>using namespace std;struct Node{ char val...原创 2020-03-26 18:37:24 · 859 阅读 · 2 评论 -
7-8 An easy problem
一天小明正在各种OJ中流窜,突然一头奶牛把小明撞飞,小明被狠狠地撞到一棵树上,这棵树上有n个点,n−1条边,每个节点上都有一个数,规定两个节点之间的距离为这两个节点的路径上的所有节点上的数的异或和,小明必须选出最大的异或和才能离开这棵树。小明觉得这个问题非常复杂无能狂怒起来,于是这棵树害怕了,退化成一条链使这个问题变得简单起来。简单地说就是给出一段长度为n的数字序列{A1,...原创 2020-03-23 18:55:18 · 139 阅读 · 0 评论 -
背包9讲博客一
https://blog.csdn.net/weixin_42333573/article/details/89387506首先附上一个 以前 不是特别优秀但是好理解的做法 0-1背包//f[j]表示当前背包容量为j时的最大价值#include<bits/stdc++.h>using namespace std;const int N=1010;i...原创 2019-08-14 15:18:42 · 91 阅读 · 0 评论 -
单链表快排----归并排序
给定一个单链表,请使用快速排序算法对其排序。要求:期望平均时间复杂度为O(nlogn)O(nlogn),期望额外空间复杂度为O(logn)O(logn)。思考题:如果只能改变链表结构,不能修改每个节点的val值该如何做呢?数据范围链表中的所有数大小均在intint范围内,链表长度在[0,10000][0,10000]。输入样例:[5, 3, 2]输出样例...原创 2020-03-14 12:39:50 · 412 阅读 · 1 评论 -
常用库函数总结和使用---持续更新中
#include<iostream>#include<vector>#include<cstring>#include<algorithm>#include<queue>#include<map>using namespace std;int main(){ //1、vector 的使用...原创 2020-03-13 12:36:44 · 230 阅读 · 0 评论 -
区间选点---贪心
给定N个闭区间[ai,biai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。输入格式第一行包含整数N,表示区间数。接下来N行,每行包含两个整数ai,biai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示所需的点的最小数量。数据范围1≤N≤1051≤N≤105,−10...原创 2020-03-12 14:45:49 · 212 阅读 · 0 评论 -
kmp字符串
给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串S。输出格式共一行,输出所有出现位置的起始下标(下标从0开始计数),整数...原创 2020-03-01 12:33:20 · 109 阅读 · 0 评论 -
区间和------关于离散化和前缀和
假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。输入格式第一行包含两个整数n和m。接下来 n 行,每行包含两个整数x和c。再接下里 m 行,每行包含两个整数l和r。输出格式共m行,每行输出一个询问中所...转载 2020-02-29 22:21:12 · 187 阅读 · 0 评论 -
差分模板总结----------一维差分和二维差分
1、一维差分基本原理:(b[]是a[]的差分数组,a[]数组是b数组的一维前缀和void insert(int l,int r){ b[l]+=c; b[r+1]-=c;}代码模板#include<iostream>#include<vector>#include<cstring&...原创 2020-02-29 16:44:41 · 266 阅读 · 0 评论 -
一维和二维前缀和模板
在这里插入代码#一维前缀和1、首先建立a[N]和s[N]//s[N]是前缀和数组2、预处理前缀和数组,使得s[i]=s[i-1]+a[i];3、求[l,r]范围的前缀和,就是s[r]-s[l-1]4、最重要的是数组从1开始,为了方便处理##模板#include<iostream>#include<algorithm>#include<vector&g...原创 2020-02-28 22:43:27 · 142 阅读 · 0 评论 -
大数加减乘除模板总结
1、大数加法#include<bits/stdc++.h>using namespace std; vector<int>vec;string str1,str2;int i=0,nexts=0;void add_s(char a,char b){ int sum=(a-'0')+(b-'0')+nexts; vec.push_back(sum%...原创 2020-02-28 14:51:43 · 206 阅读 · 1 评论 -
浮点数二分模板---yxc
#include<bits/stdc++.h>using namespace std;int main(){ double n; cin>>n; double l=-1e4,r=1e4; double mid; while(r-l>1e-8) { mid=(l+r)/2; i...翻译 2020-02-28 14:45:37 · 160 阅读 · 0 评论 -
整数二分详解---yxc
//整数二分的模板1、while(l<r){int mid=l+r+1>>2;if(check(mid)) l=mid;else r=mid-1;}2、while(l<r){int mid=l+r>>1;if(check(mid))r=mid;else l=mid+1;}//自从看了yxc的讲解,关于整数二分不在迷茫/*给定一个...翻译 2020-02-28 14:42:03 · 608 阅读 · 0 评论 -
快速排序模板
#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int q[N];void quick_sort(int q[],int l,int r){ if(l>=r) return; int x=q[l+r>>1]; int i=l-1,j=r+1;...原创 2020-02-25 14:13:52 · 94 阅读 · 1 评论 -
逆序对数量
给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤1000001≤n≤1000...原创 2019-12-25 20:23:32 · 398 阅读 · 0 评论