![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
Krito.
苏世独立,横而不流。
展开
-
阶乘逆元与组合数模板
单纯存模板。以D - Iroha and a Grid的AC代码为例#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=2e5 + 5;const int mod=1e9+7;ll fac[maxn];ll inv[maxn];ll quick_pow(ll a,ll b,ll p){ ll ans=1; while (b) { if (b&原创 2022-03-25 21:40:24 · 766 阅读 · 0 评论 -
最长上升序列模板
复杂度:O(nlogn)。以洛谷P1020 [NOIP1999 普及组] 导弹拦截的AC代码为例。数组b1是最长不上升子序列,数组b2是最长上升序列。仅供个人参考,不做详解,单纯存个板子。维护一个单调数组,利用二分查找以O(logn)的代价替换合适的值。代码如下#include<bits/stdc++.h>using namespace std;#define ll long long#define LM LLONG_MAX#define IM INT_MAX原创 2022-02-24 17:09:39 · 433 阅读 · 0 评论 -
区间内素数个数模板
以洛谷P1865 A % B Problem的AC代码为例。仅供个人使用,故不作详细的解释与说明。用prime[i]表示从[0,i]的范围内有多少个素数。由于该题是在一定区间内的多次查询,且数据范围为1e6,故使用前缀和来实现O(1)的查询。[a,b]内素数的个数即为prime[b]-prime[a-1]。#include<bits/stdc++.h>using namespace std;bool is_prime[1000010];int prime[100001原创 2022-02-17 13:21:39 · 555 阅读 · 0 评论 -
分解质因数模板
以P2092 数字游戏的AC代码为例。仅供个人使用,故不做讲解与说明。#include<bits/stdc++.h>using namespace std;#define ll long long#define LM LLONG_MAX#define IM INT_MAX#define _for(i,a,b) for(int i=a;i<=b;i++)inline int read(){ int x=0,f=1; char ch=getchar();原创 2022-02-17 13:16:19 · 3260 阅读 · 0 评论 -
数位dp模板
简简单单存个板子,免得以后到处翻文件和网站。注:并非讲解,仅作个人使用。解释选用P2602[ZJOI2010]数字计数这一题的AC代码作为模板。1.dp的n维数组每一维表示着当前的某一种状态,以本题举例,dp[pos][sum][st]中,pos表示当前的数位,sum表示当前数位的高阶数位的中某个数出现的次数,st表示是否有前导0。2.dfs搜索每一个数位可能取的值并保存当前状态。同样,以本题举例,pos表示当前数位,pre表示前一位的大小(这题貌似没用上),st表示是否是前导0,su.原创 2022-02-11 21:51:45 · 480 阅读 · 0 评论 -
深度优先搜索dfs
DFS的核心思想是递归,从初始起点一直递归到所要达到的终止节点,然后返回上一个递归层,再进入其他的下个递归层或终止节点,整个过程可以看作是一个树。P1036 [NOIP2002 普及组] 选数ac代码#include<bits/stdc++.h>using namespace std;int a[21],n,k,ans[20],sum,m=0,z=1;bool vis[21];bool shu(int S) { for (int i = 2...原创 2021-12-09 23:43:50 · 91 阅读 · 0 评论 -
大数相加,相乘,阶乘(c++实现)
大数相加#include<bits/stdc++.h>using namespace std;int main() { string a, b,ans; cin >> a >> b; int len1 = a.length(); int len2 = b.length(); if ((len1-len2)>0) { for (int i = 0; i < (len1-len2); i++) { b = '0' + b; }原创 2021-12-06 23:03:15 · 548 阅读 · 0 评论 -
二叉树的遍历(层次,前序,中序,后序)
#include<bits/stdc++.h>using namespace std;struct Bstnode { char data; Bstnode* left; Bstnode* right;};//创建新节点Bstnode* GetNewNode(int data) { Bstnode* newNode = new Bstnode(); (*newNode).data = data; newNode->left = newNode->right =.原创 2021-12-01 19:21:59 · 940 阅读 · 0 评论 -
二叉搜索树的插入,删除,查找操作(c/c++实现)
//Binary Search =tree#include<bits/stdc++.h>using namespace std;struct Bstnode { int data; Bstnode* left; Bstnode* right;};//创建新节点Bstnode* GetNewNode(int data) { Bstnode* newNode = new Bstnode(); (*newNode).data = data; newNode->left .原创 2021-11-29 10:30:03 · 511 阅读 · 0 评论 -
数据结构之二叉树(定义,属性,逻辑视图 )
树的定义与基本属性:树的定义:链接在一起的被称为节点的实体的集合用来模拟层级结构。树的递归属性:树由一个称为树根的节点和一些子树组成,组织方式是,树的根节点包含指向所有子树的根节点的链接树的一些属性:在一个有效的树中,如果有N个节点就会有N-1条边。深度:树的节点X的深度被定义为从根到节点X的路径长度。路径上的每一条边贡献一个长度单位。根的深度是0。高度:树的节点X的高度被定义为从该节点到一个叶子节点的最长路径上的边数。叶子节点的高度是0。树的高度:树的高度等于根节点的高度。原创 2021-11-27 21:34:14 · 406 阅读 · 0 评论