自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021第十二届蓝桥杯C/C++B组省赛 第一场 部分题目总结

试题A:思路:考计算机基础知识bit:位,又名比特,缩写是b,是计算机中最小的数据单位,其实就是0,1这样的二进制位Byte:字节,缩写是B,是计算机文件大小的基本计算单位,一个字符是1Byte,如果是汉字,则是2Byte1Byte=8bit1Byte=8bit(1B=8b) 1个字节=8位,即一个字节由8个二进制位构成1KB=1024Byte1MB=1024KB1GB=1024MB1TB=1024GB所以本题:1个32位二进制数占4个字节25610241024/4=6710886

2022-04-08 20:29:55 1330

原创 蓝桥杯基础数论

分解质因数模板每个合数n都可以写成几个质数相乘的形式,其中每个质数都是这个合数n的因数,把一个合数n用质因数相乘的形式表示出来,叫做分解质因数n中最多只包含一个大于根号n的质因子例如:30=2x3x5,分解质因数只针对合数,对于质数只能表示为1和它本身,如:17=1*17代码:#include<iostream>#include<algorithm>#include<cmath>using namespace std;long long int n;i

2022-04-08 20:27:37 847

原创 AcWing 519 跳石头(二分)

跳石头思路:其实看到最短距离的最大值,就可以想到用二分去做,但是还是无从下手,不知道二分什么,感觉这个题对于我来说还是有些困难,自己去做还是做不出,不过看了题解也能通透不少首先这个跳跃距离的区间它是单调递增的,然后我们其实可以以这个距离为区间去枚举最短的跳跃距离x,然后去检查x的合法性。我们就把x看作最短的跳跃距离,然后以这个最短的跳跃距离去移动石头,我们判断两个石头之间的距离,如果这两个石头之间的距离小于x,那我们就需要把这个石头给移走,因为x已经是最短的了,不可能出现比x还短的,搞一个计数器nu

2022-04-02 22:29:46 498

原创 Acwing730 机器人跳跃问题(二分)

机器人跳跃问题思路:假设初始值能量为E,往高处跳的能量变化为:E-(H(k+1)-E)=2E-H(k+1)往低处跳的能量变化为:E+(E-H(k+1))=2E-H(k+1)E越大,能量变化越大,所以具有单调性如果我们找到一个符合题意的E,即那个至少的能量E,这时候E的左边,全部不符,E的右边全部符合,可知具有二段性所以我们考虑二分左边界设置为0右边界具体设置为多少,需要我们去思考一下如果我们假设右边界为建筑物的最高值maxh则2E-a[i]>=0是一定的,而所有建筑物的高度

2022-04-02 11:29:53 340

原创 AcWing789. 数的范围(整数二分板子)

数的范围思路:记板子,一个超级行的板子在单调递增序列中查找大于等于X的数中最小的一个(即X或X的后继)//在单调递增序列中查找大于等于X的数中最小的一个(即X或X的后继)int leftCheck(int x) { int l = 0; int r = n - 1; while (l < r) { int mid = (l + r) >> 1; if (a[mid] >= x) { r = mid; } else { l = mid + 1;

2022-04-01 21:23:08 192

原创 蓝桥杯C/C++B组省赛日期类问题汇总

蓝桥2017第八届省赛第七题 日期问题思路:暴力枚举从1960年1月1日到2059年12月31日的所有合法日期,然后拆分出年月日,如果符合题目中的三种情况之一(年/月/日 月/日/年 日/月/年)的输出即可#include<bits/stdc++.h>using namespace std;int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int check(int year, int month, in

2022-03-31 00:17:19 1651

原创 N - Select Mul(next_permutation)

N - Select Mul思路:当成字符串输入,先用C++的next_permutation函数找出这个它的全排列,对于每个全排列用暴力分成两段求积(用stoi函数把字符串转成10进制),找出最大的即可代码://https://vjudge.net/contest/485999#problem/N//C++全排列函数 next_permutation//枚举n位数的全排列//对每个全排列暴力分成两端求乘积,找出最大值即可//stoi函数将字符串转成整数输出#include<bits

2022-03-28 11:44:46 1115

原创 C++ 全排列函数next_permutation

概述C++的STL提供了两个用来计算全排列的函数,分别是next_permutation和prev_permutationnext_permutation是返回大于当前排列的所有排列方式,prev_permutation是返回小于当前排列的所有排列方式在使用这两种函数之前,需要先对序列进行排序考虑三个字符{a,b,c}所组成的所有序列这个序列有6个可能的组合,abc, acb, bac,bca,cab,cba 这些排列组合根据less-than操作符做字典顺序的排列用例1.输出序列{1,2,3

2022-03-28 10:45:45 1586

原创 蓝桥2017省赛 k倍区间(前缀和+简单数论+分类讨论)

k倍区间一开始想的还是暴力枚举,但是自己知道会超时,所以没有去写,后面看了别人的代码,用的是前缀和,其实前不久用了蛮多次前缀和,但是这一次没有想起来以后看到有关区间和的要首先想到能不能用前缀和去处理这个题不仅是前缀和,还夹杂了数论的一点简单知识要求一个区间的和为k的倍数,前缀和处理后,我们记这个区间为sum[i]-sum[j],但是如果直接这样判断是否为k的倍数的话,还是要去枚举j.所以还是会超时由(sum[i]-sum[j])%k=0得到sum[i]%k=sum[j]%k这时候就想到开一个

2022-03-24 16:53:26 151

原创 蓝桥2017省赛 分巧克力(二分)

分巧克力分析:一开始想到的是暴力枚举,枚举切割下来的巧克力的边长a,这时候要解决的问题就是一个长方形巧克力,最多能切出多少块正方形巧克力,即为(长方形的长/a)*(长方形的宽/a),不难看出,这个做法的复杂度高达10^10,TLE二分优化,时间复杂度降为nlog2n超时的暴力做法:#include<bits/stdc++.h>using namespace std;struct node { int w; int h;} a[100000 + 10];int b[100

2022-03-24 10:56:56 349

原创 PyTorch自动微分

PyTorch自动微分大纲requires_gard属性tensor.backward()后向传播grad属性自动微分反向传播的案例detach剥离tensordetach注意点with torch.no_grad()pytorch中的torch,autograd.grad计算微分用法requires_gad属性torch,Tensor是包的核心类,如果将其属性requires_grad设置为true,则会开始跟踪对tensor的所有操作x=torch.arange(9).vie

2022-03-16 21:57:25 663

原创 Pytorch深度学习基础之Tensor

简介Tensor对象是一个任意维度的矩阵,但是一个Tensor中所有元素的数据类型必须一致。torch包含的数据类型和普遍编程语言的数据类型相似,包含浮点型,有符号整型和无符号整型,这些类型既可以定义在cpu上,也可以定义在Gpu上Tensor执行算数运算逐个元素自己相乘矩阵乘法tensor执行算数运算符的运算,是两个矩阵对应元素的运算。torch.mm执行矩阵乘法的运算import torcha=torch.tensor([[1,2],[3,4]])b=torch.tensor([[1

2022-03-16 14:51:12 2346

原创 matlab的基本使用

matlab中两个字符串的合并有两种方法(1) strcat(str1,str2,…,strn)strcat(“字符串1”,”字符串2")strcat(“字符串1“,“字符串2”,“字符串3”)(2)[str1,str2,str3…,srtn]或者[str1 str2 str3 … strn][“字符串1”,“字符串2”][”字符串1“ ”字符串2“]num2str ,将数字转化为字符串c=100num2str©disp([‘c的取值为’,num2str©])input函..

2022-02-28 19:39:52 399

原创 蓝桥题组总结

C/C++ B组蓝桥杯省赛第一题:跑步训练(5分)题目描述小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000 。如果小明跑步,每分钟损耗 600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0 ,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。分析:先求出每秒损耗的体力(600/60=1

2022-02-24 15:24:39 142

原创 蓝桥2019 后缀表达式

后缀表达式思路:如果m=0,即没有负号,全是正号,所有数直接相加即为最大值如果m不等于0,即有正号又有负号,需要分情况讨论第一种情况:如果全是正数:只有一个负号如1 11 2 3此时最大值是3+2-1=4负号的个数大于等于两个如1 31 2 3 4 5此时最大值是5-(1-2-3-4)=13又如0 91 2 3 4 5 6 7 8 9 10此时最大值是10-(1-2-3-4-5-6-7-8-9)=53可以发现,在全是正数的时候,先对这组数从小到大排序,

2022-02-22 22:28:16 322

原创 AcWing 每日一题

1776. 牛的基因组学分析:题目比较难读懂,先解释一下题意,拿题目的案例来说,奶牛存在斑点的位置数量是1,第一个位置,斑点牛的基因是A,G,G,非斑点牛的基因是AAA,因为在第一个位置,非斑点牛的基因有的,斑点牛也有,所以无法判断是否存在斑点,第二个位置,斑点牛的基因是A,A,G,非斑点牛的基因是C,C,C,所以非斑点牛的基因在斑点牛牛中是没有的,故第二个位置可以判断其他的位置是一样的道理所以我们可以推断,只要某个位置上非斑点牛的基因,在斑点牛里也有,那么就无法判断。对于斑点牛组每个字符串的某

2022-02-05 10:58:06 286

原创 AcWing每日一题

1789. 牛为什么过马路 I思路:枚举两个字母之间,只出现一次的字母就是有交叉ABCDDEEA,A与B和C有交叉所以直接暴力枚举,如果遇到两个相同的字母,则遍历这两个字母之间的所有字母,并且记录每个字母的个数,如果字母的个数为一,计数器个数加一//两个字母之间,只出现一次的字母,就是有交叉#include<bits/stdc++.h>using namespace std;int a[57];int b[57];int main(){ string s1;

2022-02-01 15:38:20 420

原创 AcWing每日一题

1801 蹄子剪刀布分析:暴力枚举六种情况,取最大值,比较容易想到#include<bits/stdc++.h>using namespace std;const int N = 101;int a[N];int b[N];//枚举int main() { int n; cin>>n; for (int i = 0; i < n; i++) { cin >> a[i] >> b[i]; } //枚举六种情况 /

2022-01-30 14:02:16 331

原创 AcWing每日一题

1813. 方块游戏分析:题目要求在一块板子的正反两面单词中选一面单词,这两个单词有可能有共同部分,因为题目要求,不管每个板子哪一侧朝上,都要组成n个单词,所有如果两个单词有共同部分,我们需要保留两个单词中个数多的那一个举个例子fox与box,需要保留f,b,o,x,即不同的部分都需要保留,相同的部分只选一次再举出一个例子,foox与booox,f与b需要保留,显然o要保留2个才能拼出foox,保留3个才能拼出booox,所以o需要保留3个,如果只保留2个,拼不出booox,违背题意,所以应该

2022-01-29 16:05:24 3097

原创 AcWing 每日一题

P1826 农田缩减分析:总体思路:遍历所有的 n 个奶牛位置,作为本次尝试卖掉的奶牛。取每种情况面积最小值,最终结果即为所求对所有横坐标和纵坐标进行排序,面积应该是横纵坐标最值的差相乘,因为要把最外面的奶牛也放到围栏里卖掉一个奶牛之后,围栏的面积为剩余所有奶牛围成的长方形面积,长、宽可以分别由剩余奶牛的 x,y坐标值的最值之差得到如果卖掉奶牛的横坐标或纵坐标落在上面的某一最值,去掉这个奶牛会对面积有影响如果卖掉的奶牛本身就不是上述的某一坐标最值,则卖掉它之后不会影响围栏的宽、高,也即无法减

2022-01-29 12:11:40 675

原创 AcWing 每日一题

P1875 贝茜的报复分析:一开始想暴搜,7的20次方TLE先算奇数的情况,三个数相乘为奇数,则这三个数分别都是奇数第一部分B+I+2S+2E,所以必须保证B+I为奇数,决定字母就是B和I,第二部分保证 G+O+E+S为奇数,决定字母是G,O,E,S,第三部分保证M为奇数,决定字母为M因为三部分的决定字母没有重复的,所以组成奇数的个数就是这三部分都为奇数的方案数相乘,遍历vector数组组成偶数的方案数就是总方案数-奇数的方案数#include<bits/stdc++.h>

2022-01-27 16:38:19 780 1

原创 AcWing每日一题

P1884 COW分析:方法一:前缀和预处理记录C和W的个数前缀和分别记录当前位置以及当前位置之前C和W的个数遍历到字母O,用O左边C的个数*右边W的个数即为COW出现的次数分别从C左边所有O中选一个和C右边所有W选一个组合,即为O左边C的个数乘O右边个数(排列组合中的乘法原理)代码:#include<bits/stdc++.h>using namespace std;int n;string str;long long int a[100000+10];lon

2022-01-27 14:05:13 550

原创 vue的生命周期

Vue的生命周期Vue实例有一个完整的生命周期,也就是从开始创建到初始化数据,编译模板,挂载DOM,渲染,更新,渲染,卸载等一系列过程,称为Vue的生命周期生命周期钩子:就是生命周期事件的别名主要的生命周期钩子函数:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script

2022-01-16 01:43:47 343

原创 2022/1/12 递归(dfs)

1.ACWing93. 递归实现组合型枚举分析:思路一:dfs+剪枝,限制方案内部每一个数从小到大保持升序选择,即保证每次新加的数大于前面一个数,开一个全局数组way[n],以题目为例,就是枚举三个位置,dfs中两个形参,当前枚举的位置和当前最小从哪个位置枚举,另外考虑到这种情况需要剪枝,三个位置中,枚举到第一个为4的情况,那么剩下来只有一个数为5,不满足个数3个,直接return就可以了,剪枝后速度快了差不多三倍。#include<bits/stdc++.h>using names

2022-01-13 16:52:57 161

原创 2021/1/10 递归与递推

1.AcWing 92. 递归实现指数型枚举分析:数据范围n<=15,一看就是指数型的复杂度,这种指数类型的复杂度一般就是dfs+剪枝,每个数字都有两种状态,选或者是不选,开一个数组记录状态,左分支为选了的,右分支为没选的,左右两边递归即可画出递归搜索树以n=3为例AC代码:#include<bits/stdc++.h>using namespace std;int n;const int N=16;int st[N];//记录状态//0表示未考虑,1表示没选,2表

2022-01-11 03:40:34 210

原创 LeetCode 278 LeetCode35

1.第一个错误的版本分析:第一个错误的版本的编号左边全是正确的,右边全是错误的,每次都依据左右边界找到中间位置,如果此位置是错误版本,就缩紧右边界,看看该位置左边还有没有错误版本,直到找到第一个错误版本,如果此位置不是错误版本,就证明错位版本的编号在此位置之后,所以继续搜索此位置之后的,缩紧左边界,最后返回的值自己手动检验一下,二分水题/* The isBadVersion API is defined in the parent class VersionControl. boolean

2021-09-11 17:06:19 82

原创 Java 网络多线程

二工区

2021-09-11 14:13:20 187

原创 LeetCode 34

在排序数组中查找元素的第一个和最后一个位置分析:有序数组,搜索一个数的左右边界让搜索区间两边闭合,right取nums.length-1,while的终止条件是left==right+1,其中应该用<=public int LeftSearch(int []nums,int target){int left=0;int right=nums.length-1;while(left<=right){ int mid=left+(right-left)/2;}}二分如何

2021-09-08 14:51:31 100

原创 洛谷P1229/czos 1432/洛谷1030

惭愧啊…今天补n天之前的题…1.P1229 遍历问题题解:已知二叉树前序和中序可以得到后序,已知前序中序也可以得到后序,但是已知前序后序得到的中序是不唯一的,比如说前序是ab后序是ba,可以确定a是根结点,如果b是a的左子树,前序:ab 后序:ba,如果b是a的右子树,前序:ab ,后序:b,a,所以中序不唯一的原因就在这儿,无法确定父亲结点的左右子树,再比如说前序是DEF,后序是EFD,根结点为D,但这时候的中序序列是确定的,D的左子树为必E,右子树为必F,为什么这时候的左右子树可以确定呢?因为

2021-05-23 11:43:18 250

原创 LCA最近公共祖先 Tarjan离线算法

纯手写的,感觉有点混乱。。

2021-05-19 14:12:39 116

原创 Dijkstra算法和SPFA算法的区别

Dijkstra算法和SPFA算法都可以用于求单源最短路,前者可以用小根堆进行优化,后者用就是用队列优化过的Bell-man Ford,下面说一说这两者的区别:Dijkstra算法是基于贪心和DP的思路,一开始先将所有点到原点的距离设置为无穷大,特别的是dis[s]=0,此处的s为原点,它是每次找到离原点最近的点,放入堆中(成为堆顶)并且标记,再以这个点为起点去更新与它相连的点,类似于bfs,而bfs具有短视的特点,它只能看到与它直接相连的点,这也就决定了Dijkstra算法不能处理负权图,假设第一次找到

2021-04-19 23:26:15 5303 5

原创 最小生成树 prim算法

在一个无向图中,生成树必须包含这个图的所有顶点,不能出现环路,顶点和顶点之间必须有路,而最小生成树就是这些生成树里权值加起来最小的。它的实现过程和Dijstra算法有些类似,基于贪心的策略,不同的是Dijstra算法找的是每次离原点最近的点,而Prim算法找的是离这颗树最小的点,而且Dijstra算法假如说求1到n的最小距离,不一定要包括所有的顶点,我只要找一条能从1通的n的路就行了,prim是要包括所有顶点的手动模拟:代码模板详见博客HDU 1863 板子...

2021-04-19 00:09:36 136

原创 HDU 1863 畅通工程

题目传送门分析:因为这题数据比较小,所以可以直接用邻接矩阵存图,SPFA算法和Dijstra在代码实现上差不多,但有一点需要注意的是dis[j]表示的不再是离原点最近的距离,而是离整棵树最近的距离#include<bits/stdc++.h>using namespace std;const int maxn = 200;int edge[maxn][maxn];int dis[maxn];int vis[maxn];int n, m;int inf = 0x3f3f3f3f

2021-04-19 00:08:11 106

原创 HDU 2066 一个人的旅行【SPFA】

分析:SPFA的一个板子题,注意是双向建边,还有是把0当作一个虚拟的起点,以后都把无穷大设成是0x3f3f3f3fAC代码:#include <bits/stdc++.h>using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 5e3 + 10;int t, s, d;struct EDGE { int next; int to; int w;} edge[maxn];int cnt = 0;in.

2021-04-18 18:48:29 82

原创 SPFA算法

spfa算法是Bellman-Ford的一个队列优化,朴素的Bellman-Ford算法中在执行每一次的松弛操作后,就会有一些顶点已经求到最短路,此后这些最短路的估计值就会一直保持不变,不再受后面松弛操作的影响,但是每次还要去判断是否需要松弛,所以浪费了时间于是聪明的数学家就发明了SPFA算法算法基本思路:1.设置一个dis数组不断更新各个结点到起点的距离,开始时只有起点的dis值设为0,其余全设为正无穷2.维护一个队列,保存待优化的结点(初始时只有一个原点),也就是dis值刚被更新的结点,自己变小

2021-04-18 18:41:49 189

原创 Dijkstra算法及堆优化

1.有向无环图的单源点最短路其实跟之前说的最长路是一样的思路:广搜(拓扑排序)+ DP如下图所示:2.一般图的单源点最短路Dijkstra(迪杰斯特拉)算法算法思路:每次找离起点最近的那个点,确认它的最短路径值(这个点的最短路必须已经确认了),拿这个点去更新与它相邻的点,不断重复这个操作,从离起点的距离一点一点扩展开,有种贪心+bfs的感觉举个栗子说说用Dijkstra求最短路的过程一开始将所有点到原点的距离设置为正无穷,从1号点出发,更新2号,4号,6号点到原点的距离,dis[2]=

2021-04-17 14:24:21 5496

原创 拓扑排序求最长路

洛谷 P1113 杂务题目传送门分析:有些杂务必须在另一些杂务完成的情况下才能进行,具有先后关系,可以想到拓扑排序,实际上是拓扑排序求最长路,最后必须要取时间最长的那个,因为要保证所有工作全部做完。大致思路如下:1.输入序号 杂物消耗的时间 完成该工作的各项准备工作用vector存下依赖于i完成后才能进行处理的杂物就是说准备工作在前,要完成的工作序号在后cin >> x; //工作序号cin >> e; //准备工作vec[e].push_back(x);//建图

2021-04-15 19:31:13 992

原创 嵌套map的用法【二维map】

1.定义map<int,map<int,int> > mp1;map<string,map<string,int> > mp2;map此时的value值也是一个map对象赋值:这是比较直接的赋值操作,相当于是一个二维数组赋值 mp1[1][2]=5; mp2["s1"]["t1"]=7; mp2["s2"]["t2"]=8; mp2["s3"]["t3"]=9; mp2["s4"]["t4"]=10;2.插入3.遍历for(

2021-04-11 15:31:18 3496

原创 蓝桥题组总结

10/15 剩下的题好像是写不出了,以后有时间再想想吧脑子不灵光就只能多动动手了1.A-1 (可用容器)

2021-04-09 13:26:31 133 1

原创 ly的排队问题--拓扑排序+优先队列

题目传送门分析:这题感觉和cf上第47周的题区别不大,裸的拓扑排序,但是多了个求字典序最小,所以考虑到优先队列,STL大法好!关键是菜鸡不会手动模拟啊。。先用一个计数器判断一共有多少个顶点,然后还是用vector建个图,设一个计数器t,所有入度为0的顶点入队,弹出并记录队首元素,队首元素弹出的同时,删去与之相连的边即减减之后检查与队首这个顶点相连的顶点有没有入度变成0的,如果有的话就入队列,如此重复,弹出一个队首元素计数器t加一,直到遍历完所有顶点证明没有环存在,并且依次输出这些结点(用一个数组记下来

2021-04-05 20:10:45 205

空空如也

空空如也

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

TA关注的人

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