题解
9ack!?
在校苦逼男
展开
-
Leetcode. 886: 可能的二分法
里面的两个人不能分到同一组。那我们就为这两个人对应的编号构建两个节点,并在这两个节点之间连接一条线。处理完成之后,我们要做的就是把所有的点分成两组,这两组之间可以存在连线,而组内不能存在任何连线。我们可以用颜色法来判断这个图是否满足这样的性质。原创 2022-10-16 10:16:30 · 120 阅读 · 0 评论 -
LeetCode. 769 : 最多能完成排序的块
所以我们可以得到这样一个结论,如果我们需要一个区间内包含从。我们需要思考一个问题,题设条件下,在长度为。所以我们只需要维护三个变量就能解出问题了。的区间中,我们如何保证这个区间包含从。其实只需要保证这个区间里面的最小值是。所有的数字,我们只需要保证。原创 2022-10-13 10:25:34 · 61 阅读 · 1 评论 -
Leetcode 532. 数组中的 k-diff 数对 [哈希表+双指针]
把数组排个序,对于每一个nums[i],都查找一下nums[i]+k是否存在在数组中;如果存在则将这个数对中较小的数字插入到一个哈希表中。最后哈希表中元素的个数就是答案的值。代码还是有挺多细节的结果...原创 2022-06-17 00:02:52 · 201 阅读 · 0 评论 -
Leetcode 719. 找出第 K 小的数对距离 [二分]
这个题仔细思考一下就可以发现要使用二分法来解题。最重要的部分就是要思考要对哪个变量进行二分。冥思苦想加wa了一发之后还是参考了题解,我们要对数对的距离进行二分。在每次进行二分搜索时,计算小于m的数对有几个,如果大于等于k,则r=m-1;否则l=m+1。最后的答案就是l。因为我们要求的是小于m的数对有k-1对的情况,l可以起到lastpoint的作用。结果...原创 2022-06-15 22:53:04 · 1356 阅读 · 0 评论 -
Leetcode 498. 对角线遍历 [硬模拟]
力扣简单模拟题原创 2022-06-14 16:17:31 · 1380 阅读 · 2 评论 -
Leetcode 926. 将字符串翻转到单调递增 [前缀和]
我们要求解的字符串具有的性质是,存在一个位于s[i],s[i+1]之前的位置,这个位置左边的字符全为0,右边的字符全是1 。我们可以通过翻转某些值构造出一个满足上述性质的字符串,所以我们要找的就是这样一个位置,使得它左边1的数目加上右边0的数目最小。......原创 2022-06-11 21:25:35 · 1338 阅读 · 2 评论 -
Leetcode 450. 删除二叉搜索树中的节点 [二叉搜索树]
二叉搜索树节点的删除原创 2022-06-10 22:08:16 · 88 阅读 · 0 评论 -
Leetcode 473. 火柴拼正方形 [暴力+剪枝]
题目的意思就是给定一个数组,要求判断能否将数组中的数字平均分为4份。先初始化四个边长度为0,依次尝试将一个火柴添加到其中一条边上。剪枝的方法写在注释里。结果原创 2022-06-10 17:36:03 · 130 阅读 · 0 评论 -
Leetcode 875. 爱吃香蕉的珂珂
数据范围,一眼二分。二分范围的更新函数中仍需要一个二分来求结果,所以总的时间复杂度是O(n2)O(n^2)O(n2)。还有一些细节写在注释里了。原创 2022-06-08 21:46:07 · 66 阅读 · 1 评论 -
Leetcode 929. 独特的电子邮件地址
模拟题原创 2022-06-06 20:08:34 · 164 阅读 · 0 评论 -
第十一届山东省大学生程序设计竞赛部分题解
第十一届山东省大学生程序设计竞赛部分题解B思路如果给出的点权里面有素数,由于素数仅能被1和其自身整除,因此所有和点权为素数的点相连的所有边的边权大小均为1,所以最小生成树的权值为n-1。当点的数量特别多的时候,可以认为点集里一定存在素数;当点的数量少的时候直接使用暴力算法即可。代码#include <bits/stdc++.h>using namespace std;int n, L, R, a[200001];unsigned long long seed;unsigne原创 2022-05-20 10:23:34 · 271 阅读 · 0 评论 -
Leetcode 462. 最少移动次数使数组元素相等 II [快速选择]
题目思路通过这个题才了解到快速选择算法这个东西,快速选择算法利用了快速排序的思想,求解TopK问题的时间复杂度是O(N),C++库里面也提供了相应的函数。这个题就是先找出nums数组里面的中位数,然后让所有其他数字都变为中位数。代码class Solution { public: int minMoves2(vector<int>& nums) { nth_element(nums.begin(), nums.begin()原创 2022-05-19 21:21:02 · 177 阅读 · 0 评论 -
Leetcode 面试题 01.05. 一次编辑
题目题目链接解题思路所有返回True的情况有两种:如果两个字符串长度不相等,则必定长的字符串比短的字符串多一个字符,剩下字符全都相等如果两个字符串长度相等,则至多有一个字符不同AC代码class Solution {public: bool oneEditAway(string first, string second) { int l1 = first.size(), l2 = second.size(); int i, j;原创 2022-05-13 21:30:33 · 402 阅读 · 1 评论 -
PTA: 龙龙送外卖
题目输入样例:7 4-1 1 1 1 2 2 35624输出样例:2446思路看题目首先知道要把树给建起来,直接按照题目给出的信息建出来的树是很可能是反向的 ,至少我一开始反向的 。 但是为了便于求每个节点的深度,我们需要再建一个正向的树。反向的树由于每个节点对应的父节点只有一个,所以我选择用哈希表来存;正向的树每个父节点对应两个叶子结点,所以我选择了链式前向星来存。题目要求的结果是什么呢?其实就是当前所有加入的节点连通根节点构成的树上的所有的边的数目*2-最深的节点的原创 2022-05-02 11:41:13 · 870 阅读 · 0 评论 -
PTA: 浪漫倒影 [二叉树重建] [深度优先遍历]
题目输入样例:86 8 7 4 5 1 3 28 5 4 7 6 3 2 1输出样例:R: 1 2 3 4 5L: 1 6 7 8 5思路重建二叉树,然后深度优先遍历,如果是看右视图,就优先遍历右子树;如果是左视图,就优先遍历左子树。遍历过程中记录每个深度是否有节点已经被看到,打印出第一个被看到的节点。代码#include <cstdio>#include <cstring>using namespace std;struct node {原创 2022-04-21 10:43:41 · 974 阅读 · 0 评论 -
PTA: 点赞狂魔
题目输入样例:5bob 11 101 102 103 104 105 106 107 108 108 107 107peter 8 1 2 3 4 3 2 5 1chris 12 1 2 3 4 5 6 7 8 9 1 2 3john 10 8 7 6 5 4 3 2 1 7 5jack 9 6 7 8 9 10 11 12 13 14输出样例:jack chris john代码#include <cstdio>#include <vector>#inc原创 2022-04-21 10:38:27 · 439 阅读 · 2 评论 -
Leetcode 380. O(1) 时间插入、删除和获取随机元素
原题题目在这里代码用了一个set, 本来用的是unordered_set, 但是发现好像unordered_set的迭代器有一点点问题, 所以就换用了set, 效率自然也挺低的。class RandomizedSet { set<int> s;public: RandomizedSet() { srand(time(0)); } bool insert(int val) { if(s.count(val))原创 2022-04-13 17:28:31 · 166 阅读 · 0 评论 -
PTA: 阅览室 [模拟]
题目输入样例:31 S 08:102 S 08:351 E 10:002 E 13:160 S 17:000 S 17:003 E 08:101 S 08:202 S 09:001 E 09:200 E 17:00输出样例:2 1960 01 60代码#include <cstdio>#include <map>using namespace std;map<int, int> mp;int main(void){原创 2022-04-12 20:50:13 · 341 阅读 · 0 评论 -
PTA: 畅通工程之局部最小花费问题 [并查集]
题目输出格式:输出全省畅通需要的最低成本。输入样例:41 2 1 11 3 4 01 4 1 12 3 3 02 4 2 13 4 5 0输出样例:3代码#include <cstdio>#include <algorithm>#include <queue>#include <set>using namespace std;const int maxn = 1e2+5;int fa[maxn];void i原创 2022-04-10 14:25:01 · 361 阅读 · 0 评论 -
PTA: 天梯地图 [狄杰斯特拉+堆优化+链式前向星]
题目输入样例1:10 150 1 0 1 18 0 0 1 14 8 1 1 15 4 0 2 35 9 1 1 40 6 0 1 17 3 1 1 28 3 1 1 22 5 0 2 22 1 1 1 11 5 0 1 31 4 0 1 19 7 1 1 33 1 0 2 56 3 1 2 15 3输出样例1:Time = 6: 5 => 4 => 8 => 3Distance = 3: 5 => 1 => 3输入样例2:7原创 2022-04-01 21:33:16 · 621 阅读 · 0 评论 -
PTA: 图着色问题
题目坑颜色个数必须是k个,多了少了都不行。图不一定联通。代码拿这个题练了一下链式向前星。#include <cstdio>#include <cstring>#include <set>using namespace std;const int maxn = 505;struct Edge{ int to, next; Edge() { to = next = -1; }}edge[maxn*maxn];原创 2022-03-31 21:05:55 · 792 阅读 · 0 评论 -
POJ-2533 Longest Ordered Subsequence [动态规划]
原题题目在这里题目大意给出由N个数字组成的数字序列,从中挑出一个子序列使其严格递增,要求求出这个子序列的长度。思路假设dp[i]是以arr[i]为结尾的最长递增子序列的长度,则dp[i] = max(dp[i], dp[j]+1)(1<=j<i, arr[i]>arr[j]),有了这个状态转移方程就可以写出程序啦:#include <cstdio>#include <algorithm>#include <cstring>using原创 2022-03-16 18:45:29 · 463 阅读 · 0 评论 -
POJ-1163 The Triangle[动态规划]
原题原题在这里题目大意题目给出一个这样的数字三角形,定义这个三角形上的一条路径是从最上面一个数字出发向下逐层移动,每次移动时可以选择想左下移动或是向右下移动。移动过程中将途径点上的数字加起来,要求求出最大的和。思路测试例子里给出来的的三角形是这样的73 88 1 0 2 7 4 44 5 2 6 5所以合法的移动方向实际上是向下或向右下。所以在每个节点我们都有两个可能的选择,我们每次移动都需要在这两个选择中抉择,假设我们走到第i行第j个元素时的最大值为dp[i][j], 则dp[i]原创 2022-03-16 18:28:20 · 1003 阅读 · 0 评论 -
POJ-3126 Prime Path[广度优先搜索]
题目原题在这里The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices.— It is a matter of security to change such things every now and then,原创 2022-02-10 11:13:35 · 174 阅读 · 2 评论 -
D. Divide by three, multiply by two[双端队列]
题目原题链接解题思路先随便选择一个元素加入队列中,再按照题目给定的规则,向左右两边拓展即可。注意题目给定的元素范围,需要用long long。代码#include <cstdio>#include <deque>#include <map>using namespace std;typedef long long ll;int main(void){ ll N, n; deque<ll> que; map<原创 2022-01-21 12:14:25 · 461 阅读 · 0 评论 -
Oulipo[字符串哈希]
题目The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter ‘e’. He was a member of the Oulipo group. A quote from the book:Tout avait Pair normal, mais tout s’affirmait faux. Tout avait Fair normal, d’abord, puis原创 2022-01-20 12:29:00 · 127 阅读 · 0 评论 -
LeetCode 219. 存在重复元素 II
题目题目在这里给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,1], k = 3输出:true示例 2:输入:nums = [1,0,1,1], k = 1输出:true示例 3:输入:nums = [1,2,3,1,2,3], k = 2输出:fal原创 2022-01-19 18:26:28 · 4515 阅读 · 0 评论 -
PTA:真实的背包故事[动态规划]
PTA:真实的背包故事[动态规划]题目0-1背包问题是经典的动态规划问题,这个问题大多用这样的故事开场:一个小偷溜进了一家博物馆,博物馆里排列着N件珍稀古董,每件古董都有重量和价值,而小偷带来的背包有重量限制W。因此,小偷的目的就是要选择部分古董,使其总重量不超过W且总价值最大。这故事听上去就像小偷在逛超市一样能轻松自如地挑选,而真实的情况是小偷提心吊胆,尤其是每拿下一件古董,随时都有触动警报的危险,所以小偷想尽可能少带几件古董立马跑路,但他的职业“素养”又不允许他不把背包装满。你能帮他解决这个困境吗?原创 2021-06-08 22:30:31 · 2381 阅读 · 8 评论 -
HDU-P1087:Super Jumping! Jumping! Jumping![动态规划]
HDU-P1087:Super Jumping! Jumping! Jumping![动态规划]题目题目链接思路又是英文题面,不过思路还是很清晰的,题目要求找一条单调递增的序列,使得经过路径的数字和最大,只需要将求解最长递增序列的代码稍作修改即可。代码#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int solve(int a[], int N)原创 2021-06-08 22:14:05 · 129 阅读 · 0 评论 -
HDU:P2212-DFS[水题]
HDU:P2212-DFS[水题]题目题目链接思路这个题目…一言难尽,照着题目说的敲一遍就能知道,其实,一共就四个数字。唯一要注意的就是0!=1。代码#include <stdio.h>int fac[11];int main(void){ long long sum; fac[0] = 1; fac[1] = 1; for(int i = 2; i < 11; ++i) { fac[i] = i*fac[i-1];原创 2021-06-06 17:27:10 · 69 阅读 · 0 评论 -
HDU-P2520:我是菜鸟,我怕谁[水题]
HDU-P2520:我是菜鸟,我怕谁[水题]Problem Descriptionlin2144是一只小菜鸟,都是笨鸟先飞,lin2144想来个菜鸟先飞,他从0点出发一开始的飞行速度为1m/s,每过一个单位时间lin2144的飞行速度比上一个单位时间的飞行速度快2m/s,问n (0 < n < 10^5)个单位时间之后lin2144飞了多远?Input输入一个T表示为有几组数据每组数据输入一个n,表示lin2144飞行的时间.Output输出lin2144飞行了多远,因为数字很大原创 2021-05-31 18:35:08 · 162 阅读 · 0 评论 -
HDU-P2289:Cup[二分答案+数学]
HDU-P2289:Cup[二分答案+数学]题目Problem DescriptionThe WHU ACM Team has a big cup, with which every member drinks water. Now, we know the volume of the water in the cup, can you tell us it height?The radius of the cup’s top and bottom circle is known, the cup’原创 2021-05-30 20:38:49 · 133 阅读 · 3 评论 -
HDU-P1061:Rightmost Digit[找规律]
HDU-P1061:Rightmost Digit[找规律]题目题目链接Problem DescriptionGiven a positive integer N, you should output the most right digit of N^N.InputThe input contains several test cases. The first line of the input is a single integer T which is the number of test原创 2021-05-30 20:31:28 · 107 阅读 · 0 评论 -
HDU-P2612:Find A Way[广度优先搜索]
HDU-P2612:Find A Way[广度优先搜索]题目题目链接Problem DescriptionPass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki.Yifenfei’s home is at the co原创 2021-05-30 17:02:35 · 101 阅读 · 0 评论 -
HDU-P2614:Beat[dfs搜索]
HDU-P2614:Beat[dfs搜索]题目题目链接Problem DescriptionZty is a man that always full of enthusiasm. He wants to solve every kind of difficulty ACM problem in the world. And he has a habit that he does not like to solvea problem that is easy than problem he had原创 2021-05-25 21:53:42 · 107 阅读 · 0 评论 -
HDU-P5248:序列变换[二分答案]
HDU-P5248:序列变换[二分答案]题目题目在这里Problem Description给定序列A={A1,A2,…,An}, 要求改变序列A中的某些元素,形成一个严格单调的序列B(严格单调的定义为:Bi<Bi+1,1≤i<N)。我们定义从序列A到序列B变换的代价为cost(A,B)=max(|Ai−Bi|)(1≤i≤N)。请求出满足条件的最小代价。注意,每个元素在变换前后都是整数。Input第一行为测试的组数T(1≤T≤10).对于每一组:第一行为序列A的长度N(1≤原创 2021-05-22 12:05:45 · 478 阅读 · 0 评论 -
OpenOJ-P1166:拨钟问题[枚举]
OpenOJ-拨钟问题[枚举]题目题目链接有9个时钟,排成一个3*3的矩阵。|-------| |-------| |-------|| | | | | | ||---O | |---O | | O || | | | | ||-------| |-------| |-------| A B C原创 2021-05-22 10:24:09 · 241 阅读 · 0 评论 -
HDU-P4911:Inversion[归并排序]
HDU-4911-Inversion[归并排序]题目题目链接Problem Descriptionbobo has a sequence a1,a2,…,an. He is allowed to swap two adjacent numbers for no more than k times.Find the minimum number of inversions after his swaps.Note: The number of inversions is the number of原创 2021-05-21 18:24:00 · 144 阅读 · 0 评论 -
HDU-P1999:不可摸数[数论]
HDU-P1999:不可摸数[数论]题目不可摸数Problem Descriptions(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数.Input包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。Output如果n是不可摸数,输出yes,否则输出noSample Input3258Sample Outputyesyes原创 2021-05-19 21:23:24 · 187 阅读 · 0 评论