随笔分类 - 洛谷
摘要:一、题目描述 二、题目分析 很容易看出来这是并查集模板题 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int a[10000]; 4 int find(int u) 5 { 6 if(u == a[u]) 7 return a
阅读全文
摘要:一、题目描述 二、题目分析 看到这个题目的时候我就觉得这是一个有依赖的背包,可以用树形dp,但是我不会,就用并查集预处理+01背包就解决了 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int dp[11000]; 4 int
阅读全文
摘要:一、题目描述 二、题目分析 刚开始没怎么看懂题目,后面画着画着树就知道了这个原理,其实这个题目就是让我们求根据前序和中序所能得到的树最多有多少棵。而造成两个序列不同树的情况就是单子树的情况,因此我们需要数单子树的个数,答案就是2^n次方怎么数呢? 如果前序里的字符和后序里的字符相等,且他们的后一个和
阅读全文
摘要:一、题目描述 二、题目分析 根节点为第1层,然后根据每次输入建树,用bfs求解,或者建的时候直接数层数也行。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 struct node{ 4 int l; 5 int r; 6 }Tr
阅读全文
摘要:一、题目描述 二、题目分析 中序+后序推前序,不过推导的过程中出现了下标数错,尴了个大尬。。。。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 char midTree[110]; 4 char aftTree[110]; 5
阅读全文
摘要:一、题目描述 二、题目分析 就是一个构建树,在加上前序打印,水题一只。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 struct node{ 4 char date; 5 node *left = NULL; 6 node *
阅读全文
摘要:一、题目描述 二、题目分析 经典的中序+前序推后序,前面已经分析过了,直接交代码的。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 string P,M; 4 void printAft(int p1,int p2,int le
阅读全文
摘要:一、题目描述 二、解题思路 并查集+快速排序 快速排序把时间少的放在前面,因为要最少时间修好,一共有n个村庄,所以只需要n-1条边即可通路,利用并查集判断是否可以达到同一个村庄,相当于需要增加1条路,当路的条数等于n-1时,便修好了。否则如果在m组公路中无法修好,那么输出-1即可。 三、代码实现 1
阅读全文
摘要:一.题目描述: 二.解题思路: 简单快速幂和取余运算 三.代码实现: 1 #include "bits/stdc++.h" 2 using namespace std; 3 int main() 4 { 5 long long int a,b,p; 6 long long int ans = 1;
阅读全文
摘要:一.题目描述: 二.题目解析: 刚开始一直以为最多只有两个相同个输入字符串,后来意识到看错题了,就开始改,第一遍写重叠个数那个循环的时候从尾巴到头,全wa,第二遍写从头到尾,对三个T三个,第三遍写了个剪枝ac,这个题的思路其实是很简单的,只是实现的时候比较复杂,然后容易出错(调了两个小时)>0<!这
阅读全文
摘要:一.题目描述: 二.解题思路: 首先建立一个数组记录流星砸下的位置以及时间,当有相同地方砸下的流星时我们只取最小的那个时间,然后从0,0开始进行bfs即可,如果不能走了,说明Bessie逃不出去,如果他在走的过程中碰到了一个没有被砸过的点,那么这个点一定是花费最小步数的安全点。唯一需要注意的是,流星
阅读全文
摘要:一.题目描述: 二.解题思路: 刚开始用的打印图形的解法做T了一个点,后面意识到不需要打印图形那么麻烦的操作,直接用一维数组下标代表行号,值代表列。每次选择一列的时候,要判断是否符合。 条件有四个 1.和前面已放置好的皇后不处于同一行 及f!=i,这个条件不需要手动判断,因为你递归的时候已经是往下选
阅读全文
摘要:一.题目描述: 二.解题思路: 从1开始往下dfs就行了,但是每次循环的开始必须要大于等于前面选择的那个数就ok了。 三.代码实现: 1 #include "bits/stdc++.h" 2 using namespace std; 3 int a[10] = {0}; 4 void dfs(int
阅读全文
摘要:一.题目描述: 二.解题思路: 刚开始一直有个错觉,以为左右脑做个贪心就可以了,一交全wa,????,不信,再交一边,又全wa,然后我突然想到了以前学dp的时候,做过一个类似于求解数组分成两部分求和最小题目,这个应该就是那个题目的变形,然后我就开始上模板了,一顿cv,交上去莫名ac。 三.代码实现:
阅读全文
摘要:一.题目描述: 二.解题思路: 从第1层开始dfs,如果层数已经超过n了则返回,否则每次比较一下当前的苦度和酸度的绝对值,需要注意的是,该层有选择和不选两种情况,所以要进行两条递归。如果比答案小则更新。 三.代码实现: 1 #include "bits/stdc++.h" 2 using names
阅读全文
摘要:一.题目描述: 二.解题思路: 输入的时候先把各种装置存起来,再记录一下起点坐标,进行bfs,一到装置处就循环找到另一处装置,然后直到到达出口,每次到出口都更新一下到达的最小距离即可。 三.代码实现: 1 #include "bits/stdc++.h" 2 using namespace std;
阅读全文
摘要:一.题目描述: 二.解题思路: 简单bfs过即可 三.代码实现: 1 #include "bits/stdc++.h" 2 int n,m,sx,sy,fx,fy; 3 int mx,my,cnt; 4 int mp[15][15]; 5 int bk[15][15]; 6 int mv[4][2]
阅读全文
摘要:一.题目描述: 二.解题思路: 如果当前点是0的话跑一边bfs判断是否能到边界,如果能到边界,说明并没有形成闭合圈,反之则形成了,然后再跑一边bfs填颜色即可。 三.代码实现: 1 #include "bits/stdc++.h" 2 using namespace std; 3 int mp[35
阅读全文
摘要:一.题目描述: 二.解题思路: 从第a层一直dfs即可,不过需要注意的是判断如果大于当前已知答案的步数后要return,不然T两个点。 三.代码实现: 1 #include "bits/stdc++.h" 2 using namespace std; 3 int n,a,b; 4 int step
阅读全文
摘要:一.题目描述: 二.解题思路: 马在象棋中是走日的,所以根据这个特点可以写出八个方向,用bfs解决即可,需要注意的是,不需要每一个点都枚举,不然T两个点。可以跑一次就做完所有事情,然后为distance为0的就是不能到达的输出-1即可。 三.代码实现: 1 #include "bits/stdc++
阅读全文