自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 次小生成树

最小生成树的求法无非就两种方法:一种是prim算法,一种是kruscal算法prim算法类似于迪杰斯特拉算法,时间复杂度为O(n^2)kruscal算法是每次枚举最小边,并查集检验是否成环即可,时间复杂度为O(elog(e))两种方法都非常简单。。。。现在扩展一种知识点,叫做次小生成树:定义:给定一个带权图,把图中所有生成树按权值从小到大排序,第二小的成为次小生成树计算次小生成树的两种方法:方法1:先求最小生成树,再枚举删去最小生成树中的边求解,时间复杂度O(mlogm+n*m)方法2:先求

2021-08-07 10:51:26 133

原创 单源最短路的应用与扩展

单元最短路与别的知识点的结合:1.二分2.拓扑排序3.全排列/枚举4.动态规划/记忆化搜索dp5.从多个起点到多个终点求最短路,可以设置一个虚拟点或者当有多个起点一个终点时,反向求最短路6.双端队列求01最短路什么是01最短路顾名思义,边权只有0和1的最短路。算法分析01最短路是最短路类型中比较特殊的一种,当然你也可以用一般的最短路解法(Dijkstra或SPFA),但总所周知利用BFS队列维护,时间复杂度往往只需要O(N)。那该如何实现呢?如果当前处理的点连接的边为0,那么将这个点移至

2021-08-07 10:49:01 131

原创 Codeforces Round #717 (Div. 2)

#include <bits/stdc++.h>#define N 3001#define INF 0x3f3f3f3fusing namespace std;int main(){ int t; cin>>t; while(t--) { int n,k; cin>>n>>k; int a[101]; for(int i=1;i<=n;i++).

2021-04-26 21:20:31 127

原创 L2-029 特立独行的幸福 (25 分)

解析:用set来存独立幸福数,每次找到一个幸福数,用book来标记,不管其是否独立都放进set里面,然后在之后的遍历检验中,如果发现set里的幸福数依附于正在检验的数,就把其从set中删除。用vis来标记检验一个数时(记得每次都要初始化),它经过操作(每个数平方加和)所产生的所有数,如果发现有已经标记过的,则表示进入死循环,此时退出循环,继续遍历检验别的数即可。如果在遍历检验时,发现其已经被book标记,说明这个数是幸福数,但它依附于别的数,直接continue即可。具体看代码:#include &l.

2021-04-15 16:04:34 122

原创 map、vector、set的插入删除和查找解释及举例

#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define N 10001using namespace std;int main(){ //删除都是erase(const_iterator position)函数 //map的插入、查找 cout<<"map:"<<endl; map<string,int>vis; //插入方式 //1.vis.in

2021-04-14 21:29:04 175

原创 L1-056 猜数字 (20 分)【set做法】

set做法耗时和内存常规做法耗时和内存map存人名与数字之间的关系,利用set的upper_bound()函数找到第一个大于平均数一半(必须是浮点,否则会失精)的数,然后再找到这个数的前一个数,与平均数的一半的差值作比较。#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define N 10001using namespace std;int n;map<int,string>vis;int sum;int ma

2021-04-14 20:19:30 148

原创 7-16 插入排序还是归并排序 (25 分)【二分】

根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?输入格式:输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最

2021-04-14 16:15:47 203

原创 L3-020 至多删三个字符 (30 分)(dp)

#include <bits/stdc++.h>#define N 1000100using namespace std;long long int dp[N][4],sum;int main(){ char s[N]; scanf("%s",s+1); int m=strlen(s+1); dp[0][0]=1; for(int i=1; i<=m; i++) { for(int j=0; j<=3; j+.

2021-04-08 19:51:08 83

原创 天梯赛补题:L3-021 神坛 (30 分)

在古老的迈瑞城,巍然屹立着 n 块神石。长老们商议,选取 3 块神石围成一个神坛。因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好。特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面积为 0.000。长老们发现这个问题没有那么简单,于是委托你编程解决这个难题。输入格式:输入在第一行给出一个正整数 n(3 ≤ n ≤ 5000)。随后 n 行,每行有两个整数,分别表示神石的横坐标、纵坐标(−10​9​​ ≤ 横坐标、纵坐标 <10​9​​ )。输出格式:在一行中输出神

2021-04-07 20:54:45 359

原创 7-14 直捣黄龙 (30 分)

7-14 直捣黄龙 (30 分)本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。输入格式:输入第一行给出2个正整数N(2 ≤ N ≤ 200,城镇总数)和K(城镇间道路条数),以及己方大本营和敌方大本营的代号。随后N-1行,每行给出除了己方大本营外的一个城镇的代号和驻守的敌军数量,其间以空

2021-04-05 17:20:44 366

原创 7-12 愿天下有情人都是失散多年的兄妹 (25 分)

呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?输入格式:输入第一行给出一个正整数N(2 ≤ N ≤10^​4),随后N行,每行按以下格式给出一个人的信息:本人ID 性别 父亲ID 母亲ID其中ID是5位数字,每人不同;性别M代表男性、F代表女性。如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。接下来给出一个正整数K,随后K行,每行给出一对有情人的ID

2021-04-05 16:25:42 237

原创 补题:G - Galactic Collegiate Programming Contest

从这个题学到了一些关于set的知识点,在自己另一个博客总结了一点,之前一直没做出来,是因为在set中不会删除全部元素,通过学习这篇博客https://blog.csdn.net/bbbbswbq/article/details/79839832我总结了一些set的知识点下面是ac代码:#include <bits/stdc++.h>using namespace std;struct node{ int id,s,t; bool operator<(con.

2021-03-27 20:24:33 103

原创 如何一个一个删除set中的元素或者全部删除set中的元素

#include <iostream>#include <bits/stdc++.h>using namespace std;int main(){ set<int>s; s.insert(2); s.insert(4); s.insert(6); set<int>::iterator it=s.end(); while(!s.empty()) { for(set<int

2021-03-27 19:44:54 829

原创 L2-012 关于堆的判断 (25 分)

将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被插入一个初始为

2021-03-26 15:25:14 139

原创 二维哈希

参考:http://www.bubuko.com/infodetail-3544495.htmlac代码+解析:#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;typedef unsigned long long ull;#define base1 3#define base2 5//这两个数尽量为奇数int n,m,p,q;ull hash_code1;//小矩阵的哈希值char ch1..

2021-03-24 19:52:49 88

原创 237. 程序自动分析

在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设 x1,x2,x3,… 代表程序中出现的变量,给定 n 个形如 xi=xj 或 xi≠xj 的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。现在给出一些约束满足问题,请分别对它们进行判定。输入格

2021-03-19 20:01:39 86

原创 最近公共祖先问题(LCA)

暴力:给定节点u,v,首先对u进行回溯,并沿途标记,再对v进行回溯直到遇到一个被标记的节点,该节点就是u,v的最近公共祖先。Tarjan算法:需要预先知道所有的询问,并对询问做一些预处理,即把需要询问的一对节点捆绑在一起,该算法主要应用dfs算法和并查集算法。Tarjan算法样例模拟比较详细的博客:https://www.cnblogs.com/JVxie/p/4854719.html第三种RMQ(RMQ暂时还不算了解)参考博客:https://blog.csdn.net/zmx354/artic

2021-03-15 20:33:59 68

原创 Codeforces Round #706 (Div. 2)

代码: #include <iostream> #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; int n,k; string s; int main() { int t; cin>>t; while(t--) { cin>&g

2021-03-10 21:35:44 167

原创 K - Dire, Dire Docks Gym - 101063K

题目链接:https://vjudge.net/problem/Gym-101063K题目大意:给你二维平面上n个点,让你选择连接n条线,使其成为一个连通图,注意:任意两点之间连成的线不可经过第三点分析:n个点,n条边,那就必有一个环。我们可以把这些点按照从小到大(从左下到右上)排序,并依次相连,这样就成为了一个连通图,此时,我们还缺少一条边(使该连通图出现一个环),我们可以比较第一个点分别与其余各点的斜率,找到斜率最小或者斜率最大的,连接即可。代码:#include <iostream&gt

2021-03-10 17:16:26 89

原创 H - Hellcife is on fire Gym - 102448H

题目链接题目描述:The kingdom of Hellcife has several cities that are connected by some roads. One day, the king of Hellcife, Bair Jolsonaro, decided to set fire on some of these cities, just for fun. It’s known that the i-th city has a number Ti, indicating that

2021-02-21 16:30:57 101

原创 优先队列

印象笔记地址

2021-02-20 17:54:45 57

原创 二分图最大权匹配模板题HDU - 2255

题目链接:奔小康赚大钱模板代码:#include <bits/stdc++.h>#define N 100010#define mod 1000000007#define INF 0x3f3f3f3fusing namespace std;int w[301][301];int p[305];int h[305];bool vis_p[305];bool vis_h[305];int match[305];int slack[305];//记录每个房屋被村民购买至少

2021-02-18 16:55:54 70

原创 求逆元的算法

求乘法逆元的目的(作用):除以一个数然后取模时,我们可以转化为乘以这个数的逆元然后取模。(类似于:要计算3/4,那么我们可以转变为3*(1/4))由于(a/b)%mod并不等价于(a%mod)/(b%mod)%mod,所以,在计算(a/b)%mod时,我们应该转换为(a*b-1)%mod,b-1指的就是b的逆元。下面就自然引入求逆元的算法:long long Mode(long long a, long long b, long long mode)//快速幂算法{ long long su

2021-02-18 11:26:09 186

原创 274. 移动服务

一个公司有三个移动服务员,最初分别在位置1,2,3处。如果某个位置(用一个整数表示)有一个请求,那么公司必须指派某名员工赶到那个地方去。某一时刻只有一个员工能移动,且不允许在同样的位置出现两个员工。从 p 到 q 移动一个员工,需要花费 c(p,q)。这个函数不一定对称,但保证 c(p,p)=0。给出N个请求,请求发生的位置分别为 p1~pN。公司必须按顺序依次满足所有请求,且过程中不能去其他额外的位置,目标是最小化公司花费,请你帮忙计算这个最小花费。输入格式第1行有两个整数L,N,其中L是

2021-01-29 17:37:33 73

原创 Binary Transformations

multiset是多重集,它与set的区别就是,multiset可以有重复元素,set不可以。在这个题上还了解了如何倒着遍历multiset、set等库函数#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;#define ll long long#define N 2010long long int c[5001];multiset<long long>a01,a10;bool cm.

2021-01-29 11:03:32 123

原创 Problem B

题目描述You are given a list of integers x1, x2, . . . , xn and a number k. It is guaranteed that each i from 1 to k appears in thelist at least once.Find the lexicographically smallest subsequence of x that contains each integer from 1 to k exactly once.输

2021-01-25 11:13:16 96

原创 Acwing 196.质数距离 197.阶乘分解

196.质数距离题目描述给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1-D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。输入格式每行输入两个整数L和U,其中L和U的差值不会超过1000000。输出格式对于每个L和U ,输出一个结果,结果占一行。结果包括距离最近的相邻质数对和距离最远的相邻质数对。(具体格式参照

2021-01-23 16:22:58 125

原创 斯特林公式求阶乘位数

斯特林公式:log10(n!)=log10(√2πn)+log10(n/e)^n=log10(√2πn)+n*log10(n/e)

2021-01-23 14:36:40 127

原创 卡特兰数的一些应用

1.给定n个0和n个1,它们按照某种顺序排成长度为2n的序列,满足任意前缀中0的个数都不少于1的个数的序列的数量为: Cat(n) = C(2n, n) / (n + 1)2.出栈次序一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?我们设f(n)=n个数不同出栈序列的种数,f(n)=Cat(n) = C(2n, n) / (n + 1),详情证明见百度百科。3.有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有

2021-01-22 21:10:23 161

转载 二进制中1的个数

原博客:https://blog.csdn.net/hainandao710/article/details/79173884计算机里的数字本来就是用二进制存的,所以计算过程也都是二进制计算。利用一些位运算的特性,可以很容易计算1的个数。有一个很有意思的特性:随便给一个二进制数,比如n=10001100,我们把它减一:n-1=10001011。重新摆放一下观察:10001100 (n)10001011 (n-1)通过观察得出,n中为1的最低位是第3位,而n-1和n的低3位全都不同。如果进行“按位与

2021-01-22 19:18:47 68

原创 Codeforces Round #694 (Div. 2)

A题大意:我们可以在这个数组上执行一种操作,即用相邻两个数的和代替这两个数,例如[3,6,9],如果操作前两个数,那么数组就会变成[15,9]。输入两个整数,n和x,接下来输入一组数据,这组数据长度为n。输出执行上述操作后,数组中的数据除以x(向上取整),并且相加后得到的最大值和最小值。分析:最大值即为所有数字除以x(向上取整)之后相加的和,最小值即为所有数字相加后除以x(向上取整)之后的的和。代码:#include <iostream>#include <cstring&..

2021-01-21 16:51:44 83

原创 Pursuing the Happiness

分析:由于数据量较小,直接暴力即可,不需要KMP算法,易错点:如果原字符串中有两个子字符串,可以交换第一个子字符串的’h’与第二个子字符串的’a’,如果超过三个子字符串必不能实现仅仅交换两个位置就满足要求,如果只有一个子字符串,就交换’h’和’a’即可,如果没有子字符串,那就必要小心,如果任意交换两个字符,可能会生成“happiness”,例如:“haapiness”,如果交换第一个’h’和第一个’a’,就会生成“happiness”,如果原字符串(不含子字符串)可能会通过交换两个位置上的字符生成子字符串.

2021-01-20 11:10:51 90

原创 回家之旅

#include <iostream>#include <bits/stdc++.h>#include <string.h>#include <set>#include <list>#include <map>#include <algorithm>#include <stdio.h>#include <math.h>#include <bitset>#include

2021-01-19 16:38:41 320

原创 数据结构实训课题--(停车场模拟)

#include <iostream>#include <bits/stdc++.h>#include <string.h>#include <set>#include <list>#include <map>#include <algorithm>#include <stdio.h>#include <math.h>#include <bitset>#include

2021-01-19 16:36:22 501

原创 E - Expeditious Cubing Kattis - expeditiouscubing【浮点数处理】

Your friend Claire has dragged you along to a speedcubing event that is happening in Eindhoven. These events are all about solving the Rubik’s cube and similar twisty puzzles as quickly as possible. The attendants of the event can enter into various compet

2020-12-14 20:20:59 320

原创 F - Firetrucks Are Red Kattis - firetrucksarered(并查集加路径压缩)

Lily is fascinated by numbers. She believes the whole world revolves around them, and that everything is connected by numbers. Her friends, Alice, Bob, Charlie and Diane, are not convinced. But she gives them an example:Alice lives in house number 25 on h

2020-12-14 20:14:19 262

原创 C - Canvas Line Kattis - canvasline(细节题)

Your friend Charmion asked you to hang some canvases out to dry on a straight washing line for an art project she has been working on. The canvases are artfully arranged such that none of them overlap, although they may touch along the edges. For stability

2020-12-14 20:09:56 340

原创 Gym - 102059H 思维题

题目链接:https://codeforces.com/gym/102059/problem/H思路:采取倒推的手段,我们根据题目给出的条件,可以知道(x+y)/gcd(x,y)<1000,那么x/gcd(x,y)+y/gcd(x,y)<1000,两个互质的数相加小于1000,那么这两个数一定都小于1000且互质,我们假设x/gcd(x,y)=i,y/gcd(x,y)=j,那么题目就转换成了在1000内找两个互质的数,并且在给定的范围内满足a<=igcd(x,y)<=b且c<

2020-12-05 20:25:19 141

原创 D. Power play【二分卡精度】

题目链接:https://codeforces.com/gym/102780/problem/D#include <bits/stdc++.h>using namespace std;long long int a,b;long long int f(long long int l,long long int r){ if(l>r) return 0; long long int mid=(l+r)/2; double x=(double)(log(m

2020-11-30 20:35:55 203

原创 最小路径覆盖

最小路径点覆盖:最小路径覆盖就是找出最小的路径条数,使之成为P的一个路径覆盖.(来源:百度百科),通俗点讲,就是在一个有向图中,找出最少的路径,使得这些路径经过了所有的点。在一个p*p的有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联。我们需要知道的是:1.一个点也是一个路径覆盖,只不过它的路径覆盖长度为0。2.任何一个顶点有且只有一条路径与之相关联。路径覆盖与二分匹配之间的关系(有向无环图):最小路径覆盖=|p|-最大匹配数(来源百度百

2020-11-28 21:42:15 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除