自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二分

一.什么是二分搜索?在有界并有序的解空间内不断缩减可能存在的范围,从而得到问题最优解的答案。只有有界闭区间才能保证缩减次数是有限的,同时也只有存在单调性才能够保证二分的使用是正确的,保证去掉的值是不合法或者不是最优解。二.二分搜索的实现求最有解可以转换成求满足某个条件C(x)的最大(/最小)的xconst double eps = 1e-6;bool C(typedef x){ //判断x是否满足……条件,并返回结果 /* ……*/ }//整数二分 int bsearch(int l

2021-03-31 18:26:25 189

原创 UVA1326 Jurassic Remains

UVA1326 Jurassic Remains知识点:集合的整数表示 + 折半枚举 +异或一.题意选择最多的串,使得这些串中出现的每一位大写字母都是出现了偶数次,并且输出串的个数,和按照升序说出选择了哪几个串二.题解把二进制上的每一位当作是一个大写字母(A->1,B->2,C->4……),然后通过异或来判断出现的次数是奇次还是偶次,并且通过折半枚举,将n分成两半来枚举#include<stdio.h>#include<string.h>#inclu

2021-02-24 22:53:08 199

原创 Educational Codeforces Round 102

一. A.Replacing ElementsA题链接(1)题意:给你一个数组,可以选择其中三个不同位置的数i,j,k,使得a[i] = a[j] + a[k],问能不能经过0次或者多次操作使得数组里面的数都小于等于d(2)题解:能够使数组在任何时候都小于等于d的话,要么是存在两个数相加都不超过d,就可以使得任何一个数都 = 这两个数相加,要么就是所有数都已经不超过d,直接满足条件(3)代码:#include <bits/stdc++.h>using namespace st

2021-01-15 22:51:19 356

原创 IncDec Sequence

bozj - 3043 IncDec Sequence 一.题意 二.输入与输出 三.分析题目中项目2项目3

2020-12-17 15:57:29 561

原创 洛谷P1331--海战

洛谷P1331–海战bfs模板题一.题意题目的要求是找到图中有多少个矩形并输出其数量,假如有一个不是矩形就输出Bad placement.二.分析既然是要求矩形的数量,可以利用bfs去搜索图,然后利用面积来判断是否是矩形:(行最大值减行最小值 + 1) * (列最大值减列最小值 + 1)== 当前联通的‘#’的数量三.代码#include <bits/stdc++.h>using namespace std;const int maxn = 1e3 + 10;char

2020-10-15 11:22:57 895

原创 欧拉函数

欧拉函数一.什么是欧拉函数欧拉函数就是指:对于一个正整数n,小于或等于n的正整数中与n互质的正整数个数(包括1)的个数,记作 φ ( n )所以其通式为: φ ( n ) = n * (1 - 1/p1) * (1 - 1/p2) * …… * (1 - 1/pn),其中p1,p2……pn为n的所有质因数,例如:φ ( 10 ) 的质因数为2,5,所有φ ( 10 ) = 10 * (1 - 1/2) * (1 - 1/5) = 4(1,3,7,9这四个数)同时φ ( 1 ) = 1;二.欧拉函数

2020-09-22 22:15:34 6232 1

原创 最小生成树模板(prim + kruskal + prim堆优化)

最小生成树模板题(prim + kruskal + prim堆优化)一.prim算法hihocoder #1097 : 最小生成树一·Prim算法1.利用邻接矩阵存储点与点之间的距离,例如:u -> v 距离为20,那么dist[u][v] = 20;2.从起点出发,利用mincost[i]记录到第i个点的距离,并且将mincost[起点] = 0,其余赋值为INF3.贪心的将距离集合(这里的集合是一个假想状态,可以认为是更新过的最短距离的点的集合)最近的点u加入集合,然后将used[u]

2020-09-15 16:59:16 357

原创 dijkstra堆优化+链式前向星的例题

dijkstra堆优化+链式前向星的例题一.Invitation Cardspoj - 1511 Invitation Cards1.题意在一个有向图中,计算从1到n中每个结点的最少费用,然后再求n个结点(2~n)到1的最少费用2.分析从第一个结点到各个结点的最少费用 ——> 单源最短路径从各个结点到第一个结点的最少费用 ——> 反向建图 + 单源最短路径所以用 反向建图 + 两次dijkstra3.代码#include <stdio.h>#include &l

2020-09-12 16:01:49 244

原创 链式前向星模板+dijkstra堆优化模板

链式前向星模板题+dijkstra堆优化一.链式前向星1.链式前向星的复杂度链式前向星的构造类似于静态建立邻接表,其复杂度只与边数e有关 – 时间复杂度:O(e),空间复杂度:O(e)。2.链式前向星的变量struct edge{ int to, dis, next;};//to : 起点的编号 dis : 起点到终点的距离 next : 起点相同的上一条边的编号edge e[maxn];//记录边的信息int head[maxn],dis[maxn],cnt;//head[

2020-09-12 00:47:51 286

原创 树状数组

树状数组树状数组利用二进制,删掉线段树中不需要的点,再把剩下的节点对应到数组中。一.时间复杂度与树状数组的优劣树状数组的查询与修改时间复杂度都是O(logn),且它的常数系数比线段树小,代码量也比线段树少得多。树状数组能解决的问题,线段树都能解决,但是线段树能解决的问题,树状数组却不一定能解决,其功能比线段树要差一些。二.树桩数组的实现过程蓝色代表区间覆盖长度,橙色代表初始数组数值,tree[4] = a[1] + a[2] + a[3] + a[4],tree[1] = a[1];1.取出

2020-08-19 12:01:43 169

原创 利用线段树解决RMQ问题

线段树 – 支持动态查询区间最值问题一.时间复杂度与适用场景线段树是用O(n)的时间建树,然后每一次查询都是O(logn)的时间复杂度,所以他更适合n大m小的RMQ问题(数值多,但是查询次数少)同时线段树支持修改节点上的值,是允许动态查询的一种方法。二.线段树的具体实现过程1.建树 – build线段树的建树操作实际上就是叶子节点 = 初始的值,然后从下到上分别取左右儿子中最小的那个的值来更新树节点的值就好了。黄色代表树的节点,黑色是该节点的值,蓝色的长度代表覆盖区间,例如tree[4] =

2020-08-19 11:07:32 415

原创 利用ST表解决RMQ问题

ST表 – 查询静态区间最值问题一.与线段树比的优缺点线段树可以O(n)的时间建树,O(logn)的时间复杂度情况下查询区间最值,但是ST表可以在O(nlogn)的时间打表,O(1)的时间复杂度下静态查询区间最值。当查询次数多且静态查询的情况下,选择ST表来做区间最值查询更合适。二.ST表的具体实现过程1.预处理预处理也是一个利用动态规划打表的过程。①定状态:a[ i ] : 初始数组;f[ i ][ j ] :第 i 个数起连续的 2j 个数中的最大值;②初始化:f[ i ][ 0 ] =

2020-08-18 00:00:07 187

原创 Codeforces Global Round 10

A、B、C、D四道题题解一.A题A题题目链接(1)题意:有t组测试数据,每组测试数据有n个数,可以选择第i个数 a[i] 且 a[i] != a[i+1],那么就可以把这两个数加起来,得到一个新的值放到当前位置。例如:[7 3 4 7] ,当选择i = 2时候 a[2] = 3,a[3] = 4 -> [7,7,7]求数组的最短长度是多少?(2)题解:每次操作都能使数组位数-1,只有当出现n个数字都是相同的时候,就没办法进行上面的选择操作,即数组位数始终只能是n;其余情况

2020-08-17 11:46:00 179

原创 Educational Codeforces Round 93

A、B、C、D四道题题解一.A题A题题目链接(1)题意:有t组测试数据,每组测试数据有n个数,且这n个数按升序输入,问这组数据里面能不能选出三个数,使他们不能凑成三角形,能就输出三个数的位置,不能就输出-1。(2)题解:三角形的特性是两边之和大于第三边,两边之差小于第三边。所以我们直接判断最大的差与剩下最小的数的关系,即a[n] - a[1]与a[2]的关系,假如a[n] - a[1] < a[2]的话,说明这n个数的差距不大,并不能出现两边之差大于等于第三边,两边之和小于等于第三边的情

2020-08-15 12:07:25 207

原创 codeforces div2-- #664

A、B、C三道题题解一.A题A题题目链接(1)题意:有t组测试数据,每组数据有四个字符代表r、g、b、w的数量,同时转变规则如下:r(-1) + g(-1) + b(-1) -> w(+3) ,即一个红色+一个绿色+一个蓝色可以变成三个白色问能否通过一些转变,使rgbw能够组成回文串?(2)题解:首先我的想法是不管怎么变换,rgbw的总量是不变的;奇偶回文串的处理方法也不同,需要单独分开讨论。先计算出四个色的数量是奇数还是偶数,然后总量为偶四个色的数量都不能为奇

2020-08-13 11:00:11 151

原创 codeforces div2-- #663

A、B、C三道题题解一.A题A题题目链接(1)题意:t组测试数据,每组测试数据给出一个n,将1~n这些数排列组合,当ai | ai+1 | …… | aj >= j - i + 1,即区间[ i , j ]的或运算 >= j - i + 1。(2)题解:根据样例和或运算的性质(只要有一个为1就为1),所以其实直接按照顺序输出就好了。(3)代码:#include <stdio.h>#include <string>#include <vector

2020-08-10 10:44:54 324 1

原创 codeforces div2-- #662

A、B、C三道题题解一.A题A题题目链接(1)题意:t组测试数据,每组数据有n*n个格子的棋盘,最初都是没颜色的,按照国际象棋的摆法填满整个格子,每次可以选择一种颜色,并且上下左右四个面,至少有一个面旁边有颜色(初始化时候,可以挨着棋盘的边界布置颜色)(2)题解:多画几个格子的图后就会发现,除了1*1的棋盘是1步,2 * 2的棋盘是两步之外,其他的棋盘都可以由这两个得到。例如:3 * 3的棋盘在边界填了一次之后,我们忽略掉最外围的格子(因为肯定一次就可以填满,所以我们主要看里面的格子是什么状态

2020-08-08 15:39:03 191

原创 各种各样的初始化

各种各样的初始化一.memsetmemset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值1.头文件头文件:string.h2.代码//对整型数组初始化为0int main(){ int a[10]; memset(a,0,sizeof(a)); //对二维数组a[][],也是同样的初始化方式 for(int i = 0; i < 10; i++) printf("%d %d\n",i,a[i]); return 0;}/*输出:

2020-08-03 22:42:54 327

原创 codeforces div2-- #659

A、C两道题题解一.A题A题题目链接(1)题意:t 组测试数据,每组数据有 n 个数 ai,代表着 si 行字符串与 s(i-1)行字符串有多少个 ai 相同前缀字符每组测试数据输出 n + 1行字符串,第二行开始与前一行有 ai 个相同前缀字符(2)题解:第 i 行的字符串的长度应该是 max(ai,a(i+1))决定 ,利用一个str数组来存储字符的变化情况,初始化为全部相同字符所以第一行先输出一个全部相同的字符串,并且长度为最长,例如:aaaaaaa 方便后面输出从第二行开始,每一

2020-07-30 18:09:41 254

原创 codeforces div2-- #658

A、B、C1、C2、D五道题题解一.A题A题题目链接(1)题意:诉你两个个字符串 a , b。 字符串a的长度是 n ,b的长度是 m ,求两个字符串的最短公共子串子串:一个原字符串删掉一些元素之后组成的新字符串(2)题解:两个字符串有两个以上相同的公共字符,那么一定会存在一个长度更少的为 1 的字符串,所以我们就找到一个相同字符就是最短公共子串(3)代码:#include<iostream>#include<cstdio>#include<memory.

2020-07-29 21:10:21 143 1

原创 codeforces div2-- #657

A、B、C三道题题解一.A题A题题目链接(1)题意:给你t组测试数据,每组数据第一行n代表第二行输入的字符串的长度,‘?’作为通配符出现,可以替换成任何一个字符,问你有没有办法凑出字符串中有且仅有一次出现子字符串 “abacaba”,像“ababa”这样的就是出现了两次“aba”,即两个子字符串允许有重叠部分(2)题解:原串中已经有一个 “abacaba” ,直接输出yes,并把 “?” 改成不会影响结果的字母,例如 ‘d’;原串中已经有多个 “abacaba” ,直接输出no在构造满

2020-07-28 16:58:05 168

原创 快速幂运算

快速幂的运算一.为什么需要快速幂在我们求幂运算的时候,一般的朴素算法也就是o(n)的时间复杂度//o(n)的时间复杂度来求幂运算for(int i = 1; i < n; i++){ ans = ans * x;}但是,在我们求的幂方很大的时候就会浪费时间,这个时候就需要用到我们的快速幂,一种o(logn)的算法。二.快速幂的实现原理快速幂是如何实现的呢?我们可以利用我们的二进制,来把我们的幂方化成如下形式例如:x4 = (x2)2进而推导出xn = (x2)……的形式这

2020-06-03 19:20:45 395

原创 详解并查集

并查集并查集可以说是判断图中的两个元素是否属于同一个连通分量之中一.并查集是什么?并查集可以用来管理元素分组的情况,也就是并查集可以高效合并两个元素,也可以判断两个元素是否属于同一个组现在有一堆元素,当你每次查询某两个元素是否属于一个集合的时候,一般来说数据量很大,每次需要花费很多的时间。而并查集利用树结构就能够很高效的查找到元素的祖宗节点是否是一样的,从而来判断是否属于同一个集合。二.并查集的操作1.初始化我们有n个元素,每个元素各属于自己的这个集合,所以有n个节点且没有边连接。2.合并

2020-05-26 22:12:50 195

原创 前缀和与差分

前缀和与差分在求区间和的操作上面,一般都需要o(n)的时候复杂度来计算,那么如何快速得到子数组的

2020-05-26 12:36:56 165

原创 最大子序和(C语言代码)

最大子序和力扣上的—53.最大子序和一.题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。二.暴力解法利用双重for循环来求解每个连续子数组的值;1.分析(1)数组下标012...

2020-05-03 20:56:22 1890 4

原创 二叉树学习笔记

二叉树学习笔记一.什么叫做二叉树及其特殊形态二叉树是每个结点最多有两个子树的树结构。其子树通常被称作“左子树”和“右子树”。二叉树的五种基本形态:①.空集②.只有一个结点③.只有左子树④.只有右子树⑤.左右子树都存在两种特殊形态的二叉树为:1.满二叉树一根深度为k且有2k-1个结点的二叉树称为满二叉树;也就是说**二叉树上只有最后一层无左右子树之外,其余结点的左右子树都存在,**...

2020-04-27 22:16:14 1040

原创 位运算符以及他们的用途

位运算符以及他们的用途C语言中的6个位运算符位运算的实用一.位运算符1.& ——按位与运算"&"是双目运算符(双目运算符就是有两个操作数),只有当二进制对应位上都是1的时候结果才为1。aba&b1111000100002.| ——按位或运算“|”是双目运算符,只有当二进制对应位上有一个为1,...

2020-04-24 12:51:22 2445 1

原创 题目中遇到的随笔

题目中遇到的随笔里面可能啥都会出现,遇到就写点1.乘积尾零一.乘积尾零一般求一堆数相乘的末尾有多少个零的时候,只需要求出这堆数有多少个2和5的因数,在求一个min就好了。这是数论的知识:一个因数2与一个因数5相乘,会在乘积的末尾增加一个0所以面对问末尾有多少个零的时候只需要min(因数2的个数,因数5的个数)就好了,并不需要傻傻的去真算这些数相乘的结果然后再来数末尾有多少个0.例如...

2020-04-19 16:43:18 156

原创 阶乘(高精)

阶乘(高精)一.什么是阶乘一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。即5!=5 * 4 * 3 * 2 * 1。二.“普通”的阶乘阶乘的代码很好写,就如同下面一样;#include<stdio.h>#include<string.h>typedef long long ll;int ...

2020-04-19 16:20:15 1434 4

原创 大整数乘法(代码+注释+解析)

大整数乘法(高精)一.分析当整数大到没办法用int,long long这些数据类型解决的时候,就需要用字符串模拟高精。1.输入//首先创建两个字符串char s1[N],s2[N];//输入需要做乘法的两个大数scanf("%s %s",s1,s2);2.把字符串转化为整型这一步是为了方便后面的计算,因为利用字符串的输入,个位在最后一位元素,所以把字符串首尾互换(即把个位...

2020-04-17 11:06:32 2593

原创 字符串的模式匹配(暴力+KMP+Rabin-karp)

字符串的模式匹配(暴力+KMP+Rabin-karp)给定两个字符串–text[]数组和pattern[]数组txet:主串;pattern:模式串;在主串中查找是否存在模式串,如果查找成功就输出第一个字符的数组下标,不成功就输出-1一.暴力求解1.思路给出两个字符串:itAABCBAjpABCi ...

2020-04-10 00:49:26 322

原创 最小生成树的算法(kruskal算法与prim算法)

最小生成树一.什么是最小生成树假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路。这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网。在每两个城市之间都可以设置一条路线,相应的都要付出一定的经济代价。要考虑使经济代价最小,那么我们需要做以下的考虑:1. 将每个城市看作为一个点,城市和城市之间的通信路线看作边,经济代价就是边上的权值,以此来构造连通图2...

2020-03-29 23:23:37 1556

原创 第九届蓝桥杯B组第六题--递增三元组(C语言)

第九届蓝桥杯B组第六题–递增三元组(C语言)一.比赛题目1.题目要求给定三个整数数组A = [A1, A2, … AN],B = [B1, B2, … BN],C = [C1, C2, … CN],请你统计有多少个三元组(i, j, k) 满足:1 <= i, j, k <=NAi < Bj < Ck2.输入与输出输入:第一行包含一个整数...

2020-03-29 15:15:38 1697

原创 二分查找(折半查找)的代码与分析

二分查找(折半查找)以下包括这几个内容二分查找分析二分查找代码二分查找拓展——类似于lower_bound() 、upper_bound()的C语言代码实现一.二分查找1.顺序查找顺序查找的过程为:从表中第一个记录开始,逐个进行记录的关键字和定值进行比较,如果关键字和定值相等,就表示查找成功;但是假如直至最后一个关键字都没有和定值匹配的,那么就是查找失败。顺序查找在最坏...

2020-03-29 14:36:42 314

原创 蓝桥杯--算法训练 Hanoi问题

蓝桥杯–算法训练 Hanoi问题一.比赛题目1.题目要求如果将课本上的Hanoi塔问题稍做修改:仍然是给定N只盘子,3根柱子,但是允许每次最多移动相邻的M只盘子(当然移动盘子的数目也可以小于M),最少需要多少次?例如N=5,M=2时,可以分别将最小的2个盘子、中间的2个盘子以及最大的一个盘子分别看作一个整体,这样可以转变为N=3,M=1的情况,共需要移动7次。2.输入与输出输入:  ...

2020-03-25 11:40:12 1014

原创 hanoi塔(汉诺塔)--C语言

hanoi塔(汉诺塔)–C语言一.什么是hanoi塔汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。即规则:1.每次只能移动一个圆盘;2. 圆盘...

2020-03-24 23:18:35 3280

原创 蓝桥杯--算法训练 筛选号码

蓝桥杯–算法训练 筛选号码一.比赛题目1.题目要求有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。问最后留下的是原来第几号的那位。  举个例子,8个人围成一圈:  1 2 3 4 5 6 7 8  第1次报数之后,3退出,剩下:  1 2 4 5 6 7 8 (现在从4开始报...

2020-03-23 21:23:40 436

原创 蓝桥杯--算法训练 比赛安排

蓝桥杯–算法训练 比赛安排一.比赛题目1.题目要求设有有2n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n– 1天内每个队都与不同的对手比赛。2.输入与输出输入:  输入文件matchplan.in共一行,输入n的数值。输出:  输出文件matchplan.out共(2n– 1)行,第i行输出第i天的比赛安...

2020-03-22 22:47:49 1226

原创 C语言快速排序--qsort函数

C语言快速排序–qsort函数一.什么是qsort函数qsort函数是C语言编译器函数库自带的快速排序函数。其包含在#include<stdlib.h>头文件里面,所以在使用的时候需要加上该头文件。二.qsort函数的时间复杂度因为其本身还是快速排序,所以时间复杂度仍然是O(nlongn)(在洛谷做题的时候,感觉它还是比传统的快排要更快,传统的快排最后三个会TLE,但是使用...

2020-03-21 00:46:37 5167 5

原创 蓝桥杯往届真题及基本练习

蓝桥杯往届真题及基本练习(正在做)2.等差素数列题目:2,3,5,7,11,13,…是素数序列。类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。这是数论领域一项惊人的成果!有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:长度为10的等差...

2020-03-09 21:12:14 2068 1

空空如也

空空如也

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

TA关注的人

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