算法
文章平均质量分 63
BruceNeeal
这个作者很懒,什么都没留下…
展开
-
AVL树种类
题干:平衡二叉树(AVL树),是指左右子树高度差至多为1的二叉树,并且该树的左右两个子树也均为AVL树。 现在问题来了,给定AVL树的节点个数n,求有多少种形态的AVL树恰好有n个节点。Input一行,包含一个整数n。 (0 < n <= 2000)Output一行表示结果,由于结果巨大,输出它对1000000007取余数的结果。Input示例10Output示例60分析:把一棵AVL树根节点单拿出来,AVL树形态数量=左子树形态数量*右子树形态数量,而左右子树可能高原创 2021-01-26 10:18:42 · 333 阅读 · 1 评论 -
Code Forces 486C Palindrome Transformation
题干大意把一个长度为n的英文小写字符串变为回文串,初始指针下标为p,指针可左右移动改变下标,向上下移动改变字母,比如a向上移动一次变为b,每移动一位下标或者字母变化一次操作次数+1,字母变化和指针下标移动都遵守循环,即下标在最后一个字母位置再往右移则回到第一个字母位置,a向下移一次则变为z。求最少操作次数。分析贪心题,对于循环条件其实只有字母变化有用处,下标循环变化完全没用。直接把字符串一分为二,因为回文左右是对称的,所以只操作一边即可。之后的关键点在于两个,首先是每个不同字母变化最小操作次原创 2020-11-19 22:33:47 · 106 阅读 · 0 评论 -
修改数组
题干:给出一个整数数组A,你可以将任何一个数修改为任意一个正整数,最终使得整个数组是严格递增的且均为正整数。问最少需要修改几个数?Input 第1行:一个数N表示序列的长度(1 <= N <= 100000)。 第2 - N + 1行:每行1个数,对应数组元素。(0 <= Aii<= 10^9)Output 输出最少需要修改几个数使得整个数组是严格递增的。Sample Input512234Sample Output3分析:...原创 2020-11-13 19:50:00 · 351 阅读 · 0 评论 -
8皇后问题(n皇后问题)
题干:在 n*n 格(n<=8)的国际象棋棋盘上摆放 n 个皇后,使其不能互相攻击,即任意两个皇后都不能在同一行、同一列或同一斜线上,问有多少种摆法。分析:使用回溯法,从第一行开始一行一行从左往右放皇后,若冲突则往右判断,若当前行能放则进入下一行,不能放则回退到上一行,采用递归方式,递归函数参数传递行号,成功出口是行数大于n。数据存放用一维数组即可,数组下标表示行号,对应位置的值表示列号。冲突判断也用一维数组,设行号为i,列号为j,则列判断下标为j,右上到左下判断下标为i+j,左上到右下判原创 2020-11-11 20:47:25 · 530 阅读 · 0 评论 -
螺旋困境(模拟)
题面小W是一个宅男,喜欢发呆,并幻想一些不切实际的事情。今天,小W又开始做他的白日梦了。他梦见他被困在了一条隧道里,周围漆黑一片。作为一个宅男,小W自然地掏出了手机,打开定位系统,确定了他的位置。又由此在网上搜索到了关于隧道的信息。这条隧道是由一个点向外,呈六角螺旋形展开,并且没有其他的支路。最小的一圈每条边的长度都是1米,边长向外依次增大到2,3...米,如下图所示。输入数据以一个整数T<104开头,表示测试数据组数。以下每行为一组测试数据,包括4个整数X1,Y1,X2,Y2,描述了小W原创 2020-11-03 21:54:55 · 248 阅读 · 1 评论 -
染色(简单)
题干:本题保证mm个区间两两不相交。小 P 得到了一个长为nn的序列,序列元素编号1…n1…n。小 P 想给这个序列的每个元素染上黑 白两种颜色之一,于是他就随便制定了一个染色方案。正当小 P 要染色时,小 A 批判道:“Naive!这个染色方案太难看了,你应该仔细分析染色的效果之后再动手。” 小 A 和小 P 一起分析序列的性质之后,得出两个结论:序列中的第ii个位置染成黑色会产生bibi的美感,染成白色会产生wiwi的美感。 有些区间比较特殊,如果区间内的所有...原创 2020-10-28 19:24:22 · 809 阅读 · 0 评论 -
Dijkstra算法
Dijkstra算法,设无向连通图有n个点1~n,m条边,每条边连接a、b两点,边长为c,求点1到点n的最短路径的距离。#include"bits/stdc++.h"using namespace std;int main(){ int INF = 1e9+7; int n,m; cin>>n>>m; int map[n+7][n+7]; int vis[n+7],dis[n+7];//vis数组表示已加入集合的点,dis存放点n...原创 2020-10-28 19:17:55 · 159 阅读 · 0 评论 -
最短前缀(字符串暴力搜索)
题面:一个字符串的前缀是从该字符串的第一个字符起始的一个子串。例如 "carbon" 的字串是: "c", "ca", "car", "carb", "carbo", 和 "carbon"。注意到这里我们不认为空串是子串, 但是每个非空串是它自身的子串. 我们现在希望能用前缀来缩略的表示单词。例如, "carbohydrate" 通常用 "carb" 来缩略表示. 现在给你一组单词, 要求你找到唯一标识每个单词的最短前缀。在下面的例子中,"carbohydrate" 能被缩略成"carboh",原创 2020-10-24 17:37:38 · 987 阅读 · 0 评论 -
计蒜客之道2019初赛第一场第一题: 商汤的AI伴游小精灵
题目链接此题题面简单,数据量要求不大,可通过用C++的vector暴力求解,基本思想就是树形结构求两个边数最多的节点。注意两个节点可考虑先后次序之分,考虑先后次序则求第二个节点之前需要先对节点边数进行处理(毕竟剪掉第一个节点后可能出现某些子节点无父节点从而少一条边的情况)。若不考虑先后次序则需要自行判断几种特殊情况。这里代码是考虑节点先后次序的情况。#include"bits/stdc++.h"using namespace std;int main(){ int n;...原创 2020-09-03 10:30:33 · 120 阅读 · 0 评论 -
幸运数6与8
题面:小雅同学认为6,8是她的幸运数字,而其他数字均不是,一个幸运数是指在十进制表示下只含有幸运数字的数。给定你一个区间(a,b),请使用JAVA程序编写一个函数,返回a和b之间(其中包括a和b)幸运数的个数。输入:输入两个整数a和b,a的取值范围在1和1000000000之间(其中包括1和1000000000),b的取值范围在a和1000000000之间(其中包括a和1000000000)。...原创 2020-04-01 19:20:53 · 1742 阅读 · 0 评论 -
KMP改进算法
#include"iostream"#include"stdio.h"#include"stdlib.h"#include"string.h"#define maxSize 20using namespace std;struct Str{ int len; char *c;};void get_nextval(Str sub,int nextval[]){ ...原创 2019-07-07 19:10:06 · 202 阅读 · 0 评论 -
KMP算法
#include"iostream"#include"stdio.h"#include"stdlib.h"#include"string.h"#define maxSize 20using namespace std;typedef struct Str{ int len; char *c;}Str;void get_next(Str sub,int next[])...原创 2019-07-07 19:07:22 · 137 阅读 · 0 评论 -
链队的基本实现
#include"iostream"#include"stdlib.h"using namespace std;typedef struct QueueNode{ int stu_num; QueueNode* next;};typedef struct QueueHead{ QueueNode *front; QueueNode *rear;}Queu...原创 2019-04-29 21:55:31 · 130 阅读 · 0 评论 -
尾插法实现带头节点的单链表
#include"iostream"#include"stdlib.h"#include"process.h"#include"time.h"using namespace std;typedef struct Stu { int id; double score; Stu *next;};struct Teacher { int id; st...原创 2019-04-09 21:32:26 · 1223 阅读 · 0 评论 -
数组指针和指针数组以及二级指针和二维数组的一些理解与实例分析
数组指针,指向一个一维数组的指针,又称行指针,被二维数组赋值后可当作二维数组操作。例:int a[2][3];a[1][2]=5;int (*b)[3]=a;cout<<a[1][2];cout<<(*(b+1))[2];cout<<b[1][2];结果为:555指针数组,是一个数组元素为指针的数组,每个指针元素可以指向...原创 2018-11-05 21:53:43 · 1472 阅读 · 0 评论 -
两圆求面积问题
已知两个圆的圆心半径,求两圆所覆盖的面积注意这里两圆的位置有三大类别:I 相离或外切II 内切或包含III 相交但是相交需要两种算面积的方式这里需要用到三角函数和反三角函数以及明确反三角函数的定义域等知识点废话不多说(也没啥好多说的),上代码。代码已在DEV C++编译通过(gcc环境) #include"iostream"#include"math.h" ...原创 2018-11-11 13:44:55 · 624 阅读 · 0 评论