刷题笔记
高冷小伙
这个作者很懒,什么都没留下…
展开
-
腾讯校招智力题-赛马问题-毒药与老鼠
秋招-智力题一、赛马问题1.1 问题描述64匹马,8个跑道,问最少比赛多少场,可以选出跑得最快的4匹马?Assumptions:每场比赛每个跑道只允许一匹马,且不存在并列情形1.2 解题思路答案:11场比赛一定能选出;10场在特殊情况可以。Step1:首先不可避免地要赛八场,每场8匹马;然后对每组第一再赛一场,按照每组的速度编号:A1 > A2 > A3 > ------- >A8B1 > B2 > B3 > ------- >B8~原创 2021-10-25 10:45:30 · 909 阅读 · 0 评论 -
2017第八届蓝桥杯决赛B组原题答案及总结
题目36进制题目描述解题思路简单题,就是进制转换;但是因为好久没做,第一次把进制当成10处理了。然后测试‘AA’,发现结果不对~~~。代码展示#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5;/*MANY1040254*/int main(){ cout<<('Z'-'A'+10)<<endl; //int ans=('Y'原创 2021-06-04 13:41:56 · 311 阅读 · 0 评论 -
2019第十届蓝桥杯决赛B组原题答案及总结
标题总结原创 2021-05-28 10:14:58 · 646 阅读 · 0 评论 -
Leetcode-打家劫舍问题汇总-动态规划
https://leetcode-cn.com/problems/house-robber-iii/原创 2021-05-18 10:21:57 · 420 阅读 · 0 评论 -
PTA-天梯赛-病毒感染
题目链接https://pintia.cn/problem-sets/994805046380707840/problems/1386335159927652361解题思路1.DFS深搜比赛的时候忘了怎么在广搜中标记路径,就用了深搜;结果wa了一个点、还有一个点内存超限,怎么都改不过来~...原创 2021-05-17 23:23:53 · 654 阅读 · 0 评论 -
【P1902】刺杀大使-[二分答案+BFS]
题目链接https://www.luogu.com.cn/problem/P1902解题思路解法1:二分答案+BFS1.求最大值的最小值对于出现这种要求的题目,应该首先考虑能否用二分答案进行求解,因为这是二分答案的典型用法。2.分析题目意思:找出从第一行到第n行的一条路径,使得经过的点的最大值最小;3.这样我们就可以把二分答案的mid值作为BFS的一个条件,判断是否到达第n行;如果可以,说明此时mid值>=ans,往左边([l,mid])搜索,否则搜索[mid+1,r];代码展示原创 2021-05-12 21:31:27 · 421 阅读 · 0 评论 -
2020第十一届B组国赛题解
B.扩散解题思路就是简单BFS,只是需要考虑负数的情况;因为最多到[-2020,2020],因此,全部起点进行[x+2500,y+2500]操作;代码展示#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5;/*20312088*/struct node{ int x,y; int step;};bool vis[10000][10000];int d原创 2021-05-10 00:00:40 · 474 阅读 · 5 评论 -
【Leetcode】1720. 解码异或后的数组
题目链接https://leetcode-cn.com/problems/decode-xored-array/解题思路1.只需要知道异或的基本性质就好;异或:对于:a^b=c //a与b异或得到c=>b=c^aa=c^b代码展示class Solution {public: vector<int> decode(vector<int>& encoded, int first) { vector<int>原创 2021-05-06 10:43:49 · 105 阅读 · 0 评论 -
【Leetcode】740. 删除并获得点数-动态规划-附例题
题目链接https://leetcode-cn.com/problems/delete-and-earn/解题思路动态规划自己的思路1.题目的意思很明确,就是如果一次选择值为x的数,那么就要删除所有值为x+1,x-1的数。2.本来我是想用贪心处理的,就是用num[x]存储删除x时一同删去的值,每次选择最小的情况~~。但是不知道怎么处理样例2的情况,遂放弃。题解思路1.用dp[i]表示对于前i个数中能获得的最大点数,则可以得到状态转移式,dp[i]=max(dp[i-2]+num[i],d原创 2021-05-05 15:46:34 · 132 阅读 · 1 评论 -
【每日一题】633. 平方数之和
题目链接https://leetcode-cn.com/problems/sum-of-square-numbers/解题思路1.思路很容易想到,遍历0~sqrt(c),然后判断c-x*x是否为平方数即可;2.有一个坑点是用 int 存储的话会报错~我就很纳闷,明明c是int型,怎么sqrt( c )会溢出!!!后来想到可能是sqrt()函数处理时会超出int型,于是查了下sqrt的源码,果然~~看了这篇博客之后,,,震惊!!!sqrt函数详解代码展示class Solutio原创 2021-04-28 10:52:22 · 89 阅读 · 0 评论 -
【每日一题】1011. 在 D 天内送达包裹的能力-二分答案
题目链接https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/解题思路1.可以知道题目的要求是求`最大值的最小情况`,因此直接想到`二分答案`;2.然后就是模板题了~~~~总结原创 2021-04-27 10:07:15 · 105 阅读 · 0 评论 -
【每日一题】897. 递增顺序搜索树
题目链接https://leetcode-cn.com/problems/increasing-order-search-tree/解题思路class Solution {public: void inorder(TreeNode* root,vector<int>&res){ if(root==nullptr)return; inorder(root->left,res); res.push_back(root-原创 2021-04-27 09:27:05 · 78 阅读 · 0 评论 -
【每日一题】938. 二叉搜索树的范围和
题目链接https://leetcode-cn.com/problems/range-sum-of-bst/解题思路1.暴力遍历遍历二叉树的所有节点,对于每个节点判断是否在[low,high]中即可2.根据二叉搜索树的性质遍历对于每个节点,我们判断根节点的情况: root->val>high 说明右子树整体都>high root->val<low 说明左子树整体都<low else 左右子树都遍历代码展示class Solution {p原创 2021-04-27 09:23:15 · 71 阅读 · 0 评论 -
【模板】快速乘+快速幂
代码展示typedef long long ll;typedef long double ld;typedef unsigned long long ull;const int p = 10000007;//余数inline ll ksc(ll x,ll y){ // 快速乘 x*y ll t=(ld)x/p*y; ll res=(ull)x*y-(ull)t*p; return (res+p)%p;}ll fast(ll di,ll zhi){ // 快速幂 di^原创 2021-04-25 00:28:20 · 73 阅读 · 0 评论 -
【模板】求一个数的因子个数-质因数分解
结论对于任何一个自然数NN,都可以分解质因子得到如下形式:N=pe11∗pe22∗pe33∗⋯∗pekkN=p1^e1 ∗ p2^e2 ∗ p3^e3∗ ⋯ ∗ pk^ek(e1、e2…ek是指数)那么有结论:N的因子的个数为:f(n)=(1+e1)∗(1+e2)∗⋯∗(1+ek)如N=100,分解质因子变形为:100=22∗52,NN的因子的个数为:f(N)=f(100)=(1+2)∗(1+2)=9即:1,2,4,5,10,20,25,50,100推导1.因为任何一个数都能分解成如上形式(N原创 2021-04-25 00:23:30 · 530 阅读 · 0 评论 -
【每日一题】面试题 01.05. 一次编辑
题目链接https://leetcode-cn.com/problems/one-away-lcci/解题思路1.我们观察三种编辑操作:增、删、改;2.每种操作都是在fisrt[i]!=second[j]时执行的,所以我们只需要遍历0~l1,0~l2;3.当first[i]!=second[j]时,移动长字串的下标即可;代码展示bool oneEditAway(string first, string second) { int l1=first.size();原创 2021-04-21 22:12:23 · 119 阅读 · 0 评论 -
2021第十二届蓝桥杯省赛B组原题答案及总结
题目A.空间题目描述解题思路1.我们可以把256MB换算成字节=>256*1024*1024*8/322.答案:67,108,864======需要注意的是如果编程计算的话,int型结果会是-67,108,864,要把 *8/32变成/4B.卡片题目描述解题思路1.一开始看这题懵了一瞬间,然后意识到只是第2题,肯定不会考太难的知识点~~2.然后自然而然地想到了暴力解法,遍历1~n,生成每个数后,判断剩余的卡片数num[i](0<=i<=9)是否<0,如原创 2021-04-20 11:09:17 · 27769 阅读 · 8 评论 -
C++实现字符串型四则运算
标题#include <iostream>#include<bits/stdc++.h>#include <stack>using namespace std;/*4 + 2 + 4/230 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92*/int cmp(const char c1,const char c2) //判断优先级{ if(c1==c2) //原创 2021-04-17 20:01:21 · 1001 阅读 · 1 评论 -
【九韵杯】H-友谊纽带-牛客
题目链接https://ac.nowcoder.com/acm/contest/13493/H解题思路1.这题一开始我读题目了,我以为的是把这些点全部连接起来所需要的最小边数; 于是我用了并查集,只过了两个点~2.后来发现题目是要求找出一个连通块里的任意两点的距离,也就是连通块的最大长度; 这样的话我们就可以用BFS暴力搜索所有节点,找出它们距其他节点的最远距离`的最大值`; 当一次广搜之后仍有节点未被访问的则说明该图不只有一个连通块,输出-1;代码展示#include<b原创 2021-04-14 17:09:22 · 121 阅读 · 0 评论 -
【洛谷】P1064 [NOIP2006 提高组] 金明的预算方案
题目链接https://www.luogu.com.cn/problem/P1064解题思路总结原创 2021-04-11 13:56:33 · 590 阅读 · 0 评论 -
【洛谷】P1387-最大正方形
题目链接https://www.luogu.com.cn/problem/P1387解题思路1.暴力法1.思路很简单,以(i,j)为正方行的左上角,用广搜遍历,直到遇到0为止2.广搜遍历:遍历(x+1,y)(x,y+1),(x+1,y+1),因为广搜的层次性,所以能保证对于1~l长度的正方形都能依次遍历;2.动态规划1.因为动规要保证前面的数不会改变,所以我们可以设dp[i][j]表示(i,j)作为正方形的右下角时的长度;2.设置右下角能够保证全为1但长度小的正方形能提前更新;代码原创 2021-04-09 20:24:12 · 360 阅读 · 1 评论 -
八种常见的排序方法详解优化
{一},冒泡排序冒泡排序算法的运作如下:(从后往前)1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度: O(n^2)代码示例#includ...原创 2020-04-02 15:54:27 · 838 阅读 · 0 评论 -
【蓝桥杯】省赛-跳蚱蜢
题目链接http://oj.ecustacm.cn/problem.php?id=1318解题思路#include<bits/stdc++.h>using namespace std;/*思路: */struct node{ int x; string s="123456789";};int num[20];int n;int dis[]={-1,1,-2,2};void BFS(int x){ node tp; tp.s="123456789",tp.x=原创 2021-04-06 10:28:56 · 228 阅读 · 0 评论 -
【拓扑排序+位运算】可达性统计
题目描述https://www.acwing.com/problem/content/166/解题思路1.题目中说明给定的图是一个`有向无环图`,由此我们可以想到是拓扑排序;2.不难想到这题的思路是先遍历一个节点能到达的所有节点,再把所有节点的能到的节点去重相加,即: f[x]=sum(f[G[x][i]]),i=[0,G[x].size()];3.但是需要考虑的问题是如何保存每个节点的信息。由于节点过多,只能使用二进制存储;即bitset<size>f[maxn];4.值得原创 2021-04-05 14:47:27 · 108 阅读 · 0 评论 -
【牛客】涂墙-详解优化
题目链接https://ac.nowcoder.com/acm/contest/13504/C解题思路1.深搜剪枝1.很难从1~1000打表,记录所有的数;2.我们可以选择每输入一次,进行判断一次;3.剪枝优化 DFS(k,num)表示第5-k个数选择之后的num值,当num==0&&k==0时,即为答案; 每次遍历选择 sqrt(num)~1,这样只需要根号n的时间复杂度;代码展示#include<bits/stdc++.h>using namespa原创 2021-03-28 12:52:44 · 124 阅读 · 2 评论 -
【二分查找】[洛谷P1182-数列分段]
题目链接https://www.luogu.com.cn/problem/P1182题目描述对于给定的一个长度为N的正整数数列 A_{1\sim N}A1∼N ,现要将其分成 MM(M\leq NM≤N)段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列 4\ 2\ 4\ 5\ 14 2 4 5 1 要分成 33 段。将其如下分段:[4\ 2][4\ 5][1][4 2][4 5][1]第一段和为 66,第 22 段和为 99,第 33 段和为 11,和最大值为原创 2021-03-26 15:19:04 · 282 阅读 · 0 评论 -
【蓝桥杯】[包子凑数]-详解优化
题目链接http://lx.lanqiao.cn/problem.page?gpid=T440原创 2021-03-24 00:46:00 · 432 阅读 · 3 评论 -
【蓝桥杯】[买不到的数目]-详解优化-附例题
题目链接在这里插入代码片解题思路1.数学知识1.首先题目规定不存在无解的状况,说明a,b互质; 当a,b不互质,即gcd(a,b)>1时,任意的ab+bm-1都无法实现;2.当a,b互质时,有a,b无法组成的最大数=a*b-a-b; ~~数学知识点~~还在研究代码展示#include<stdio.h>int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF) { printf("%d\n",原创 2021-03-24 00:44:32 · 3412 阅读 · 4 评论 -
简单拓扑序-详解拓扑序与广搜的区别
题目链接https://ac.nowcoder.com/acm/contest/12482/A解题思路1.广搜1.我一开始的思路是用广搜,不使用拓扑排序;2.因为我看到题目中说明了不存在环,且我以为拓扑排序的作用是判断有没有环,所以觉得广搜跟拓扑排序在这题没有区别;然后~~~~再然后我考虑到可能是因为有节点重复入队,比如样例中节点5就进入了两次,但是这不能用广搜解决,因为2.拓扑排序拓扑排序代码展示#include<bits/stdc++.h>using names原创 2021-03-23 13:58:14 · 187 阅读 · 0 评论 -
【快速幂+逆元】孪生质数
题目链接https://ac.nowcoder.com/acm/contest/12478/E解题思路1.当我们求解小数的幂时,可以利用`逆元`来求解;2.用线性筛求出范围内的所有素数,再遍历求出孪生素数的个数prim_num;3.化简下 primnum/t*(t-1)/2,化简得 2*prim_num / t*(t-1)4.再用快速幂求解即可;代码展示#include<bits/stdc++.h>using namespace std;typedef long lon原创 2021-03-23 10:54:16 · 94 阅读 · 0 评论 -
最长回文序列详解优化(附例题解析)
问题描述给定一个字符串,如PATFTA, 求其中的能构成回文的连续子串的最大长度;解题思路1.暴力解法1.可以打两重循环,每次循环得到子串s[i]~s[j],再遍历s[i]~s[j],判断是否为回文串,取最大值;2.这种做法的时间复杂度为O(n^3)2.动态规划1.令dp[i][j]表示子串s[i]~s[j]是否为回文串,是则为1,不是则为0;2.易得只有当dp[i+1][j-1]为回文串的时候,dp[i][j]才有可能是回文串;3.但是,如果以两个数组下标进行遍历的话,更新dp[i][原创 2021-03-21 09:26:54 · 185 阅读 · 0 评论 -
PAT甲级真题-1045 Favorite Color Stripe详解优化
1045 Favorite Color Stripe题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805437411475456解题思路代码展示#include<bits/stdc++.h>using namespace std;/*思路: */struct node{ int aft; char c; bool flag;};node ll[100000];int m原创 2021-03-20 21:16:46 · 357 阅读 · 0 评论 -
洛谷P1046方格填数详解
题目链接https://www.luogu.com.cn/problem/P1406题目的意思大概是,给出n^2个数,填在n*n的格子内,保证每行、每列、对角线元素之和相等。解题思路1.由于题目给出n<=4,所以很容易想到暴力搜索,再加上剪枝即可;2.对于每个数,遍历n*n个方格;3.几个优化: a.关于如何直接找到最小字典序,只需要将数组提前排序即可,这样能保证DFS在搜索时会优先将数字小的元素放在方格前部分; b.每次搜索完一行之后,判断一行之和是否等于tol/n,(tol=数组原创 2021-03-20 11:04:34 · 356 阅读 · 0 评论 -
洛谷P1070-道路游戏详解
题目链接https://www.luogu.com.cn/problem/P1070解题思路1.暴力法1~n个工厂依次搜索,每次增加遍历1 ~ p个时间,直到时间为m为止,取最大值;代码展示void DFS(int x,int ti,int tol){//选第x个工程,时间是ti if(ti>=m){ // cout<<"tol = "<<tol<<" "<<ans<<endl; ans=max(tol,ans);原创 2021-03-20 10:43:28 · 263 阅读 · 0 评论 -
2020第十一届国赛B组题解
C.阶乘约数解题思路代码展示D.本质上升序列解题思路1.由于字符串有200位,DFS遍历不可行;2.用dp处理,与LIS类似,num[i]记录以s[i]结尾的递增子串个数;3.在LIS中,当s[i]>s[j]使,num[i]=max(num[i],num[j]+1)是为了求出最长的子串;类比可得动态规划方程 num[i]+=num[j];4.当s[i]==s[j]时,num[i]-=num[j],下面画图解释;(图待完善~~~)代码展示#include<bits/st原创 2021-03-18 07:46:54 · 595 阅读 · 0 评论 -
2021.3月PAT甲级考试总结
引言在考试之前的计划是一天3道题(PAT真题),以便熟悉英语题目及出题套路;这样的话能在考试前刷70题左右,但中间有段时间没能坚持,加上感觉题目难度不大,就只刷了40道;结果只考了78分~~反思1.问题的堆积比如这次考试中出现的Max-Heap,考查的是二叉堆,虽然在PAT真题练习中没遇到过关于堆的题目,但我在之前的刷题过程中却遇到不止一次,而我每次的做法都是把这个知识点略过,感觉太难了,下次再看吧! 这样就让我对堆这个知识点不仅没有了解,且越发恐惧遇到~~。2.没有针对性地刷题又比如这次考试中原创 2021-03-15 09:28:23 · 461 阅读 · 1 评论 -
PAT甲级真题-1151 LCA in a Binary Tree详解优化
1151 LCA in a Binary Tree题目链接https://pintia.cn/problem-sets/994805342720868352/problems/1038430130011897856解题思路**题目意思是:**给定一个二叉树的中序与先序序列;在给出若干组节点a、b,求a,b的最近的公共祖先;1.不建树的方法1)标记中序序列中各个节点的下标;2)在遍历时判断a、b的中序序列对应下标的情况: ina>inroot&&inb>inroo原创 2021-03-13 10:04:12 · 93 阅读 · 0 评论 -
PAT甲级真题-1004 Counting Leaves详解优化
1004 Counting Leaves题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184解题思路1.vector记录每个节点的子节点;2.用BFS遍历的同时记录节点的子节点树ans[to];3.当节点to的子节点有子节点时,ans[to]-1(最小为0);4.有个测试点是考察只有根节点(即m==0)的特殊情况。总结1.考察BFS的层次性。代码展示#include<原创 2021-03-12 12:25:47 · 408 阅读 · 0 评论 -
PAT甲级真题-1032 Sharing详解优化
1032 Sharing题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920解题思路一般思路1.遍历两条链表,得到两个字符串s1,s2;2.找出s1,s2的公共子序列长度 len;3.根据len从尾节点遍历;但这样比较麻烦,且得考虑空串情况;优化思路1.在输入介点时记录每个节点的状态为false;2.遍历第一条链表,更改节点状态为true;3.遍历第二条链表当遇到flag原创 2021-03-08 21:03:34 · 212 阅读 · 0 评论 -
PAT甲级真题-1022 Digital Library详解优化
1022 Digital Library题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336解题思路这题最大的麻烦就是对于数据的读入处理;总结https://blog.csdn.net/SYaoJun/article/details/87351227(可以参考参考)代码展示#include<bits/stdc++.h>using namespace std;/*原创 2021-02-28 15:36:08 · 179 阅读 · 0 评论