![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
前尘忆梦丿
这个作者很懒,什么都没留下…
展开
-
字符串模版
字典树 这里的trie[][]存的是数字字符,若需要存储任意字符可将第二维设置[128]. 一维的长度要自己判断,最差情况就是每个字符串的长度 * 字符串的个数= len * n。 #include <bits/stdc++.h> using namespace std; const int maxn = 1e6 + 10; int trie[maxn][10]; // trie[i]...原创 2020-04-30 15:54:41 · 107 阅读 · 0 评论 -
递归调用申请数组导致超时问题
递归调用时或者多次循环里不要有申请大数组的操作,否则会导致超时。 如leetcode的面试题51. 数组中的逆序对 我把临时数组放在merge里申请,提交导致超时,把临时数组当做全局变量,通过了。 class Solution { public: int ans = 0; vector<int> a; int reversePairs(vector<int...原创 2020-04-24 22:52:14 · 296 阅读 · 0 评论 -
搜索模版
组合数搜索 给定n个数,从中选取K个。判断这K个数是否满足什么条件。 共有**C(n,m)**种可能,使用栈递归搜索对每一个数进行决策:选or不选?复杂度为O(2^n)。 通过剪枝可以使得时间复杂度远低于2^n,高于C(n,m). 选:如果当前剩余可选数 n-cur 大于等于剩余必选数 k - i才能进入下一次选择。 不选:如果当前剩余可选数 n-cur-1 大于等于 k - i /* 从N个数选...原创 2020-04-20 23:21:59 · 128 阅读 · 0 评论 -
P1441 砝码称重
题目链接:P1441 砝码称重 题意 给定N个数,去掉M个数,统计由n-m个数最多能组成的元素个数。 分析 从N个里面找出N-M个砝码,相当于枚举每个砝码,判断选或者不选,时间复杂度2^n.可以用dfs搜索实现,也可以用二进制实现,枚举0-2^n - 1,判断每个数i的二进制是否有n-m个1,2^n-1有n个1,因此找到二进制1的个数为n-m的即为一种方案,1所在位置的下标即为选定的砝码的下标。...原创 2020-04-07 10:27:37 · 189 阅读 · 0 评论 -
H. 试题H:拯救阿拉德大陆 20'
题目链接 H. 试题H:拯救阿拉德大陆 20’ 题意 给定4个整数,求1-n中是这4个整数任意一个的倍数的数的个数。 分析 考察容斥原理。 如果被计数的事物有A、B、C三类,那么,A类和B类和C类元素个数总和= A类元素个数+ B类元素个数+C类元素个数—既是A类又是B类的元素个数—既是A类又是C类的元素个数—既是B类又是C类的元素个数+既是A类又是B类而且是C类的元素个数。(A∪B∪C = A+...原创 2020-03-15 19:33:38 · 265 阅读 · 0 评论 -
G. 试题G:冷门进制 20'
题目链接 G. 试题G:冷门进制 20’ 题意 N个数累乘并转换成六进制,求末尾0的个数。 分析 考察进制原理。 若是求10进制末尾有多少个0,只需要求N能整除的最大的10的多少次方,如186000,能对10^3整除,即末尾有3个0。 对与B进制 有 当b0,b1,b2为0时,N=(b4*B+b3)*B^3,即N为B^3的倍数,所以求末尾0的个数,也就转换成了求N是B的多少次方的倍数,因为是每个数...原创 2020-03-15 17:18:50 · 127 阅读 · 0 评论 -
H. 试题H:数列第N项 20'
题目链接: H. 试题H:数列第N项 20’ 题意 给出第1第2项,求第N项。 分析 N值很大,直接循环求,肯定超时。若 an = k * a(n-1) , a1 = b;那么我们就知道a2 = a1 * k, a3 = a2 * k … a3 = a1 *k^2, an = k^(n-1)*a1. 对这题而言,将其转化成矩阵乘法来做 矩阵快速幂这篇博客讲的很好。 代码 #include <...原创 2020-03-15 16:51:39 · 178 阅读 · 0 评论 -
出栈序列
题意 给出一个正整数N,给出abc,…(n)个字母,依次出栈,进栈,有多少种序列。 输入:N 输出:第一行输出出栈序列个数,接下来每行输出一个序列 分析 深搜,模拟进栈,出栈过程。 void dfs(int index, int n, int l, int o, stack<char> in, queue<char> out) index:第几次过程,从0开始 n:n个...原创 2020-03-12 18:22:53 · 642 阅读 · 0 评论 -
P1308 统计单词数
题目链接:P1308 统计单词数 题意 给定一个单词,从一个字符串中找出给定单词个数,及其第一次出现的下标。 分析 因为字符串中独立的一个单词前后有空格,所以在给定单词和字符串首尾分别加上一个空格,这样就保证了每个单词前后都有空格。这样就可以使得从字符串中查找单词不会统计单词中有给定单词的情况了,如,sd absd 。将单词和字符串都转换成大写或者小写。 string 可以直接使用 s[i] 访...原创 2020-03-10 09:37:12 · 85 阅读 · 0 评论 -
图论问题模版
图论算法 求最短路径dijkstra堆优化版本,spfa。 最小生成树,prim,kruskal 有向图的强连通分量个数,tarjan. 欧拉路径,打印路径,Fleury。 tarjan 求有向图的强连通分量。 1.设置两个数组dfn[],low[],一个栈s,找一个顶点x开始遍历,index为遍历的第几个顶点,dfn[x] = low[x] = index++,其中dfn[x]代表x这个顶点...原创 2020-03-03 22:04:34 · 126 阅读 · 0 评论 -
1004 Counting Leaves (30分)
题目链接1004 Counting Leaves 题意:给出树的总结点个数,和非叶子结点个数,然后给出非叶子结点的孩子结点,求每层的叶子结点数。 使用邻接表储存输入的数据。 然后bfs从根结点1遍历,level++.返回最大的层数。 坑点: 数据结点值不是1-n是随机的,根节点是1。 输入的数据不一定是先输入父节点。------第一次没用BFS直接输入数据的时候处理的,没有想到这种情况,搜了几个...原创 2020-02-01 18:18:51 · 128 阅读 · 1 评论