自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣-无重复字符的最长子串(c++)

题目链接题目截图:基本思路:我们可以从中发现我们当我们开始的起点越靠后,与其发生冲突的终点越靠后,拿lf代表左边起点,rg代表右边终点时,若lf1<lf2,那么rg1<=rg2(这里是有一个等号的)。同时我们利用set来判断我们的窗口,也就是rg和lf之间的部分当中是不是有重复部分,若有删除起点,同时起点向后移动。函数实现代码:class Solution {public: int lengthOfLongestSubstring(string s) {

2021-04-19 19:43:00 163

原创 力扣(移除元素)c++

题目跳转链接题目大意:注意框住部分,题目允许我们改变数组的顺序。基本思路:用两个下标分别表示在此之前的数字没有值为val的,另一个是从后往前的不是val值的下标。代码:class Solution {public: int removeElement(vector<int>& nums, int val) { int lf,rg,sz=nums.size(); lf=0,rg=sz-1; while(lf<=rg

2021-04-19 11:28:59 148

原创 二叉树的建立与遍历

因为太懒了就直接上代码吧遍历方法包含前、中、后序遍历以及层次遍历。#include<iostream>#include<queue>using namespace std;typedef struct Btree { int val; struct Btree* lchild; struct Btree* rchild; Btree():val(0),lchild(nullptr),rchild(nullptr){}}node;int luo_time = 1;

2021-04-14 20:02:40 94

原创 字典序

题目:基本思路:既然是按字典序进行排列,即以1开头的数字必定在以2开头的数字前面,以2开头的数字必定在以3开头的数字前面。且数字字长相同的数字,短的是出现在长的后面的,例如:10先出现,100后出现。找出来了每一个以某一数字开头的数字且小于给出数字的个数之后,我们可以利用这个不断压缩范围,直至找到我们需要求的数字。剩下代码实现部分的讲解就在代码当中进行讲解。求以某一个数字开始并且小于某一个数字开始的数字个数方法:方法一:int getNum(int n, int k)//不大于n的以k为开始的

2021-04-10 15:32:56 183

原创 牛客网-小猿的依赖循环(dfs)

题目:**思路1:使用并查集让具有依赖的拥有同一个祖先,如果中间出现某两个人已经有相同祖先了,我们就可以知道产生了循环依赖。 **但是这个思路是错的,因为a对b有依赖不代表b对a有依赖,并查集却让a和b互相依赖了,所以并不能够这样做。思路2:使用dfs优先遍历搜索来查看是否产生了循环。注意事项:不能够直接dfs(0),即所有的未走过的节点都要进行一次dfs,即图中的连通图的dfs遍历方式。即会有一种情况产生:a、b、c之间没有产生循环依赖,且a、b、c都没有依赖d和e,但是d和e却产生了依赖。但是

2021-04-08 10:44:52 200

原创 蓝桥杯最大子矩阵(c++)

思路:利用前缀和将每一列进行处理:即第m行第n列的元素为第0行第n列元素至第m行第n列元素之和,然后就开始划分起点和终点,将其中的第i行至第j行的元素之和作为一个元素,相当于建立了一个新数组,只是这个数组的每一个元素都是原先数组的某一列元素的部分元素和。最后我们对新数组进行求最大子矩阵的操作,最终得到原数组的最大子矩阵。不会一维数组的最大子段和的可以点击下面的传送门。传送门完整AC代码:#include<iostream>#include<cmath>#inclu...

2021-03-13 23:44:58 671

原创 洛谷-最大子段和(c++)

思路:求出数组中以某一位为最后一位的子段和,最后依次遍历该求出的数组,找出其中的最大值,即为我们所求的答案。部分代码://x数组为输入的数组//这个for循环就可以求得以其中某一位为子段的最后一位的最大值。 for(int i=1;i<n;i++){ if(x[i-1]>0){ x[i]=p[i]+x[i-1]; } else{ x[i]=p[i]; } }完整.

2021-03-13 23:40:21 416

原创 蓝桥杯-国王的烦恼(c++)

问题描述:输入输出样例:思路:首先我们对桥进行排序(根据桥的时间排序,时间长的放在前面),然后遍历每一座桥,若桥刚好连接了两个不为同一祖先的两座城市,而且该桥的时间与我们每次更新的时间不一样时,(若存在两座桥的时间相同且刚好连接了跟上述说法中一样的两座城市,没有这一判断条件我们便会得到错误答案。)我们对答案加一,并且在此更新我们维护的时间。这也是为什么在开始阶段我们要根据每一座桥的时间来对桥进行排序的原因。注意事项:1.我们在判断两座城市是否是刚联通时(即判断的这座桥连接了这两座城市),我们应

2021-03-08 09:42:52 218

原创 洛谷-程序自动分析

题目描述:输入格式:输出格式:输入输出样例:输入样例1:221 2 11 2 021 2 12 1 1输出样例1:NOYES输入样例2:231 2 12 3 13 1 141 2 12 3 13 4 11 4 0输出样例2:YESNO思路:这个题是典型的并查集的题目,我们先处理所有的e=1的情况,将所有的相等的情况并在一起,再处理e=0的时候,当我们出现矛盾(即我们已经将某两个数字并在了一起,但是这两个是不能相等的)时,我们便输出NO

2021-02-05 17:01:39 269

原创 洛谷-关押罪犯

题目描述:S 城现有两座监狱,一共关押着 NN 名罪犯,编号分别为 1-N1−N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 cc 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并造成影响力为 cc 的冲突事件。每年年末,警察局会将本年内监狱中的所有冲突事件按影响力从大到小排成一个列表,然后上报到 S 城 Z 市长那里。公务繁忙的 Z

2021-02-04 21:16:44 173

原创 pta-模拟EXCEL排序

Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。输入格式:输入的第一行包含两个正整数N(≤10^​5​​) 和C,其中N是纪录的条数,C是指定排序的列号。之后有 N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,保证没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩([0, 100]内的整数)组成,相邻属性用1个空格隔开。输出格式:在N行中输出按要求排序后的结果,即:当C=1时,按学号递增排序;当C=2时,按姓名的非递减字典序排序;当C=3时,按成绩的非递减排

2021-01-26 21:30:38 291

原创 pta-还原二叉树

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5思路:只要中序的string还有数据(即size>0),我们便执行操作。并且记录最大的一个高度(高度从1开始记录)。最后输出我们求出的答案。#include

2021-01-26 10:44:54 707 2

原创 pta-修理牧场

农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L​i个长度单位,于是他购买了一条很长的、能锯成N块的木头,即该木头的长度是L​i的总和。但是农夫自己没有锯子,请人锯木的酬金跟这段木头的长度成正比。为简单起见,不妨就设酬金等于所锯木头的长度。例如,要将长度为20的木头锯成长度为8、7和5的三段,第一次锯木头花费20,将木头锯成12和8;第二次锯木头花费12,将长度为12的木头锯成7和5,总花费为32。如果第一次将木头锯成15和5,则第二次锯木头花费15,总花费为35(大于32)

2021-01-25 15:19:30 207

原创 pta-旅游规划

有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分

2021-01-24 15:06:06 473

原创 pta-汉诺塔的非递归实现

借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合汉诺塔问题的要求。输入格式:输入为一个正整数N,即起始柱上的盘数。输出格式:每个操作(移动)占一行,按柱1 -> 柱2的格式输出。输入样例:3输出样例:a -> ca -> bc -> ba -> cb -> ab -> ca -> c思路:(

2021-01-24 14:58:15 341

原创 短学期 质数筛

void prime(){ for(i=2;i<=500;i++) if(!b[i]) for(j=2;i*j<=1000;j++) b[i*j]=1;}//筛法依次去除2,3,4……的倍数的数,剩下的就是质数

2021-01-23 17:44:51 46

原创 pta-电话聊天狂人

原题链接:https://pintia.cn/problem-sets/15/problems/722思路:用map(map<string,int>)解题,使用map的查找函数进行判断是否已经存在该号码,存在加上一次,不存在加上该元素,并且赋值为1,最后再遍历两遍map,第一遍找出最大次数的号码,第二遍找出相同次数的号码个数,并且修改我们的号码(号码最小的并且是次数最多的)。易错点:不能在最后只遍历一遍map,同时修改“最大”次数和号码,因为在过程当中的次数并不是真正的最大次数,也不能修改

2021-01-23 17:43:06 221

原创 pta-Windows消息队列

原题链接:https://pintia.cn/problem-sets/15/problems/841原题AC代码:#include<iostream>#include<queue>using namespace std;typedef struct ORDER { string nm; int ji; bool operator <(const struct ORDER& a)const { //上面这行最后的const关键字需要加进去,否则会编译

2021-01-23 13:53:01 283

原创 天梯赛-玩转二叉树

L2-011 玩转二叉树 (25分)给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2

2021-01-14 15:39:02 226

原创 天梯赛-排座位

L2-010 排座位 (25分)布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:宾客1 宾客2 关系,其中关系为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。

2021-01-14 10:54:38 104

原创 天梯赛-树的遍历

题目:错误代码:#include<iostream>#include<cstring>#include<string>using namespace std;string p[35];void LXR(string zx, string hx,int c) { if (zx.size() > 0) { char ch = hx[hx.size() - 1]; p[c] = p[c] + ch; int f = zx.find(ch);

2021-01-13 15:00:06 202

原创 天梯赛-连续因子-整除光棍

原题网址:https://pintia.cn/problem-sets/994805046380707840/problems/994805138600869888#include <string.h>#include <stdio.h>#include <math.h>#include<iostream>using namespace std;bool is_prime(int n){ int i; for (i = 2; i <=

2021-01-03 14:43:40 136

原创 关于string的操作(更新中)

string 的find、erase、substr函数的基本操作:#include<iostream>using namespace std;int main() { string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int f = str.find("D"); string sub1 = str.substr(0, f); string sub2 = str.substr(f + 1, str.size() - f); cout <&l

2020-12-03 16:32:22 57

原创 树(努力更新中……)

二叉树:题目简述:输入:第一行输入一个节点数N下列N行每行输入一个节点的两个孩子节点,(所有节点data不一样)输出深度(最大)输入/输出样例:#include<iostream>#include<cmath>using namespace std;typedef struct Node { int depth, num; struct Node* lchild; struct Node* rchild; Node() { depth = 0, num =

2020-12-02 20:09:20 39

原创 状态压缩(位运算符)

c中共有6种运算符:1.& 按位与 2.| 按位或 3.^ 按位异或4.~取反 5.<<左移 6.>>右移1.按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。2.按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。3.按位

2020-11-16 10:47:44 155

原创 短学期 动态规划(背包、线性)

拓扑排序:queue<int>q;//priority_queue<int,vector<int>,greater<int>>q;//优先队列的话,会按照数值大小有顺序的输出//此处为了理解,暂时就用简单队列inttopo(){ for(inti=1;i<=n;i++) { if(indegree[i]==0) { q.push(i); } }

2020-07-18 20:35:58 88

原创 短学期 dp

求不上升序列长度和一个上升序列长度#include<iostream>#include<algorithm>using namespace std;int p[100010], t[100010], k[100010];int n;int main() { cin >> n; int i, len = 1, my_len = 1; ios_base::sync_with_stdio(false); for (i = 1; i <= n; i++)

2020-07-15 21:39:25 54

原创 短学期 背包问题

背包分为01背包,多重背包以及完全背包这三种基本模型,其他的背包问题都是从这3种背包中延申出来的。https://www.luogu.com.cn/problem/P1616(完全背包)完全背包的模板题面是这样的:设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以无限选取),使其重量的和小于等于M,而价值的和为最大。完全背包代码段: for(int i=1;i<=n;i++) for(int j

2020-07-14 21:57:25 49

原创 短学期 整数与除数

https://www.luogu.com.cn/problem/P1082(扩展欧几里得算法)// c++int ex_gcd(int a, int b, int &x, int &y) { if(b == 0) { x = 1; y = 0; return a; } int r = ex_gcd(b, a % b, x, y); int t = y; y = x - (a / b) * y;

2020-07-14 16:40:46 82

原创 短学期 分治

https://www.luogu.com.cn/problem/P1226(快速幂||取余运算)快速幂代码:int quickPower(int a, int b)//是求a的b次方{ int ans = 1, base = a;//ans为答案,base为a^(2^n) while(b > 0)//b是一个变化的二进制数,如果还没有用完 { if(b & 1)//&是位运算,b&1表示b在二进制下最后一位是不是1,如果是: ans *= base

2020-07-13 16:03:40 86

原创 短学期 线性复杂度优化 / 离散化

https://www.luogu.com.cn/problem/P1950#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define N 1007#define int long longusing namespace std;int n, m, now, ans;int high[N];signed main(){ //scanf("%l

2020-07-12 22:41:47 306

原创 短学期 前缀与差分

基础算法-差分与前缀和原创 Acm Algorithm ACM算法 4月23日差分与前缀和首先要说明的是这两种方法都是优化了对数组进行操作的时间复杂度,我们先来看两个问题。问题1:已知一个数组A的长度为n(n<=1e6),问数组A从i到j这个区间所有数的和的为多少(一共有k次询问,k<=1e6)?问题2:已知一个数组A的长度为n(n<=1e6),对数组A从i到j这个区间加或者减一个定值w(一共有k次操作,k<=1e6)。问操作后的数组中每个数的值为多少?前缀和对于问题1

2020-07-12 17:23:32 176

原创 短学期 基础数学问题

https://www.luogu.com.cn/problem/P1143(进制转换)windows下有个现成的itoa()函数,可以把int转成任一进制的字符串。有个现成的函数叫做strtol(),可以把任一进制的字符串转成long。用法:strtol(字符串,NULL,要转的进制),返回值就是结果。中的toupper函数。(toupper可以小写转大写)to_chars(字符串,字符串尾部指针,要转的值,目标进制)#include<bits/stdc++.h>using names

2020-07-11 07:24:00 76

原创 短学期 容器的学习

详细说明vector的网站:https://blog.csdn.net/baidu_15173959/article/details/48290805vector代码实例(部分函数):#include<iostream>#include<algorithm>#include<vector>using namespace std;bool cmp(int i) { if (i % 2 == 0) { return true; } else { re

2020-07-09 21:24:22 82

原创 短学期Day.6(搜索)

https://www.luogu.com.cn/problem/P1219(八皇后问题)#include<iostream>using namespace std;int n, a[1000], b[1000], c[1000], d[1000], s;void search(int i) { for (int j = 1; j <= n; j++) { if (b[j] == 0 && c[i + j] == 0 && d[i

2020-07-07 11:03:11 84

原创 Day.6(贪心)

https://www.luogu.com.cn/problem/P1090#include<iostream>#include<queue>using namespace std;int n, x, ans;priority_queue<int, vector<int>, greater<int> >q;int main() { cin >> n; for (int i = 1; i <= n; i++) cin

2020-07-06 10:35:33 57

原创 短学期Day.5(暴力枚举)

https://www.luogu.com.cn/problem/P1157(dfs)#include<bits/stdc++.h> //万能头using namespace std;int m,n,s[100]; //s[]用来标记数bool vis[100]; //vis[]表示一个数是否可以使用,1表示可以使用,0表示不能使用void dfs(int k) //dfs深搜{ if(k==n+1) //前n个位置都填过了 { for(int

2020-07-04 15:28:48 88

原创 短学期Day.4(排序)

https://www.luogu.com.cn/problem/P1923#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long n, k, a[5000010];int main(){ scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) sca

2020-07-03 19:23:49 88

原创 短学期Day.3(模拟与高精度)

https://www.luogu.com.cn/problem/P1045#include<iostream>#include<cmath>using namespace std;int P;long long a[510];long long POW2(int a){ long long res = 1; for (int i = 1; i <= a; i++){ res *= 2; } return res;

2020-07-03 09:07:24 115

原创 短学期Day.2(递推+dp+高精)

https://www.luogu.com.cn/problem/P1002#include<cstdio>#include<iostream>using namespace std;long long f[25][25];bool g[25][25];//用long long就可以了,爆不掉,不需要高精//x1为棋盘长度 y1为棋盘宽度//x2为马的横坐标 y2为马的纵坐标//g数组记录该点是否可走 f数组记录路线int main() { int x1, y1

2020-07-01 17:55:53 88

空空如也

空空如也

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

TA关注的人

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