算法
Self-Discipline
在校大学生
展开
-
快速排序模板
有关快速排序的原理,网上有很多,在此就不赘述了,直接上代码。#includeusing namespace std;int a[100],n;void quicksort(int l,int r){ int i=l,j=r,t,tmp=a[l]; if(l>=r) return ; while(i!=j){ while(a[j]>=tmp&&原创 2017-12-14 10:34:54 · 602 阅读 · 0 评论 -
最小点集覆盖==最大匹配的证明
摘自http://www.cnblogs.com/rainydays/archive/2011/03/03/1969543.html首先,最小点集覆盖一定>=最大匹配,因为假设最大匹配为n,那么我们就得到了n条互不相邻的边,光覆盖这些边就要用到n个点。现在我们来思考为什么最小点击覆盖一定转载 2018-03-20 13:59:37 · 1219 阅读 · 0 评论 -
第十四届华中科技大学程序设计竞赛C—— Professional Manager
传送门:点击打开链接题意:按照题目要求对树进行四种操作。分析:初一看就觉得是个并查集的题,但是不知道怎么删点,后面看了别人的代码,才恍然大悟,加一个数组标记该点的编号就行了。另外还需要压缩路径,否则会tle。所谓压缩路径就是把这一团的点直接指向祖先,大大减少find函数查找的时间。代码:#include<bits/stdc++.h>using namespace std;const...原创 2018-05-01 11:40:46 · 213 阅读 · 0 评论 -
最大流dinic算法模板(邻接矩阵)
说明:dinic算法论效率,比EK要好,比sap差一点,但是代码比sap简单许多,竞赛中一般使用dinic,除非要求效率非常高。代码:#include#include#include#includeusing namespace std;const int VM=220;const int INF=0x3f3f3f3f;int n,m,src,des;int map[VM]原创 2018-04-25 12:53:02 · 652 阅读 · 0 评论 -
牛客练习赛16 E - 求值
传送门:https://www.nowcoder.com/acm/contest/84/E分析:考察位或运算的性质,对于每一个固定的l,不同的f(l,r)最多只有log2(1e6)种,( 因为每次至少1位变成1,最多就log(1e6)位)。 按照从大到小的顺序枚举 l,维护每一段 r,这一段里 f( l , r ) 具有相同的值,那么 l 变成 l-1 的时候,首先会新增一段 [l, l],然后枚...原创 2018-05-03 21:37:50 · 198 阅读 · 0 评论 -
Triangular garden
传送门:点击打开链接题意:判断一个点是否为三角形四心(重心、垂心、内心、外心)的任意一个。分析:写这篇博客主要是为了复习几何模板。重心是三条中线的交点坐标为((x1+x2+x3)/3,(y1+y2+y3)/3);垂心是三条高线的交点,坐标利用线段垂直的性质(向量的内积为0)解一个方程组;内心是内接圆的圆心,也是利用线段垂直的性质(向量内积为0)解一个方程组;外心是外接圆的圆心,利用到三个点原创 2018-04-29 22:01:40 · 167 阅读 · 0 评论 -
Various Tree
传送门:点击打开链接题意:给出两个整数a、b,有四种操作,分别为加减该数的二进制位中1的位数或者加减1。就a变化到b的最少操作步数。分析:我用的是贪心+bfs,一开始加减二进制位贪心到一个靠近b的位置再用bfs,但是无法证明一定正确,没想到也过了,后面发现数据不是很大,直接bfs即可。后附标程。标程的代码太简洁了,值得学习。另外计算二进制1的个数可以直接用位运算&,计算x&x-1变...原创 2018-04-29 22:17:03 · 163 阅读 · 0 评论 -
2017第八届蓝桥杯决赛 磁砖样式
标题:磁砖样式小明家的一面装饰墙原来是 3*10 的小方格。现在手头有一批刚好能盖住2个小方格的长方形瓷砖。瓷砖只有两种颜色:黄色和橙色。小明想知道,对于这么简陋的原料,可以贴出多少种不同的花样来。小明有个小小的强迫症:忍受不了任何2*2的小格子是同一种颜色。(瓷砖不能切割,不能重叠,也不能只铺一部分。另外,只考虑组合图案,请忽略瓷砖的拼缝)显然,对于 2*3 个小格子来说,口算都可以知道:一共1...原创 2018-05-21 20:47:52 · 1774 阅读 · 4 评论 -
Codeforces Round #485 (Div. 2) - D - Fair
传送门:点击打开链接题意:n个城市,m条无向路,共有k种货物,每个城市只有一种货物,让你求在城市i举办交易会,至少有s种货物参加,求最少的路径之和分析:两种思路,一是直接对每一个进行点bfs,找到s种不同货物直接返回,复杂度大约为O(n*s)(标记的时候要用bool类型的数组,用int型会超时),二是进行k遍bfs,暴力k种颜色到每个点的最短距离,最后对这k种颜色到每个点的距离排序取前s个做和。代...原创 2018-06-03 19:49:00 · 208 阅读 · 0 评论 -
Codeforces Round #485 (Div. 2) - E - Petr and Permutations
传送门:点击打开链接题意:给出一个1-n的随机排列,问这个序列是交换3*n次形成的,还是交换7*n+1次形成的。分析:首先,3*n和7*n+1的奇偶性一定不同,线性代数中学过,交换序列中任意两个元素,会使序列逆序对的奇偶性发生改变一次,所以只需快速求出逆序对就行。用归并、树状数组、线段树都行。另外负数取余,取余的结果与被取余的数保持一致,如果不确定正负,就先使用绝对值再取余。代码:#include...原创 2018-06-03 20:08:57 · 166 阅读 · 0 评论 -
Codeforces Round #485 (Div. 2) - F - AND Graph
传送门:点击打开链接题意:给n和m,还有m个互不相同的数,均小于1<<n,如果m个数字中a & b = 0,那么a 和b有边相连,问有多少个连通分量。分析:把每个数看做一个01集合,对于在m个数中的数,求它的补集的子集个数即可这里用4位来举个例子,比如5(0101),补集:(1010),补集的子集:(1010) (1000) (0010) (0000)补集的子集和该集合的&a...原创 2018-06-03 21:51:11 · 279 阅读 · 0 评论 -
2017第八届蓝桥杯决赛 发现环
标题:发现环小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他...原创 2018-05-23 16:55:43 · 823 阅读 · 0 评论 -
第九届蓝桥杯国赛(c/c++ B组)最后一题
题目:以后补上。。。分析:枚举求出n以内gcd为x的对数,求n以内gcd为x的对数就是求n/x以内gcd为1的对数,所以只要预先用欧拉线性筛法求出n以内的数欧拉函数,做个前缀和就行了。代码:#include <bits/stdc++.h>using namespace std;#define ll long longconst ll N = 1e7+5;const ll p =...原创 2018-05-29 11:07:38 · 977 阅读 · 0 评论 -
codefoces 994
A. Fingerprints水题,暴力#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<cstdlib>#include&原创 2018-06-21 19:23:52 · 234 阅读 · 0 评论 -
codeforces 999E Reachability from the Capital
题目:点击打开链接题意:给你n个点,m条边,以及一个初始点s,问你至少还需要增加多少条边,使得初始点s与剩下其他的所有点都连通。分析:思路一:首先统计强连通分量,缩点并重新构图。除了s结点所在的连通分量,如果其他连通分量所构成的新点的入度为0,则使这个连通分量与s连通的最优的方案是将这个点与s结点相连。思路二:先从起点搜索一遍,对不能到达的点加一条从首都到这个点的边(加边操作只能是思维上的,不能真...原创 2018-06-24 14:09:57 · 291 阅读 · 0 评论 -
codeforces 999D Equalize the Remainders
题目:点击打开链接题意:给你一个含有n个整数的数组a1,a2,…,an,和一个正整数m。保证m是n的因数。 在单次移动中,你可以选择在1到n之间的任一位置的数ai加1. 计算cr(0~m-1)——每个元素除以m之后的余数r。换句话说,对于每个余数, 找到与它相对应的元素。 你的任务是改变数组的元素使得c0=c1=…=cm-1=n/m; 找到满足上述要求的最小的需要改变的次数 。分析:贪心,首先记录...原创 2018-06-24 15:07:51 · 358 阅读 · 0 评论 -
codeforces 992
A. Nastya and an Array水题,暴力#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<cstdlib>#inclu原创 2018-06-20 11:21:00 · 416 阅读 · 0 评论 -
L3-010. 是否完全二叉搜索树
传送门:点击打开链接主要是是复习一下二叉搜索树代码:#includeusing namespace std;#define inf 0x3f3f3f3fconst int N = 35;int n,tr[1<<20],a[N];void build(int id,int num){///数组模拟树 简洁 if(tr[id]==0) tr[id]=num; e原创 2018-03-24 08:39:06 · 221 阅读 · 0 评论 -
L3-007. 天梯地图
传送门:点击打开链接这题处理比较麻烦,条件比较多,主要回顾一下怎么打印最短路径。代码:#includeusing namespace std;#define inf 0x3f3f3f3fconst int N = 510;int n,m,s,e,dis[N][N],t[N][N],p[N],low[N],vis[N],nds[N],ph[N];int rt1[N],rt2[N原创 2018-03-23 21:57:47 · 405 阅读 · 0 评论 -
折半插入排序
折半插入排序是对直接插入排序的改进,可以这么说,折半插入排序=直接插入排序+二分查找,代码如下。#includeusing namespace std;void insetSort(int a[],int n){ int l,r,m; for(int i=2;i<=n;i++){ a[0]=a[i]; l=1; r=i-1;原创 2017-12-15 19:34:59 · 294 阅读 · 0 评论 -
欧几里得算法和扩展欧几里得算法
二元一次不定方程的一般形式为ax+by=c。其中 a,b,c 是整数,ab ≠ 0。此方程有整数解的充分必要条件是a、b的最大公约数整除c欧几里得算法的证明:a可以表示成a=kb+r(a,b,k,r皆为正整数;且a>b) 则r=amodb 假设d是a,b的一个公约数,为了方便,我们记d=(a,b) 则d|a,d|b,即a和b都可以被d整除。 而r=a−kb原创 2018-01-01 21:08:23 · 322 阅读 · 0 评论 -
POJ1061 青蛙的约会
POJ1061 青蛙的约会人生第二道ACM题,我都不知道该说神马了,中文题真不是好惹的,前几天一道递归和数组的中文题就花了我三天,这一题又花了我一个晚上的时间了!一开始不会做,上网看了解题报告说是数论题。然后就学啊学啊学啊,写完后发现只有21行代码,但花了我一个晚上的时间啊!是题太难还是我太水了?55555~~~要做此题,先要明白几个定理,为保严谨性我按顺序一一证明出来(心病,不证转载 2018-01-01 21:54:12 · 250 阅读 · 0 评论 -
欧拉函数线性筛模板
此模板主要用来求1-n(n<=1e6)以内的欧拉函数,顺带把素数也筛了出来.欧拉函数表示n以内与n互素的数,其中phi[1]=1。这里主要利用了欧拉函数的两个性质:1.若p是x的因子,则E(p*x)=p*E(x),证明直接利用算数基本定理就行了。2.若p是素数,且x与p互素,(即x,p都为素数),则E(p*x)=E(p)*E(x)。代码: #include<ios...原创 2017-12-29 08:41:52 · 300 阅读 · 0 评论 -
hdu 1269 迷宫城堡(求强连通分量)
迷宫城堡Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8196 Accepted Submission(s): 3664Problem Description为了训练小希的方向感,Gardon建立原创 2018-01-13 16:16:58 · 180 阅读 · 0 评论 -
tarjan求强连通分量+缩点+割点以及一些证明
“tarjan陪伴强联通分量生成树完成后思路才闪光欧拉跑过的七桥古塘让你 心驰神往”----《膜你抄》 自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一直没有时间学习。这两天好不容易学会了,写篇博客,也算记录一下。 一、tarjan求强连通分量1、什么是强连通分量?引用来自度娘的一句话:“有向转载 2018-01-13 19:24:15 · 1592 阅读 · 0 评论 -
逆元的求法
数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元)数论中的倒数是有特别的意义滴你以为a的倒数在数论中还是1/a吗(・∀・)哼哼~天真 先来引入求余概念 (a + b) % p = (a%p + b%p) %p (对)(a - b) % p = (a%p - b%p) %p (对)(a * b) % p转载 2018-01-22 10:30:43 · 8886 阅读 · 1 评论 -
POJ 2186 Popular Cows(强连通分量缩点)
Popular CowsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 36225 Accepted: 14759DescriptionEvery cow's dream is to become the most popular cow in the h原创 2018-01-13 20:55:16 · 359 阅读 · 0 评论 -
hdu1827Summer Holiday(强连通分量-最小权点基)
Summer HolidayTime Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4111 Accepted Submission(s): 1853Problem DescriptionTo see a W原创 2018-01-14 10:26:30 · 247 阅读 · 0 评论 -
【图论】求无向连通图的割点
1. 割点与连通度在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点(Articulation Point)。一个没有关节点的连通图称为重连通图(biconnected graph)。若在连通图上至少删去k 个顶点才能破坏图的连通性,则称此图的连通度为k。关节点和重连通图在实际中较多应用。显然,一个表示原创 2018-01-14 11:48:23 · 1164 阅读 · 0 评论 -
hdu 1576 A/B(求逆元模板题)
ACM国际大学生程序设计竞赛全球总决赛A/BTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7034 Accepted Submission(s): 5595Problem Descri原创 2018-01-22 14:29:45 · 379 阅读 · 0 评论 -
hdu 1695 GCD(欧拉函数+容斥原理)
题目大意:给你 a , b , c , d , k 五个值 (题目说明了 你可以认为 a=c=1) x 属于 [1,b] ,y属于[1,d] 让你求有多少对这样的 (x,y)满足gcd(x,y)==k。给你的时间是 3000 MS。 0 分析:1由于gcd(x,y)=k满足(x/k,y/k)=1,所有区间可以缩小为[1/k,b/k],[1/k,d/k],问题也转化成为取两区间的元素,使原创 2017-12-30 10:22:17 · 253 阅读 · 0 评论 -
poj-1017-Packets
题意:一个工厂制造的产品形状都是长方体,它们的高度都是 h,长和宽都相等,一共有六个型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。 分析:贪心题,...原创 2018-06-04 08:47:13 · 290 阅读 · 0 评论 -
优先队列priority_queue详解
优先队列引入优先队列是一种特殊的队列,在学习堆排序的时候就有所了解,点“击”查看。那么优先队列是什么呢? 说白了,就是一种功能强大的队列。如果不太清楚队列,可以看看我这篇博客。它的功能强大在哪里呢? 四个字:自动排序。优先队列的头文件&&声明首先,你需要#includeusing namespace std;12这两个头文件。转载 2018-03-15 19:14:35 · 224 阅读 · 0 评论 -
PAT L3-003. 社交集群
传送门:点击打开链接思路:一是并查集,对人的兴趣块祖先计数;二是直接暴力搜索,一个个比较并标记。代码:///并查集#includeusing namespace std;int n,p[1005],c[1005],cnt[1005];int s[1005];bool cmp(int a,int b){ return a>b;}int f(int x){ whil原创 2018-03-19 16:28:04 · 390 阅读 · 0 评论 -
Pollard-Rho算法模板(POJ 1811 Prime Test)
题目:点击打开链接题意:给定一个64位整数,问是否为质数,如果不是,则输出其最小因子。分析:miller_rabbin素数判定+pollard_rho分解质因子模板题。Pollard_rho算法的大致流程是 先判断当前数是否是素数(Miller_rabin)了,如果是则直接返回。如果不是素数的话,试图找到当前数的一个因子(可以不是质因子)。然后递归对该因子和约去这个因子的另一个因子进行...原创 2018-08-28 10:17:25 · 591 阅读 · 0 评论