自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数组模拟二叉搜索树

void build(int idx,int x){ if(a[idx]==0) a[idx]=x; else if(x>a[idx]) build(idx<<1|1,x); else if(x<a[idx]) build(idx<<1,x);}

2020-02-29 21:10:54 493

原创 ZUA_Coder天团假期欢乐赛总结【全】

写在前面:这次出题的时候其实很纠结,好久不见也不知道大家水平提高了多少,害怕出的题目难了很少有人做出来,又怕出的题简单了丧失了比赛的意义。下面我大致分析一下这套题。我们出题的时候我个人计划的是不能还像刚学完c语言那样,只要脑子快,for循环全能解出来。所以这次算法题占大多数。...

2020-02-29 18:13:14 3175

原创 不同路径 II

class Solution {public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { int m=obstacleGrid.size(),n=obstacleGrid[0].size(); vector<vector<...

2020-02-28 09:54:27 315

原创 最长有效括号

class Solution {public: int longestValidParentheses(string s) { vector<int>dp(s.size(),0); int maxn=0; for(int i=1;i<s.size();i++) { if(s[i]=...

2020-02-28 09:01:50 298

原创 最长回文子串

dp[i][j]存放的是[i,j]是否是回文区间dp[i][j]=dp[i+1][j-1]&&(s[i]==s[j])去除两端之间的子串是回文子串,且两端相等class Solution {public: string longestPalindrome(string s) { int maxn=0,len=s.length(); s...

2020-02-27 21:11:45 288

原创 圆圈中最后剩下的数字

如果开始圈子里只有一个人,就返回0;如果不是一个人,那么删去一个人后 状态变为dp【n-1,m】 ,原先 第m+1位置的人因为m没了坐在了第m的位置 并且从他开始编号为0 所以是m向0转移所以调用(dp(n-1,m)+m)%n【递推】class Solution {public: int lastRemaining(int n, int m){ if(n==1) ...

2020-02-27 20:27:47 358

原创 连续子数组的最大和

class Solution {public: int maxSubArray(vector<int>& nums) { int sum=0,maxn=-1000000; for(int i=0;i<nums.size();i++) { if(sum<0) sum=nums[i]...

2020-02-27 20:17:29 222

原创 字符串最大跨距

#include<bits/stdc++.h>using namespace std;int main(){ string s,s1,s2; int i=0; char a; while(cin>>a) if(a!=',') { if(i==0) s+=a; else if(i==1) s1+=a; else s2+=a; }...

2020-02-27 16:02:07 1069

原创 字符串移位包含问题

#include<bits/stdc++.h>using namespace std;int fun(string s,string t){ int len=s.length(); while(len--) { if(s.find(t)!=string::npos) return 1; s.push_back(s[0]); s.erase(s.begin...

2020-02-27 15:52:41 298

原创 把数字翻译成字符串

dp[i] 表示以第i位字符结尾的字符串 有多少种解码方式分为两种状态:1。第i位单独解码 那么dp[i]=dp[i-1];2。如果第i-1位和第i位可以组合 那么相对于前i-2位的字符串来说 就相当于加上了一个二位数此时dp[i]=dp[i]+dp[i-2];代码如下:class Solution {public: int getTranslationCount(s...

2020-02-25 17:41:26 205

原创 五种最短路算思路及其代码实现【全】

刚看完Acwing上面y总的最短路视频,过来写一篇博客总结一下,也希望能帮助到别人先上一张图,刚用这个画图软件,可能画的比较拙劣根据图片我们可以知道,最短路问题分为单源最短路和多源最短路。单源最短路:只有一个出发点。求出来的应该是一个一维数组,保存该点到各点最短距离多源最短路:有多个出发点,那么求出来应该是一个二维数组,每行表示一个上面的一维数组。首先说一下多源最短路把。Floyd算是...

2020-02-24 09:30:52 3487

原创 单调栈【完整思路+代码】

看到这道题,首先我们会想到的肯定是暴力模拟。外层循环i是每个数,内层循环j是从i-1到最开头,找第一个比i小的数。这样做的话,如果数据是10的5次方,那么双重循环时间是非常可怕的。然后我们来分析一下上面这个思路,看看有哪里可以优化。因为找的肯定是比他小且最接近的数,那么如果第2个数比第一个数小,对于第三个数来说第一个数肯定是没用的(因为第二个距离第三个数更近),而且对于第四个第五个以至于第n个...

2020-02-23 10:24:20 387

原创 数组模拟双链表【头插,尾插,中插,删除】

#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int e[N], l[N], r[N], idx;void init(){ r[0] = 1, l[1] = 0; idx = 2;}void add(int k, i...

2020-02-23 09:55:03 275

原创 数组模拟单链表【头插,中插,删除】

代码如下:#include<bits/stdc++.h>using namespace std;const int maxn=100010;int head,e[maxn],ne[maxn],idx,m;void add(int x){ e[idx]=x; ne[idx]=head; head=idx++;}void insert(int k,int x){...

2020-02-23 09:51:15 381

原创 马的遍历【洛谷】

常规BFS,可能唯一不同的就是方向不只是常规的上下左右,不过也好控制方向,具体看下面代码把。#include<bits/stdc++.h>using namespace std;struct xy{ int x,y;}node,Top;const int dx[4]={1,-1,2,-2};const int dy[4]={1,-1,2,-2};int a[401]...

2020-02-21 09:22:02 893

原创 约瑟夫问题【洛谷】

约瑟夫环有很多种解法,这里我提供一种数据结构,用队列来模拟。直接采用了STL里面队列的模板,看下面代码之前,跟我默念,STL大法好!!哈哈哈。大致思路:先把所有人都放进队列里面,然后从1开始出队,1出队再进队,这样1就从队首到了队尾,就这么一直循环,如果到了第m个就只出队不让他进队。这样队列里面人数越来越少,到最后就出完了,代码如下:#include<bits/stdc++.h>...

2020-02-21 09:13:43 577

原创 队列安排【洛谷】

思路:这个就是一道模拟二叉树的题。反正我是这么理解的。首先建立一个结构体数组,包含左孩子,右孩子,以及一个变量用来标记后面他是否被删除了。然后就是插入的时候先判断p(根据题目),判断完p之后还要判断k的左右孩子。举个栗子:比如说i为2,k为3,p为1.那么现在2要往3的右边插队,你就首先要判断3原先右边有没有数,没有就直接插,有的话就是吧3的右孩子赋给2的右孩子,然后把3的右孩子变成2....

2020-02-21 09:02:01 505

原创 二进制中1的个数【三种解法】

#include<bits/stdc++.h>using namespace std;int cnt(int b){ int res=0; while(b>0) { b=b&(b-1); res++; } return res;}int main(){ int n,b; cin>>n; for(int i=0;i<n...

2020-02-20 16:46:34 274

原创 最长连续不重复子序列

#include<bits/stdc++.h>using namespace std;int n,a[100010],s[100010],res;int main(){ cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0,j=0;i<n;i++) { s[a[i]]++; ...

2020-02-20 16:33:12 414

原创 L2-014 列车调度 (25分)【17行极短代码】

#include<bits/stdc++.h>using namespace std;int n,x;set<int>s;int main(){ cin>>n>>x; s.insert(x); while(--n) { cin>>x; auto it=s.upper_bound(x); if(it!=s.e...

2020-02-20 09:45:59 586

原创 L2-013 红色警报 (25分)

#include<bits/stdc++.h>using namespace std;const int maxn=5050;int n,m,k,a,b,c,cnt1,cnt2,f[maxn],vis[maxn];struct xy{int x,y;}node[maxn];int find(int x) {return x==f[x]?x:f[x]=find(f[x]);}...

2020-02-20 09:39:13 642

原创 L2-011 玩转二叉树 (25分)

#include<bits/stdc++.h>using namespace std;int n,cnt;vector<int>in,pre,level(1000000,-1);void levelorder(int root,int start,int end,int index){ if(start>end) return ; int i=star...

2020-02-19 17:35:13 1885

原创 L2-008 最长对称子串 (25分)【20行极短代码】

#include<bits/stdc++.h>using namespace std;int main(){ string s; getline(cin,s); string cnt="#"; int len=s.size(); for(int i=0;i<len;i++) cnt+=s[i],cnt+='#'; len=cnt.size(); int an...

2020-02-19 17:19:26 842 6

原创 L2-006 树的遍历 (25分)【极简代码】

#include<bits/stdc++.h>using namespace std;int n,cnt;vector<int>in,post,level(1000000,-1);void levelorder(int root,int start,int end,int index){ if(start>end) return ; int i=sta...

2020-02-19 15:49:54 488

原创 L2-005 集合相似度 (25分)(极短代码 STL)

STL大法好!!!大致思路如下:建立一个外核vector内核set的二维数组。然后每个set就代表着一个集合。接收数据后,比如查集合A和集合B,首先让nc=0,nt=B的大小。然后遍历A中数在B中找(用到find函数)如果能找到说明是共有的就nc++,没找到说明在并集中让nt++;代码如下:#include<bits/stdc++.h>using namespace std;...

2020-02-19 15:34:55 299

原创 最长上升子序列【线性DP】

#include<bits/stdc++.h>using namespace std;int n,m,f[1010][1010];char a[1010],b[1010];int main(){ cin>>n>>m; cin>>a+1>>b+1; for(int i=1;i<=n;i++) for(int j=...

2020-02-16 16:17:56 198

原创 最长上升子序列【线性DP】

在这里插入代码片#include<bits/stdc++.h>using namespace std;const int maxn=10010;int n,a[maxn],f[maxn];int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++...

2020-02-16 16:12:44 200

原创 数字三角形【线性DP】

#include<bits/stdc++.h>using namespace std;const int N=510,inf=1e9;int f[N][N],a[N][N],n;int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) cin>>a[i][j];...

2020-02-16 16:07:48 209

原创 P1449 后缀表达式【洛谷】

#include<bits/stdc++.h>using namespace std;stack<int>s;int t,x,y;char ch;int main(){ while(ch!='@') { ch=getchar(); switch(ch) { case '+':x=s.top();s.pop();y=s.top();s.po...

2020-02-14 16:53:34 265

原创 P1605 迷宫【洛谷】

#include<bits/stdc++.h>using namespace std;int sx,sy,ex,ey,tx,ty,n,m,t,g[6][6],ans;int dx[]={0,1,-1,0,0};int dy[]={0,0,0,1,-1};void DFS(int nx,int ny){ if(nx==ex&&ny==ey) {ans++;...

2020-02-13 15:21:44 213

原创 P1101 单词方阵【洛谷】

#include<bits/stdc++.h>using namespace std;int n;int u[]={0,1,1,1,-1,-1,-1,0,0};int v[]={0,0,-1,1,0,1,-1,1,-1};bool ma[101][101];char le[200],chess[101][101];bool dfs(int x,int y,char w,...

2020-02-13 15:08:57 277

原创 P1019 单词接龙【洛谷】

#include<bits/stdc++.h>using namespace std;const int maxn=100;int n,ans,used[maxn];string word[maxn],beginn;bool check(string s,string m,int k){ int lens=s.length(); for(int i=0;i<k;...

2020-02-13 09:04:48 237

原创 八皇后【洛谷】

#include<bits/stdc++.h>using namespace std;int a[1000],b[1000],c[1000],d[1000],n,s;void print(){ s++; for(int i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl; return ;}...

2020-02-13 08:45:05 275

原创 L2-026 小字辈 (25分)(DFS思路+极短代码)

首先建立一个二维动态数组,存储每个编号的孩子。建立一个一维数组用来记录每个编号的是第几代根据这个二维数组也能直接找到根结点的编号,然后从根节点开始深搜就可以了。代码如下:#include<bits/stdc++.h>using namespace std;const int maxn=100010;int n,a[maxn],x,root,ans,flag;vector&...

2020-02-12 10:05:03 708

原创 L2-020 功夫传人 (25分)(双解法 完整思路+极短代码)

首先捋一下题,给了一个初始值,然后没传一代就减少一点,如果是得到者就让他获得的功力乘以倍数,最后求得到者功力总和。那么也就是说我们需要找两个东西:1.得到者 2.得到者是第几代。思路一:建立一个二维动态数组,然后在输入的时候横坐标代表这个人的编号,这一行就存储它的徒弟的编号。如果是得到者的话就只存储它的倍数,顺便建立一个标记数组将对应编号标记为1(原先为0).这样接收完数据后。之间开始DFS...

2020-02-11 18:18:59 4102 4

原创 7-98 汉密尔顿回路 (25分)

#include<bits/stdc++.h>using namespace std;int n,m,k,g[210][210];bool vis[210];int main(){ cin>>n>>m; for(int i=0;i<m;i++) { int a,b; cin>>a>>b; g[a][b]...

2020-02-11 17:20:03 1075

原创 7-105 串的模式匹配 (25分)(strstr的应用 )

看网上题解大部分都是用的KMP,个人比较懒,看到这个题感觉依稀记得有一个函数可以用来找子串。strstr(s,t)函数,在s串中找子串t,如果没找到返回false,如果找到就返回剩下部分。正好和该题题意完美契合,事实证明掌握一些函数关键时刻有奇效,代码如下:#include<bits/stdc++.h>using namespace std;char s[1000100],...

2020-02-11 15:06:05 482

原创 7-67 任务调度的合理性 (25分)(拓扑排序+极简代码)

#include<bits/stdc++.h>using namespace std;const int maxn=110;vector<int>g[maxn];int n,in[maxn],k,x,cnt;queue<int>q;void topSort(){ for(int i=1;i<=n;i++) if(!in[i]) q....

2020-02-09 17:59:15 588

原创 7-66 哥尼斯堡的“七桥问题” (25分)(极简代码)

写在前面:虽然这就是一个典型的DFS板子题,但是讲道理,这道题还是比较坑的。因为题目上没有说欧拉回路是不能有奇数顶点的(当然,这确实是欧拉回路的性质,但是这对没学好离散的人很不公平啊),如果不考虑这个情况样例二就会输出1.。代码如下:#include<bits/stdc++.h>using namespace std;int n,m,flag,e[1001][1001],vi...

2020-02-09 17:27:12 918

原创 7-65 笛卡尔树 (25分)(非常规做法+完整思路+极简代码)

写在前面:看到这个题,感觉并不难。算是模板题。不过翻看了一下网上的题解,基本上全是常规的建立一个二叉搜索树,建立一个小顶堆(也可以用优先队列)。然后分别遍历判断。当然,我比较懒,就没去建树建堆。思路:首先建立结构体数组来存储每个节点的k1,k2,左右孩子编号。然后在接受数据的时候,用一个前驱数组pre[]来存储每个结点的前驱结点,不仅可以用这个数组找到根还可以用它遍历判断,这样就可以不用建树...

2020-02-09 17:21:59 425

空空如也

空空如也

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

TA关注的人

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