- 博客(227)
- 问答 (1)
- 收藏
- 关注
原创 最小环
最小环HDU1599题解求最小环的方法是,删掉任意两点i和j之间的边,求i和j的最短路,再加上i和j之间的边。 可用floyd算法求解。floyd算法的特点是当以k为中间结点时,以i和j为两端的点必定是经过1——k-1点的最短路。 我们假设最小环经过三点且满足,那么当floyd遍历到k时,已经知道了经过以i和j为两端的点经过1——k-1的最短路。那么最小环为。#include <bits/stdc++.h>using namespace std;int const inf =
2020-06-25 10:35:04
312
原创 CCF认证技巧
尽量用string,因为不知道有多少的空格getline:使用前用getchar缓冲掉换行,getline直接处理掉最后的换行#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; getchar(); for(int i=0;i<n;i++){ stri...
2020-06-24 20:06:48
937
原创 扫描线算法
HDU1542题解:求解矩阵的面积和。代码#include <bits/stdc++.h>using namespace std;int const N = 200;int T,n;struct Edge{ double x,y1,y2; int flag; Edge(double a,double b,double c,int d):x(a),y1(b)...
2020-06-24 17:40:26
506
原创 平面最近点对问题:luogu1429
luogu1429解法:分而治之分治数组按x升序排序,调用递归函数。是为了得到区间的最近点对的长度。处理如下 以中间的数字为中心线进行分割,分别对和进行处理。 如果区间的长度比较小,可直接暴力计算,比如以下是。合并已知两边的最近点对的距离为mindist。现在mid两边各选择一个距离才有可能小于mindist。 我们把两边距离中心线距离小于mindist的点挑选出放入数组t。 对数组t按y进行升序,方便以下处理。 每次选择t中的一个点pi,再按顺序挑选pj,确定最短距离,直到不小
2020-05-18 20:18:22
209
原创 旅行商TSP问题
旅行商问题(TSP问题):每个点经过有且仅有一次的最短回路解法:动态规划HDU5067:经典TSP问题#include <bits/stdc++.h>using namespace std;int const inf = 0x3f3f3f3f;typedef pair<int,int>pii;int const N = 12;int n,m,mp[N][N],dp[1<<N][N],cnt;pii a[N];int TSP(){ /
2020-05-18 10:10:18
375
原创 整数划分问题
将n划分成若干正整数之和的划分数 设表示表示i划分成不大于j的划分数。 若,则 若,根据有无j进行划分: 如果划分中含有j,则 如果划分中不含有j,则 所以 若,根据有无j进行划分: 如果划分中含有j,则 如果划分中不含有j,则 所以 将n划分成若干不同整数之和的划分数设为将i划分为不超过j的不同整数的划分数若,则 若,根据有无j进行划分: 如果划分中含有j,则其余划分最大只能为,则 如果划分中不含有j,则 所以 若,根据有无j进行划分:
2020-05-17 21:33:03
636
原创 卡特兰数
https://blog.csdn.net/chlele0105/article/details/38739919卡特兰数:从0开始依次为1,1,2,5,14,42,132,429……通项:递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)代码:void Catalan(){ f[0] = f[1] ...
2020-05-16 14:21:24
79
原创 扩展欧几里得算法
扩展欧几里得算法:ax + by = gcd(a,b) 求解预备知识a≠0,b≠0,gcd(a,b)是ax+by的线性组合的最小正元素。证明设gcd(a,b) = d。 gcd(b,a mod b) = d'bx' + (a mod b)y' = d'令a / b = k(向下取整),则d' = bx' + (a - kb)y' = ay' + b(x'-ky')。 gcd(a,...
2020-05-16 10:42:25
91
原创 尺取法题集合
Poj3061题意:最短的子串满足和≥s代码#include <bits/stdc++.h>using namespace std;int const N = 1e5 + 10;int a[N],n,s;int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%...
2020-05-08 14:21:17
295
原创 高精度模板
高精度加法#include <bits/stdc++.h>using namespace std;int const N = 100 + 10;int a[N],b[N];char sa[N],sb[N];void Bigadd(int a[N],int lena,int b[N],int lenb){ int c[N]; int x = 0; ...
2020-05-05 21:29:38
126
原创 实现构建堆
堆向上调整#include <bits/stdc++.h>using namespace std;int const N = 1000 + 10;int a[N],n;void percup(int a[N],int p){ //小顶堆 int parent,child; int tmp = a[p]; for(child=p;child/2...
2020-05-05 15:38:47
137
原创 带头结点的链表的基本操作
构建带头结点的链表#include <bits/stdc++.h>using namespace std;typedef struct Node{ struct Node *next; int val; Node(){ next = NULL; }}*Link;Link insert(Link p,int key){ ...
2020-05-05 15:33:31
250
原创 HDU1237简单计算器(栈的应用)
#include <iostream>#include <algorithm>#include <cstdio>#include <stack>#include <cstring>#include <sstream>#include <cstdlib>using namespace std; ...
2020-05-04 13:08:15
215
原创 字符串常见问题模板
#include <bits/stdc++.h>using namespace std;int const N = 1000000 + 10;int next[N];char pattern[N],match[N];void get_next(char s[N]){ //找前缀数组 memset(next,0,sizeof(next)); int len = st...
2020-05-03 13:55:51
121
原创 出栈序列的合法性判断
出栈序列的合法性判断如果栈无限大:出栈序列中的每个数后面的比它小的数,是按递减排列的。 如果栈大小有限制:模拟基础实验3-2.4出栈序列的合法性(25point(s))代码:O(n)#include <bits/stdc++.h>using namespace std;int const N = 1000 + 10;stack<int>st;i...
2020-04-30 13:29:41
1039
原创 基础实验4-2.4 搜索树判断 (25point(s))
PTA基础实验4-2.4搜索树判断(25point(s))题意给出一棵树的前序遍历或者镜像的前序遍历,判断是否是二叉树,如果是,输出后序遍历。题解如果是一棵二叉树,那么通过前序+中序可以构建,中序升序排列。 最后判断二叉树是否完整以及叶子的大小是否符合规则 对于镜像,中序是降序。用同样的方式实现。代码#include <bits/stdc++.h>usi...
2020-04-27 13:21:02
449
1
原创 哈夫曼编码
PTA哈夫曼编码题意:给定每个单词出现的频率,给出一套编码,判断是否满足哈夫曼编码。题解:通过单词出现的频率计算wpl。可以通过c++的stl优先队列快速处理。 然后计算编码的wpl是否满足,以及是否存在编码前缀嵌套的情况。代码#include <bits/stdc++.h>using namespace std;int const N = 65;type...
2020-04-26 17:18:02
429
原创 二叉树的代码
#include <bits/stdc++.h>using namespace std;int const N = 1000 + 10;typedef struct BST{ struct BST *left,*right; int val;}*Node;Node insert(Node root,int key){ if(root == NULL)...
2020-04-25 11:29:42
339
原创 各种排序算法代码
插入排序#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int const N = 10 + 5;int main(){ int n = 10; int test[N] = {12,9,2,31,10,1,15,7,8,11...
2020-04-23 19:58:27
2941
2
原创 二分图最大匹配性质+模板
匈牙利算法代码:bool dfs(int u){ for(int i=0;i<n;i++) if(g[u][i]&&!used[i]) { used[i]=true; if(linker[i]==-1||dfs(linker[i])) { ...
2020-04-23 14:55:33
73
原创 数位DP模板题
HDU2089题解代码(无前导0)#include <bits/stdc++.h>using namespace std;typedef long long ll;int const N = 10;int n,m,dp[N][N],a[N];int dfs(int pos,int pre,int sta,int limit){ if(pos == 0) ret...
2020-04-17 23:09:18
108
原创 sublime配置anaconda的SublimeREPL交互式Python环境
安装SublimeREPL设置->Browser Packages->SublimeREPL->config->Python->Main.sublime-menu修改Main.sublime-menu中所有cmd后的路径为anaconda的python.exe路径,比如我的是"cmd": ["C:/Users/Jack/Anaconda3/python",...
2020-03-12 15:13:18
445
原创 Windows下解决pip和conda下载速度问题
pip在C:\Users\<用户名>\AppData\Roaming下创建pip文件夹 在pip文件夹内创建pip.ini文件,内容为 [global]index-url=http://mirrors.aliyun.com/pypi/simple/ [install]trusted-host=mirrors.aliyun.com conda更改C:\Use...
2020-03-12 15:10:26
409
原创 PTA 1131 Subway Map (25/30 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805347523346432题意:经过最少的站,如果经过的站数相同,那么换乘数量最少。题解:我是用dijkstra的算法,记录路径,此节点的父节点和上一条线路。但是始终只有25分。求大佬指点。代码#include <bits/stdc++.h&g...
2019-11-04 21:02:42
163
原创 AVL树的构造和完全二叉树的判断
https://pintia.cn/problem-sets/994805342720868352/problems/994805351302414336AVL树的构造和完全二叉树的判断记录一下,以后方便复习AVL树的构造是模板题。 完全二叉树的判断:层次遍历,如果出现一个结点不存在左或右儿子,标记一下。如果又出现一个这样的结点,那么就不是完全二叉树。代码:#include ...
2019-11-03 17:57:17
614
原创 PTA1082 Read Number in Chinese (25 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805385053978624题解:模拟很复杂,以下介绍一种简单的递归调用的方法。先处理长度在[1,4]的情况,为solve1()函数。从高位开始,每一位输出数字和对应的位的发音(qian、bai、shi)。如果出现0不要急着输出,记录0一直持续到的位置,如果持续到最...
2019-11-01 22:12:52
145
原创 PTA 1016 Phone Bills (25 分)
模拟题,细节很多,操作麻烦,实属不易,纪念一下。重要是细节的处理如果没有花费不必输出。 对于每一个人,把off和on分别储存在两个结构体中,结构体保存对应的时间。 对于匹配的一对,可以先找到on[i]对应的下一个最近的off[f],在验证off[j]上一个最近的on是非为on[i]。 处理花费,一秒一秒加。cent转dollor要除以100。代码#include <bi...
2019-10-30 09:50:36
136
原创 PTA 1043 Is It a Binary Search Tree (25 分)
题意:判断所给的前序是否构成BST或者Mirror Imageof a BST.题解: 如果是BST,那么直接根据前序和中序找到后序。中序为升序排列。 如果镜像BST,那么中序为降序排列。 注意在solve函数中如果是直接找BST树,那么第一个找的的就是此结点。如果镜像,那么最后一个才是。 #include <bits/stdc++.h>usin...
2019-10-29 22:03:55
212
原创 PTA 1068 Find More Coins (30 分)
1068Find More Coins(30分)题意:找出和为m的序列,且满足字典序最小。题解:背包问题。dp[i][j]表示没有第i个物品,价值≤j的最大价值。choice[i][j]是否存在。 对硬币从大到小排序。保证最后拿的价值最小,字典序最小。 最后开始倒着选择,找出答案。代码:#include <bits/stdc++.h>using name...
2019-10-26 19:15:04
174
原创 欧拉路条数(BEST定理 + 矩阵树定理 )
前置技能:行列式(整数取模)求解模板int Gauss(int n){ //求解行列式的值 int ans = 1; for(int i=2;i<=n;i++){ for(int k=i+1;k<=n;k++){ while(a[k][i]) { int d = a[i][i] / a...
2019-10-10 20:31:41
359
原创 矩阵模板
高斯消元 (浮点数运算)inline void gauss(){ int i, j, k, l; for(i = 1; i <= n; i++){ l = i; for(j = i + 1; j <= n; j++) if(fabs(matrix[j][i]) > fabs(matrix[l][i]))...
2019-10-10 20:28:52
242
原创 博弈论
SG函数//f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理//SG[]:0~n的SG函数值//S[]:为x后继状态的集合int f[N],SG[MAXN],S[MAXN];void getSG(int n){ int i,j; memset(SG,0,sizeof(SG)); //因为SG[0]始终等于0,所以i从1开始...
2019-10-09 22:17:51
89
原创 分段打表模板
HDU4389打表模板#include <bits/stdc++.h>using namespace std;int const step = 1e6;int const N = 1e3 + 10;int const M = 1e9;int sum[N];int fun(int n){ if(n == 0) return 0; else return fun(...
2019-10-09 22:16:43
231
原创 十进制快速幂模板
ll qpow(ll a,ll n){ ll ans = 1; while(n){ if(n & 1) ans = ans * a % mod; a = a * a % mod; n >>= 1; } return ans;}ll qpow_decimal(ll a,char s[N]){ //求解a^s,把幂依次变成a^1,a^10,a^100,...
2019-10-09 22:16:24
96
原创 威尔逊定理
威尔逊定理:若p为质数,则p|(p-1)!+1 亦:(p-1)!≡p-1≡-1(modp)HDU2973题解:若3k+7是质数,那么Sn = n(对应一项为1),否则Sn = 0#include <bits/stdc++.h>using namespace std;int const N = 3e6 + 10;int vis[N],prime[N],t...
2019-10-09 22:15:36
221
原创 线性基学习
求线性基模板#include <bits/stdc++.h>using namespace std;typedef long long ll;int const N = 1e5 + 10;int maxbit = 64;ll a[N],p[N]; //p数组储存所有的线性基int n;int main(){ scanf("%d",&n); memse...
2019-10-09 22:15:12
238
原创 最大团问题hdu1530
HDU1530题解基础:我们令cnum[i]表示点i到n中的最大团大小,则有cnum[i] = cnum[i + 1] 或cnum[i + 1] + 1,也就是说具有单调性(类似于DP),这样我们可以利用这个性质进行剪枝,有点类似于二分图增广路,倒着每次添加一个点i,看看能否形成更优的答案,如果形成了,那么直接return就好了。另外选点的时候,顺着按下标从小到大选,这样可以避免枚举一些重...
2019-10-09 22:06:58
173
原创 康拓展开
参考https://oi-wiki.org/math/cantor/https://zh.wikipedia.org/zh-hans/%E5%BA%B7%E6%89%98%E5%B1%95%E5%BC%80luogu5367题解代码(树状数组优化)#include <bits/stdc++.h>using namespace std;typedef l...
2019-09-05 09:00:13
106
空空如也
C++虚函数的使用。一个代码
2019-05-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人