ACM-ICPC/OJ/蓝桥杯/LeetCode
文章平均质量分 57
持续更新竞赛题解
m0rta1
优秀的判断力来自经验,但经验来自于错误的判断。涉及领域: Java后端开发/前端开发/PHP/Python/WEB安全/逆向+PWN/云计算
展开
-
PTA-天梯赛-练习集:L2-008 最长对称子串 (动态规划)
一、题目如下:二、解题思路:子问题:dp [ i ] [ j ] 是否为回文字符串。dp[ i ] [ j ] :从字符串的下标 i 到 j 的字符串;dp[ i ] [ j ] == 1 :该字符串为对称字符串;dp[ i ] [ j ] == 0 : 该字符串不是对称字符串;dp[ i ] [ j ] == 1 的前提:dp[ i + 1 ] [ j - 1 ] == 1 并且 str[ i ] == str[ j ];dp 初始化:标记 dp[ i ] [ i ] == 1;原创 2022-04-18 23:02:20 · 779 阅读 · 0 评论 -
PTA-天梯赛-练习集:L2-001 紧急救援 (迪杰斯特拉求最短路径并输出最短路径中经过顶点最多的路径)
一、题目如下二、解题思路:典型单源最短路径问题,但是题目除了求两点之间的最短路径,还要尽可能多的召集救援队数量。那么我们需要记录经过顶点最多的最短路径,即为所求。我们一般做最短路径题求出结果就行了。这道题恰好能练习如何输出最短路径的各个顶点,并且自定义选择输出最短路径是经过顶点最少的路径还是经过顶点最多的路径。三、代码实现:#include<bits/stdc++.h>using namespace std;const int N = 550;const int INF原创 2022-04-16 22:55:18 · 1019 阅读 · 1 评论 -
唯一分解定理(数论) - 第十一届蓝桥杯B组决赛C/C++ - 试题 C: 阶乘约数
一、 如题:二、解题思路:看到这道题,我最先想到的自然是暴力解法,先求 100 的阶乘的 ans,然后 ans 算有多少个正约数。但是显然这样做不行,想想 100 的阶乘可是非常大的, 计算机 long long 都装不下,所有这题暴力指定是没戏。既然这样那肯定是有什么数学方法来解这道题。约数的定义: 约数又称因数,整数A除以整数B(B≠0) 除得的商正好是整数而没有余数,我们就说A能被B整除,或B能整除A。A称为B的倍数,B称为A的约数三、实现代码:#include <bits/s原创 2022-03-30 00:03:46 · 834 阅读 · 0 评论 -
PAT 乙级 1016 C语言实现
非标准版:#include<stdio.h>#include<string.h>#include<stdlib.h>int main(void) { long A = 0, Da = 0; int B = 0, Db = 0, flag_A = 0, flag_B = 0, result; char A_[100], B_[100], A_flag[2], B_flag[2]; scanf("%d%d%d%d", &A, &Da..原创 2020-07-26 16:24:38 · 234 阅读 · 0 评论 -
PAT 1023:组个最小数 (C语言)
题目:解题思路:几个关键点:0 不能做首位顺序已经排好: 0~90后面的第一个数字始终要移到最前面具体分析请看注释代码实现:/* * Date : 20201001 * Author: XXW * */#include <stdio.h>#include <string.h>int main() { int numCount[10] = {0};int count; char charNum[10][50] = {"0",原创 2020-10-31 13:40:36 · 415 阅读 · 0 评论 -
PAT-乙级 1009 说反话(C语言)栈解法
前言网上基本都是c++ 栈写的这个题,这里提供一种c语言 栈解法题目:分析:这个反话不是逐个字符的反,而是单词反。可以把每一个字符串压入栈中,利用栈的先进后出来实现了,用的顺序栈。代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#define ERROR 0;struct Str { char Alphbet[81][81]; int top; int原创 2020-06-08 23:08:25 · 707 阅读 · 0 评论 -
PAT-乙级 数素数 1013 (c语言)
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>int main(void) { int test_num = 2; int flag = 0; // 1既不是素数也不是合数,所以test_num =2 int M=0, N=0; int target_num[1000] = {0}, i = 0; scanf("%d%d",..原创 2020-06-25 15:01:35 · 381 阅读 · 0 评论 -
PAT 乙级 Practice |(1008)C语言 --链表解法
前言:这段时间把数据结构第三章学完,想找几个题来巩固一下自己的知识点,以下这道题一眼看出用链表来写(题目要求:在不允许使用另外数组的前提下),正好来检验下自己链表学的怎么样。网上的基本都是c++,或者其他语言写的,没有看到C语言版本,以下是用C语言写的链表来解决这道题,如果有不足之处,请评论区留言。题目:代码展示:(解析看注释)#include<stdio.h>#include<string.h>#include<stdlib.h>struct原创 2020-06-07 15:24:19 · 315 阅读 · 0 评论 -
LeetCode 295. 数据流的中位数 [设计一种高效的数据结构计算动态集合的中位数]
如题:一、初次解题思路:利用二叉搜索树并维护每个节点及其子节点的个数size,不需要考虑排序问题,寻找中位数时通过size检索,但是二叉搜索树受限平衡性,时间复杂度平均O(log n), 最差情况是二叉树元素都在一边,复杂度为 O(n)。二、思路一代码实现:// 建立二叉搜索树的数据结构struct BSTreeNode { int val; int size; BSTreeNode *left; BSTreeNode *right; // 构造函数原创 2022-01-25 17:24:27 · 903 阅读 · 0 评论 -
深入理解并查集(Disjoint Set Union),并利用其解决相关问题
一、什么是并查集?首先字面意思是把相互联系的元素通过特定查询组成一个集合。规范化解释:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。二、并查集应用场景: 1. 图的连通性,可以用来判断哪些节点是连通的。也可以知道一个图一共能被分成几个相互独立的块。2. 区间类问题3. 连续子序列问题4. 经典最小生成树算法:Kruskal 算法5. 等等… 后期补充 总而言之原创 2021-11-17 00:26:55 · 2647 阅读 · 1 评论 -
LeetCode 215. 数组中的第K个最大元素(练习如何建堆并进行堆排序,大顶堆 & 小顶堆)
一、题目:二、 解题思路:这道题很容易,调用内置sort函数,或者自写10大排序算法中其中一种算法就能解决这道题。这里主要练习在不使用 C++ STL 模板 priority_queue 的情况下,纯手工建立优先队列(大小顶堆),然后进行堆排序做这道题。 在此之前极力建议看下这位博主写的文章 ???? 什么是大小顶堆? ,再结合我写的实现代码,就很好理解了堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它是不原创 2021-11-12 23:58:07 · 902 阅读 · 0 评论 -
LanQiao-ALGO-1007 印章 (DP 动态规划)
一、题目:输入案例:2 3输出案例:0.7500数据规模和约定 1≤n,m≤20二、解题思路:三、实现代码:#include<bits/stdc++.h>using namespace std;/* 动态规划五部曲: 一、定义dp数组 二、状态转移方程 三、数组如何初始化 四、遍历顺序 五、打印dp数组 * *//* * dp[i][j] 含义: 小明买了 i 张印章, 集齐 j 种印章的概率 * dp[1原创 2021-11-11 16:36:15 · 595 阅读 · 0 评论 -
LanQiao-ALGO-1004 无聊的逗 (动态规划: 0-1背包问题) -- (LeetCode 416. 分割等和子集 变种题)
实现代码:#include <bits/stdc++.h>using namespace std;// 如果两个子集的元素和相等时,返回nums总和除以 2,否则返回 0int getPartitionValue(vector<int> nums) { int n = nums.size(); if (n < 2) { return false; } int sum = accumulate(nums.begin(),.原创 2021-11-08 00:39:19 · 4374 阅读 · 20 评论 -
LeetCode 127. 单词接龙 (①超时做法-->②稍作优化-->③终极两端搜索法)
1、超时做法解题思路 beginword 每次只能变换一次字母,经过n次变换最后得到endword, 这 n 次得到的单词都必须在 wordlist 里面有。 这可以看出是个拓扑结构,每个单词的连接关系是每个字母一一对应,只有一个字母不相同即可相连,建立邻接表,找出最短beginword到endword路径即可实现代码:class Solution {public: // 判断两个单词是否只有一个字母不同 bool similar(string word1, string wo..原创 2021-11-07 17:26:48 · 179 阅读 · 0 评论 -
LeetCode 207. 课程表 (BFS && DFS 双解法)
方法一:入度表(广度优先遍历)解题思路:1. 统计课程安排图中每个节点的入度,生成 入度表 indegrees。2. 借助一个队列 queue,将所有入度为 0 的节点入队。3. 当 queue 非空时,依次将队首节点出队,在课程安排图中删除此节点 pre: * 并不是真正从邻接表中删除此节点 pre,而是将此节点对应所有邻接节点 cur 的入度 −1,即 indegrees[cur] -= 1。 当入度 −1后邻接节点 cur 的入度为 0,说明 cur 所有的前驱节点已经被 “删除”,..转载 2021-11-02 23:59:58 · 286 阅读 · 0 评论 -
LanQiao-ALGO-1005 数字游戏 (爆搜)
样例输入4 16样例输出3 1 2 4解题思路:一看到这道题,看不出有啥思路,看到 n 的取值范围为 0<n<=10, 直接暴力搜索,使用 C++ STL 全排列函数 next_permutation(arr, arr+size); 一一操作对比,算出结果等于sum则跳出循环实现代码:#include<bits/stdc++.h>using namespace std;int main() { int n, sum; cin>&.原创 2021-10-26 21:49:05 · 1771 阅读 · 0 评论 -
2021(ICPC)-Jiangxi_Hearthstone So Easy
输入样例:210 95 3输出样例plljfreesin题目大意:本题讲的是炉石传说抽卡游戏,原创 2021-10-25 23:54:43 · 1939 阅读 · 0 评论 -
2021(ICPC)-Jiangxi_Continued Fraction
输入样例:2105 381 114输出样例:4 2 1 3 4 21 0 114题目大意:连分数是如图形式的表达式,x,y 进行反转相除,并记录商,余数作为为下一次的分母,上一次的除数作为被除数,一直循环直到 分母为 0 (y==0) 则退出解题思路:模拟即可实现代码:#include <bits/stdc++.h>using namespace std;int main() { int m; cin>>m; wh.原创 2021-10-24 20:44:00 · 182 阅读 · 0 评论 -
2021(ICPC)-Jiangxi_It Rains Again (LeetCode 56. 合并区间 变种题)
输入样例:51 2 2 11 1 2 23 3 4 35 1 6 36 3 7 2输出样例:4备注:题目大意:假设在无限平面上的笛卡尔坐标系中,x 轴代表地面,天空中有 n 个雨幕(我们不考虑它们的厚度),每个雨幕都可以描述为一个片段,从 (x_1, y_1)并结束于 (x_2, y_2). 现在如果从无限高的天空开始下雨,我想让你告诉我x轴有多少单位不会下雨。为了简化问题,雨只能在落下时垂直移动。请注意,两个雨幕可以相互重叠和交叉,并且没有垂直放置的雨幕。解题思路:原创 2021-10-24 00:06:09 · 1722 阅读 · 0 评论 -
ZJU_1167 Trees on the Level (Hash 映射建树)
题目大意:解题思路:实现代码:/* * ZJU_1167 Trees on the Level * Date: 2021/10/20 * Author: xxw * */#include <bits/stdc++.h>#define MAX_NODES 14000 // 最大节点数using namespace std;vector<int> tree(MAX_NODES, 0); // 存放映射的数组int complete; // 树的完整性标.原创 2021-10-22 01:53:04 · 333 阅读 · 0 评论 -
牛客_acm_18307-小叶的巡查 (数学分析+深度优先+滚动数组迭代)
输入案例:51 2 21 3 12 4 52 5 4输出案例:135解题思路:dfs第一次找到首都到最远城市A,再最远城市A做一次dfs,找出离A城市最远的城市B,A->B的距离即是最远距离实现代码:/* * 牛客_acm_18307-小叶的巡查 * Date: 2021/10/20 * Author: xxw * */#include<bits/stdc++.h>#define N 25000 // 最大城市(顶点)数using name.原创 2021-10-20 20:07:34 · 225 阅读 · 0 评论 -
ZJU_1205 Martian Addition (大整数运算)
题目大意:原创 2021-10-20 01:53:26 · 151 阅读 · 0 评论 -
ZJU_1191-The Die Is Cast(深度优先搜索)
题目大意:解题思路:实现代码:/* * ZJU_1191-The Die Is Cast * * */#include <stdio.h>#include <iostream>#include <algorithm>using namespace std;#define MAX_CAPACITY 51 // 定义最大容量char image[MAX_CAPACITY][MAX_CAPACITY]; // 图片数据int w,h; //..原创 2021-10-19 11:48:27 · 133 阅读 · 0 评论