
奇怪的问题
氯的平方
大一新生,写点东西抗遗忘
展开
-
BFS 实现指数型递归
// BFS 实现指数型递归#include <iostream>#include <algorithm>#include <string>#include <vector>#include <set>#include <queue>using namespace std;const int N = 100 + 10;int n,k;string str;set<string> s; // 因为原创 2021-04-08 21:44:39 · 228 阅读 · 0 评论 -
将二叉搜索树的前序遍历结果转换为后序遍历结果 (数据结构)
题目链接:PTA L2-004递归原理分析:普通的二叉树必须同时具备中序遍历序列 + 任意其他序遍历结果才可以进行序列结果的转换,因为必须有中序遍历进行左右子树的划分,但是二叉搜索树因为左子树的值均小于根,右子树的值大于等于根所以可以节点的值进行左右子树的划分Tips : Pre表示前序序列 Post表示后序遍历序列首先分解求后序遍历结果的过程:求出左子树的后序遍历结果求出右子树后序遍历的结果将当前子树的根节点加入后序遍历的结果中去void getPost(int roo.原创 2021-03-04 19:35:53 · 953 阅读 · 3 评论 -
树状DFS理解
题目:题目可以将DFS的每一次进层都想象为树的向下走一层,退层则也是树中的该节点顺着路径向上倒着走一步,主要需要深入思考的是,树的向下走代表什么,向上走代表什么。 这个方法最好的地方在于可以快速确定如何将最后一层得出的结果,一起返回到递归的外面,只要将每一层的DFS都写在(传递)回推墙里面,则一但在某一个节点确定了正确,就可以沿着树的这条路径一直向上倒退至树顶。代码:#include <iostream>#include <algorithm>using namespa原创 2020-12-14 21:11:00 · 247 阅读 · 0 评论 -
线段树 (区间和 + 单点操作)
#include <set>#include <map>#include <queue>#include <stack>#include <cmath>#include <vector>#include <string>#include <cstring>#include <iostream>#include <algorithm>#define FAST ios::原创 2020-12-06 21:49:57 · 114 阅读 · 0 评论 -
GCD + 素数筛实现
题目:GCD问题题目首先考虑最坏的情况,在这N个数字当中,先选出所有的素数 和1 组成最坏集合,这些由素数构成的集合中的任选两个数字的GCD结果都是1,再向这个集合中加入一个其他的数字,则一定会导致存在两个数字其GCD的结果大于1 (抽屉原理?)(但是要注意,当n小于4的时候,1,2,3全部都可以当作素数,则无法向其中再添加数字了)代码:#include <set>#include <map>#include <queue>#include <stac原创 2020-12-06 15:58:53 · 170 阅读 · 0 评论 -
黑白边 + 克鲁斯卡尔算法
Acwing学习的时候没有给出KrusKal算法的板子,这道题刚好遇到了(Prim算法也可以 ,其实就是没有想到怎么做)克鲁斯卡尔算法伪代码模板:(并查集实现)读入所有的边 将边按照权值进行排序 从权值小的开始,依次将边的两个端点加入并查集中(前提是这两个端点不再同一个并查集里面),最后判断是否存在最小生成树的时候,判断cnt是否等于顶点数n即可。黑色边题目:黑白边题目#include <set>#include <map>#include <queue>原创 2020-12-06 15:30:34 · 204 阅读 · 0 评论 -
第 K 小数字问题 (优先队列实现)
首先了解优先队列:可以理解优先队列就是一个含有内部排序的队列,具有队列的一切属性,本质上是通过堆来实现的。定义语法:priority_queue<Type, Container, Functional>Type 是数据类型 (注意:数据元素的类型可以是pair类型)Container 由数组实现的一些数据结构,如:vector,deque,不可以是List类型,就是存放元素的容器Functional 是内部排序的方式当使用的数据类型是基本的内置的数据类型的时候就可以直接传入类型来创原创 2020-12-06 14:53:57 · 269 阅读 · 0 评论 -
N皇后问题
#include <set>#include <map>#include <queue>#include <stack>#include <string>#include <cstring>#include <iostream>#include <algorithm>#define FAST ios::sync_with_stdio(false)#define LL long longus原创 2020-12-03 13:44:57 · 106 阅读 · 0 评论 -
求关键路径
虽然可以实现基本的求图的关键路径的功能,但是存在瑕疵,必须保证图的下标最小的节点是整个图的源点,下标最大的节点是整个图的汇点 (工程编码思维)1.求图的拓扑排序#include <iostream>#include <algorithm>#include <queue>#include <set>#include <string>#include <cstring>#include <map>#includ原创 2020-12-02 21:40:59 · 128 阅读 · 0 评论 -
拓扑排序 + 链式前项星 (教材版本实现)
#include <iostream>#include <algorithm>#include <queue>#include <set>#include <string>#include <cstring>#include <map>#include <stack>#define FAST ios::sync_with_stdio(false)#define LL long longus原创 2020-12-02 17:11:27 · 130 阅读 · 0 评论 -
在一个很大的数组里面找两个数字使得其和在一定的范围内
题目:这道题只要出现了双重循环,不管如何进行剪枝都会导致TLE。只能使用其他的方法。AC代码(附讲解):首先介绍两个函数:lower_bound 是经常用来对STL容器进行查找的函数,其前两个参数是容器的迭代器类型,分别是,查找范围的 begin() 迭代器 和 查找范围的 end() 迭代器 第三个参数是待查找的数值 num 函数返回的结果是容器中第一个大于等于num的值得下标。upper_bonud 参数如上,函数返回的是第一个 大于 num 的值的下标Tips:1. 这两种查找的方原创 2020-11-30 21:46:56 · 369 阅读 · 0 评论 -
使用链式前项星实现BFS
依旧是对无向图进行的BFS实现,有向图就只添加一条边就可以了使用样例:#include <iostream>#include <algorithm>#include <cstring>#include <queue>#include <set>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define LL long long using n原创 2020-11-26 15:31:38 · 139 阅读 · 0 评论 -
链式前项星实现图的DFS
实现的是无向图的遍历,有向图只存一条边即可实验图片:#include<iostream>#include<algorithm>#include<set>#include<cstring>#define FAST ios::sync_with_stdio(flase),cin.tie(0),cout.tie(0)#define LL long longusing namespace std;const int N = 1e5 + 10;原创 2020-11-26 15:04:28 · 110 阅读 · 0 评论 -
Balanced String 平衡子串问题
题目:给你一个长度为n的字符串,字符串只包含0和1,找一个最长的子串,要求这个子串的0的个数等于1的个数,输出最大长度第一行输入字符串的长度n,1<=n<=100000.第二行输入字符串s.输出满足条件的最大子串长度,如果不存在这样的子串,输出0Input811010111Output4Input3111Output0#include<cstdio>#include<iostream>#include<algorithm>u原创 2020-10-04 14:48:43 · 789 阅读 · 0 评论 -
组合数初探
组合数公式(在数据范围不是很大的情况下不会爆TLE的一个模板)long long Zue(ll n,ll x) // 组合 // x == k n == n{ ll res = 1; ll num = n; ll fz = 1,fm = 1; for(int i = 1;i <= x;i++) // fz为 1 * 2 * 3 * .....* k 下面要乘 k 次 // f2为 n * (n - 1) * (n - 2) * ... * (n - k + 1)原创 2020-10-01 20:46:29 · 114 阅读 · 0 评论 -
对Delete指针 和 链表中删除操作的一些理解
#include<iostream>using namespace std;typedef struct Node{ char data; Node* next;}Node,*LinkList; //链表结构单元的声明void InitList(LinkList* L) //参数是链表结构单元的二级指针 初始化函数没有返回值{ *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL;}void creat原创 2020-09-03 11:12:25 · 1205 阅读 · 0 评论 -
关于使用malloc声明指针 和 直接声明指针的区别
#include<bits/stdc++.h>using namespace std;struct type{ int a; int b;};int main(void){ type *T = (type*)malloc(sizeof(type));//分配一个有着type大小的内存区域 并将这个地址返回为type指针类型 T->a = 0; T->b = 0; cout<<T->a<<" "<<T->b<原创 2020-06-12 21:07:55 · 652 阅读 · 0 评论 -
稳定排序 + 解结构体成员sort排序
题目:PTA 单词排序最开始写这道题的时候 直接上来写了sort排序 被卡在了第三个测试点 很难受查资料才知道 sort的排序是不稳定的 就拿这道长度排序题来说的话 apple 和 winter的长相同 直接sort的话 排序完了以后 apple可能在winter前面 也可能在winter后面 是不稳定的,这个地方徐要的排序手法是稳定排序 std::stable_sort 用法和sort一模一样 不过多解释#include<bits/stdc++.h>using namespace原创 2020-05-18 17:04:30 · 216 阅读 · 0 评论 -
文件操作函数集合
打开文件的方式:1 r (只读) 为输入打开一个文本文件2 w (只写) 为输出打开一个文件3 a (追加) 为追加打开一个文件4 rb (二进制只读) 为输入打开一个二进制文件5 wb (二进制只写) 为输出打开一个文件6 ab (二进制追加) 为追加打开一个二进制文件7 r+ (读写) 为读写打开一个文件8 w+ (读...原创 2020-04-13 08:44:59 · 175 阅读 · 0 评论 -
关于读取文件的一些基本操作
1.#include<bits/stdc++.h>using namespace std;int main(void){ FILE *fpr,*fpw; fpr = fopen("d:\\input.txt","r");//fpr用作打开文件读取数据的指针 fopen问打开文件的函数 返回被打开文件的FILE指针,r表示只读模式 fpw = fopen("d:\\out...原创 2020-03-23 22:03:22 · 169 阅读 · 0 评论 -
约瑟夫环的例题
题目1:#include<stdio.h>int main(void){ int N; scanf("%d",&N); int a[1100]; for(int i=1;i<=N;i++) { a[i]=i;//先初始化所有的人为未删除的状态 1 } int con; int k=0;//k是报数器 int n=0;//用n来记录删除的人数...原创 2020-03-23 16:19:06 · 502 阅读 · 0 评论 -
KMP算法 大概的写法(通过数据结构‘串’实现)
#include<stdio.h>#include<string.h>#include<stdlib.h>int Next[10000];typedef struct{ char string[110000]; int len;}sstring;void GetNext(int next[],sstring s){ int i = 0,j =...原创 2020-02-06 03:40:30 · 137 阅读 · 0 评论 -
ACM 水果题 tag分类统计题型
这道题的题目,懒得把题目给贴过来了#include <stdio.h>#include <string.h>#include <algorithm>using namespace std; struct Node{ char name[100]; char space[100]; int num;} f[110]; i...原创 2019-12-18 15:15:32 · 223 阅读 · 0 评论 -
链表 P309----P316)(单向链表的建立与输出,插入和删除)
采用的时谭c上面的例题:输入一系列学生的成绩,规定学生的学号不为0,按照学号 成绩的顺序输入数据 要求用函数完成传建链表和输出链表的操作代码:(自闭了好一会二才看懂书上的代码)(复制到DEV C++里面,主要看注释)#include<stdio.h>#include<stdlib.h>#include<malloc.h>//#define NULL...原创 2019-12-14 20:11:41 · 312 阅读 · 1 评论 -
STL 笔记
改编自STL 分为 容器 迭代器 空间配置器 配接器 算法 和 仿函数命名空间用来解决名称冲突,比如Menci和Fuxey都在自己的头文件里面写了一个work()函数,如果我们需要同时使用这两个函数就会发生名称冲突,但是如果将这两个函数写在单独的命名空间内,就成了Menci::work()和Fuxey::work(),就不会发生命名冲突STL的所有内容都包含在std的命名空间内部如果要调...原创 2020-05-04 09:53:13 · 235 阅读 · 3 评论 -
gcd函数板子
#include<stdio.h>int gcd(int x, int y){ if(y == 0) return x; if(x < y) return gcd(y,x); else return gcd(y, x%y);} int main(void){ int n1;int n2; whil...原创 2019-12-10 22:00:56 · 361 阅读 · 0 评论 -
C++ vector
vector是包含T类型的序列容器,其容器的大小可以自动增长,可以包含任意数量的元素,因此类型参数T不再需要模板参数N。只要元素的个数超过当前vector容器的容量,就会自动分配更多的空间。只能再容器的尾部高效地条件或删除元素。可以使用vector来代替数组存放元素,只是其在拓展容量和在序列内部删除元素时会产生一点开销而已,但是代码不会明显变慢下面是一个生成存放 double 型元素的 vec...原创 2019-12-09 14:37:54 · 112 阅读 · 0 评论 -
二分查找板子2
//折半查找其实是不需要进行对数组元素的个数为奇数还是偶数进行分开的讨论的(有隐式强制转化) //奇数项会出现中轴与某个边界轴重合的情况,但是不会影响查找//偶数项会出现中轴并不是真正的数组中心(中心根本没有元素),其实是中心靠左的一个元素 #include<stdio.h>int main(void){ int a[110]; int n; scanf("%d",&...原创 2019-12-06 16:57:33 · 194 阅读 · 0 评论 -
PTA L006连续因子
本来是考试题,结果拖了好久都懒得去想 :题目:给出代码:#include <iostream>#include <cmath>using namespace std;long int num, temp;int main(void){ cin >> num; int first = 0, len = 0, maxn = sqrt...原创 2019-12-05 22:43:36 · 148 阅读 · 0 评论 -
关于图形的DFS
描述小白和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 4 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#‘代表草丛,’.'代表空地,下面的峡谷中有 2 片草地。##……##处在同一个草地的 2 个人可以相互看到,空地看不到草地里面的人。他们发...原创 2019-12-03 20:17:05 · 215 阅读 · 0 评论 -
关于队列的基础操作
基本函数1:push 也是在栈顶放入一组元素2: pop 与栈不同的是,队列的pop是在队列的最底端移除一组数据,也就是说,最先放 入队列的元素可以最先被移除,这种行为也被称为FIFO(即先进先出)3: 用queue::front来 访问最低端的数据给出关于的代码:#include<cstdio>#include<queue>using names...原创 2019-12-03 18:32:17 · 118 阅读 · 0 评论 -
关于栈的基础操作
虽然可以用数组和队列可以轻易地实现栈,但是在c++的函数库里面已经给出了关于栈的函数:1 push 用于在栈的顶端放入一组数据2 pop 用于在栈的顶端取出(移除)一组数据(不能用访问栈顶的数据)3 如果要访问栈顶的数据,就要使用stack::top函数...原创 2019-12-03 18:20:53 · 168 阅读 · 0 评论 -
特殊的排序——字典排序
给出例子;(其实就是按照每一位的大小进行排序)现有一数列为 1 2 3,则其所有的字典排序为:1 2 3//就像字典的索引一样先按照第一位排序,再按照第二位排序…1 3 22 1 32 3 13 1 23 2 1由此可见一共要排6次序(3!次)当a[2]>a[1]>a[0]时停止排序总的思想就是从初始数列的最右侧开始,直到遍历到一组数对的左边的值小于右边的值,就记...原创 2019-12-02 19:17:07 · 307 阅读 · 0 评论 -
用递推实现进制转换
自己写的一个板子,做题尽量别用,可能TLE代码:#include<stdio.h>int JZ(int a,int b){ if(a<b) { printf("%d",a%b); return 0; } else { int rest = a % b; a=a/b; JZ(a,b); if(rest<10) printf("%d...原创 2019-12-01 14:17:16 · 247 阅读 · 0 评论 -
用递归实现进制的转换
#include<stdio.h>int JZ(int a,int b){ if(a<b) { printf("%d",a%b); return 0; } else { int rest = a % b; ...原创 2019-12-01 14:14:52 · 838 阅读 · 0 评论 -
关于代码的精简
首先是一道PTA上面的巨型模拟题目:我自己在写这道题时,本来就已经写了分不同的算数写了4个函数,没有想到把打印重复部分和求四舍五入的部分重新作为一个函数,来减少不少代码量,结果写了10K,300多行,还是有很多的小问题。...原创 2019-11-27 19:27:49 · 202 阅读 · 0 评论 -
PTA里面比较重要的一道题
题目:首先我自己在做这道题时使用的代码:#include<stdio.h>#include<math.h>struct Fraction{ int n; int m;}A[110];int main(void){ int N;long long int M=1;long long int SF=0; scanf("%d",&N); for(i...原创 2019-11-25 21:51:19 · 234 阅读 · 0 评论 -
统计单词数目的模板
#include<iostream>using namespace std;int main(){ string s; int cnt_ch=0;//统计字符个数 int cnt_sp=0;//统计空格个数 getline(cin,s); int len=s.length(); for(int i=0;i<len-1;i++)//从第一个字符到倒数第二个字符...原创 2019-11-24 21:45:21 · 93 阅读 · 0 评论 -
倒序输出
#include<stdio.h>int main(void){ int a[1100]; int n; scanf("%d",&n);int i=0; for(i=0;n>0;i++) { a[i]=n%10; n=n/10; printf("%d\n",a[i]); } int temp; for(int j=0;j<i;j++)...原创 2019-11-22 21:10:18 · 85 阅读 · 0 评论 -
zy哥那里学来的qsort
//快速排序算法,qsort,其速度是基本排序算法里面最快的,但是没有sort快 //qsort函数的原型为 Compare((void*)&elem1,(void*)&elem2);//使用qsort时按这个顺序填入实际参数(待排序数组的地址,数组中元素的个数,sizeof(compare函数里面指针变量使用的类型),compare函数的函数名) #include<c...原创 2019-11-21 20:47:38 · 96 阅读 · 0 评论