![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
kkzz1x
真.新手起步
Java + CPP + Rust(新人),计算机科学热爱者
展开
-
再做螺旋矩阵AcWing753 756【写法妙】
在题解去看到一个非常妙非常好理解的写法!!!原创 2022-08-02 16:27:11 · 163 阅读 · 0 评论 -
天梯22模拟 L3-2 拼题A打卡奖励 (30 分)
L3-2 拼题A打卡奖励 (30 分)拼题 A 的教超搞打卡活动,指定了 N 张打卡卷,第 i 张打卡卷需要 m i 分钟做完,完成后可获得 c i 枚奖励的金币。活动规定每张打卡卷最多只能做一次,并且不允许提前交卷。活动总时长为 M 分钟。请你算出最多可以赢得多少枚金币?输入格式:输入首先在第一行中给出两个正整数 N(≤10^3) 和 M(≤365×24×60),分别对应打卡卷的数量和以“分钟”为单位的活动总时长(不超过一年)。随后一行给出 N 张打卡卷要花费的时间 m i(≤600),最后一行给出原创 2022-04-21 14:44:00 · 1261 阅读 · 0 评论 -
天梯L2-029 特立独行的幸福
L2-1 特立独行的幸福 (25 分)对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;原创 2022-04-13 15:11:19 · 294 阅读 · 0 评论 -
天梯 L2-028 秀恩爱分得快
题目描述古人云:秀恩爱,分得快。互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。下面给定一批照片,请你分析一对给定的情侣,看看他们分别有没有亲密度更高的异性朋友?输入格式:输入在第一行给出 2 个正整数:N(不超过1000,为总人数——简单起见,我们把所有人从 0 到 N-1 编号。为了区分性别,我们原创 2022-04-13 15:07:43 · 212 阅读 · 0 评论 -
【状压dp】AcWing 91. 最短Hamilton路径
最难想到的是状态表示…f[i][j]表示的是所有从0走到j,走过的所有点是i的所有路径属性:0到终点j的最短路径状态计算:转移方程:dp[i][j]=min(dp[i][j],dp[i-(1<<j)][k]+g[k][j])初始值 dp[1][0]=0 其他赋值为INF(求的是最小值)所求值dp[(1<<n)-1][n-1] 注意括号遍历方向:先遍历i(所有路径状态),然后才是终点j和中间步k而不是j->i->k原因是如果先遍历的是j,那么用k的时候原创 2022-03-31 11:03:21 · 335 阅读 · 0 评论 -
【状压dp】AcWing 291. 蒙德里安的梦想
状态压缩dp的模版题…就要死要活的,555真不知道是咋想出来的QAQ。注意点:确定了横着摆放的格子就等于确定了竖着的。所以最后的方案数也就是横着格子的摆法数量。状态表示dp[i][j] i代表第i列,而j是一个二进制数,指的是可能的状态。如果一位等于1表示上一列有横放格子,该列有格子捅出来。状态转移方程。此题要求的是方案数。那么状态dp[i][j]+=dp[i-1][k] 也就是上一列的所有合法状态转移而来状态合法性的判断。列数是0~m-1初始化条件f[0][0] = 1,第0列只能是状.原创 2022-03-30 21:26:07 · 232 阅读 · 0 评论 -
最短路问题模版总结(Dijkstra/BF/SPFA/Floyd)
文章目录AcWing 849. Dijkstra求最短路 IAcWing 850. Dijkstra求最短路 IIAcWing 853. 有边数限制的最短路AcWing 851. spfa求最短路AcWing 852. spfa判断负环AcWing 854. Floyd求最短路以下的模版题都是求从1到n的最短路AcWing 849. Dijkstra求最短路 I朴素写法邻接矩阵表示,注意重边。重边处理:留下最小的即可#include<bits/stdc++.h>using n原创 2022-03-25 22:09:40 · 533 阅读 · 0 评论 -
关于拓扑排序的无用记录
848. 有向图的拓扑序列给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。输出格式共一行,如果存在拓扑序列,则输出原创 2022-03-25 20:13:16 · 87 阅读 · 0 评论 -
2022-2-23 背包问题求方案
9. 分组背包#include<bits/stdc++.h>using namespace std;const int N=105;int n,V;int v[N][N],w[N][N],s[N];int dp[N];int main(){ cin>>n>>V; for(int i=0;i<n;i++){ cin>>s[i]; for(int j=0;j<s[i];j++){原创 2022-02-23 14:20:21 · 388 阅读 · 0 评论 -
2022-2-18 多重背包问题二进制优化
1. 二进制优化方式重点在于物品个数s 使用多进制去表示,用2进制来表示0-s中的任意一个数字,从而转化成01背包问题O(NVlogS)//多重背包问题2 O(NVlogS)#include<bits/stdc++.h>using namespace std;const int maxn=20005;int n,V;int v[maxn],w[maxn];int main(){ //将已经转换过的物品记录 cin>>n>>V;int a原创 2022-02-23 11:34:09 · 528 阅读 · 0 评论 -
2022-2-16 AcWing LIS模型(187 LIS+DFS)
AcWing1014. 登山先上后下的类型#include<bits/stdc++.h>using namespace std;const int N=1000;int main(){ int n,h[N]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&h[i]); } int f[N],g[N]; for(int i=0;i<n;i++)原创 2022-02-17 13:43:36 · 387 阅读 · 0 评论 -
2022-2-14 AcWing1027 方格取数
1027. 方格取数某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。相比与普通的走格子,寻找最大路径,不同点在于:走两条路径。因此DP的维数增加,用4维表示当前的一个状态。又因为两个路径走过的步数是一样的,所以可以运用等价关系降维:k=i1+j1=i2+j2起点:2个点终点:2个点会出现两条路径重复的情况,对原创 2022-02-14 22:44:46 · 105 阅读 · 0 评论 -
LeetCode542. 01 矩阵
题目链接给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。法1:BFS一开始我是这么想的,遍历每一个1,然后从1搜索到0…后来发现,从0搜到1就更快,一下子可以解得很多个格子。初始队列:把0全部入队,然后进行BFS,遇到1的时候就记录此时的BFS遍数(level)class Solution {public: vector<vector<int>&g原创 2021-10-21 15:44:38 · 123 阅读 · 0 评论 -
LeetCode-DFS+回溯专题(更新中)
文章目录【品悟基础DFS】[695. 岛屿的最大面积](https://leetcode-cn.com/problems/max-area-of-island/)[547. 省份数量](https://leetcode-cn.com/problems/number-of-provinces/)[417. 太平洋大西洋水流问题](https://leetcode-cn.com/problems/pacific-atlantic-water-flow/)【回溯系列题】[46. 全排列](https://leet原创 2021-10-14 21:49:07 · 218 阅读 · 0 评论 -
LeetCode451. 根据字符出现频率排序(频率排序:map+堆)
此题与LeetCode347是基本一样的对于这种频率统计并排序问题,做法一:桶排序的套娃做法二:map+堆做法二更不容易错一些,而且非常通用,故记录写法。map的建立为 <字母,对应的频率>, c++优先队列自动安装key值进行调整,所以push的时候要反过来。写法参考如下:class Solution {public: string frequencySort(string s) { unordered_map<char,int> fre;原创 2021-10-13 20:32:12 · 113 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?class Solution {public: int m,n,count=0,ans;原创 2021-09-26 13:40:54 · 70 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径(DFS)
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)class Solution {public: bool ans=false; int index=0,n,m原创 2021-09-26 10:27:52 · 72 阅读 · 0 评论 -
CSP202012-2期末预测之最佳阈值(前缀和)
这题的前缀和比较烦了 不用的话显然O(n^2)必定超时sum00【i】记录的是小于等于序号i的0的数量 但还要注意细节 考虑等于前一个score 的情况(幸好样例考虑的是比较全面的)#include<bits/stdc++.h>using namespace std;const int maxn=100005;struct Node{ int score,res;}node[maxn];bool cmp(Node a,Node b){ return a.score<原创 2021-09-18 20:52:16 · 118 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润(简单dp)
注意点:空值 []动态规划dp[i]代表前i天获得的最大利润,dp[i]=max(dp[i-1],prices[i]-min)min则记录前i天的最小值最后寻找最大的dp[i]即可节省空间,在计算dp的时候,就可以在ans中存入最大值。class Solution {public: int maxProfit(vector<int>& prices) { int MIN,ans=0; if(prices.size()!=0) .原创 2021-09-11 12:36:08 · 70 阅读 · 0 评论 -
CSP202104-2邻域均值(二维前缀和)
注意点原来的这个二维数组要作为全局变量 否则会爆栈二维前缀和用于求一个矩阵内一个任意的子矩阵的数的和dp[i][j]表示点1,1与点i,j这个点分别在左上角和右下角组成的矩阵内数的和。此题是一题非常好的模版题#include<bits/stdc++.h>using namespace std;const int maxn=610;int g[maxn][maxn]={0};int dp[maxn][maxn];int main(){ int n,L,r,t;原创 2021-09-10 21:42:55 · 106 阅读 · 0 评论 -
PAT A1022 Digital Library
记录一下这题看似复杂但写法简洁的题。A1022 Digital LibraryA Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given原创 2021-09-09 10:49:35 · 110 阅读 · 0 评论 -
剑指 Offer. 链表
文章目录剑指 Offer 24. 反转链表剑指 Offer 35. 复杂链表的复制剑指 Offer 24. 反转链表剑指 Offer 35. 复杂链表的复制原创 2021-09-07 17:15:06 · 46 阅读 · 0 评论 -
PAT A1010 Radix 二分
1010 Radix (25 分)Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.Now for any pair of positive integers N1and N2 , your task is to find th原创 2021-09-01 22:03:30 · 91 阅读 · 0 评论 -
PAT最短路 A1003 A1018 A1087(Dijkstra+DFS)
A1003 Emergency这题只要用到Dijkstra的模版即可开辟数组w[maxn]记录到该点的最大权值开辟数组num[maxn]记录到该点的最短路径条数(注意不要放错位置) if(G[u][v]!=INF&&vis[v]==false) { if(d[u]+G[u][v]<d[v]) { d[v]=d[u]+G[u]原创 2021-08-30 13:24:25 · 93 阅读 · 0 评论 -
PAT A1034 Head of a Gang
学习思路:此题涉及到多个连通块…学习到的题目思路:定义DFSTrave()用来遍历每一个连通块,然后DFS访问其中的一个连通块,获得所需的信息。注意点:题目所给的最大1000指的是边的数量,因此最大的点的数量是可能2000的,定义的maxn>2000G【id1】【id2】+=w 输入时累加,而不是一次性赋值 (边权和点权都是如此)...原创 2021-08-24 14:15:48 · 84 阅读 · 0 评论 -
PAT A1021 Deepest Root
第一,要判断所给条件能否构成一棵树。前提条件是N个结点,N-1条边那么联想到生成树的知识N-1条边想要构成树,那么连通分量数目一定为1这又两种检测方法,DFS或者并查集第二,如果检测能构成树,则寻找一个根结点,使之成为具有最大深度的树。做法:先任意选择一个结点,从该结点开始遍历整棵树,获取能达到的最深的结点,放在一个vector中,然后从该vector中选择任意一个结点再遍历整棵树(DFS前将原来存放结点的vector清空,vis数组变为false,maxHeight变为-1 即全部要初始...原创 2021-08-23 23:05:41 · 88 阅读 · 0 评论 -
PAT A1066 Root of AVL Tree(AVL模版)
模版题:#include<bits/stdc++.h>using namespace std;typedef struct Node* Bintree;struct Node{ int data,height; Bintree left,right;};Bintree root;Bintree newNode(int data){ Bintree Node=(Bintree)malloc(sizeof(struct Node)); N...原创 2021-08-16 16:01:40 · 87 阅读 · 0 评论 -
PAT A1053 Path of Equal Weight
NOTE:有多条路径时,有更高权值的路径要先输出。所以对同一层的结点,先进行从大到小的排序。sort(node[id].child.begin(),node[id].child.end(),cmp);这个cmp也容易写错:vector child存的是结点号(int),比较的则是结点weightbool cmp(int a,int b){return node[a].weight>node[b].weight;}调用DFS的初始条件:node0已经存在序列中DFS(0...原创 2021-08-14 22:27:03 · 61 阅读 · 0 评论 -
PAT之树的遍历 A1079 A1090 A1094
这三题的考察点都是普通树的遍历,可以使用BFS和DFS用DFS写代码量可能更小…不过BFS很好理解。做题的时候一定要判断好是二叉树还是可能有很多孩子的普通树。三题都差不多 所以直接上代码了DFS之 A1090 vs A10941090这题只需要用到叶子结点,所以在递归边界(叶子结点)的时候进行变量操作1094则是单纯地利用DFS遍历,然后计数,因此每递归一次只需要增加相应数量就行,直到全部搜索完。文章目录A1079 Total Sales of Supply Chain(BFS做法)A1090原创 2021-08-13 17:18:52 · 97 阅读 · 0 评论 -
PAT A1091 Acute Stroke(BFS)
这是一个三维的BFS,跟二维的处理方法是一样的;这题要统计1的连通块的“大小”,因此我们可以在BFS函数中设置返回值。设置int BFS(int x,int y,int z),返回值即为符合条件的块1的个数。还有一些题型,要求的是连通块的 数量,这时候每个连通分量的第一小块 inq不用赋值为true(作为该连通分量的代表)#include <bits/stdc++.h>using namespace std;struct Node{ int x, y, z;} n...原创 2021-08-11 10:35:52 · 145 阅读 · 0 评论 -
PAT A1103 Integer Factorization (DFS)
首先要考虑递归的方向。题目要求,如果有多种方案,选择底数和n1+...nk最大的方案;如果还有多重方案,那么选择底数序列的字典序最大的方案。因此从大到小递减来遍历,保证字典序大的序列优先被选中。2. 两条分支: 选index号元素,DFS(index,nowk+1,sum+fac[index],facSum+index);DFS(index-1,nowk,sum,facSum); //不选index,因此要考虑index-1(因为从大到小遍历,所以下一个要考虑的是index-1)原创 2021-08-10 22:35:54 · 78 阅读 · 0 评论 -
PAT A1056 Mice and Rice
NOTE:要理解题目含义队列做比较方便总的来说比较复杂#include<bits/stdc++.h>using namespace std;struct mouse{ int w; int rank=1;}m[1010];int main(){ int np,ng; scanf("%d%d",&np,&ng); for(int i=0;i<np;i++) { scanf("%d"..原创 2021-08-09 15:20:09 · 69 阅读 · 0 评论 -
PAT之简单模拟合集
B1027 打印沙漏这种打印图形的模拟题需要静下心来好好写,争取一次过…先计算要用到多少数量的字符,可以通过等差数列求和计算得到。然后再分析一行要输出多少个空格,多少个字符即可。#include<bits/stdc++.h>using namespace std;int main(){ int n; char c; scanf("%d %c",&n,&c); int row=0; int k; for(k=1;2原创 2021-08-11 16:29:24 · 133 阅读 · 0 评论 -
PAT A1020 A1086 Tree Traversals
这两题都是给出两个序列求另一个序列A1020A1020非常直接,就是根据后序遍历和中序遍历重建二叉树,然后层序遍历输出#include<bits/stdc++.h>using namespace std;const int maxn=35;typedef struct Node* TNode;struct Node{ int data; TNode left,right;};int post[maxn],in[maxn],n;TNode creat原创 2021-08-12 17:19:28 · 156 阅读 · 0 评论 -
PAT B1025/A1074 反转链表
PAT里面的链表题似乎都是一个套路…在结构体中要定义一个flag,来看这个结点是不是在要求的链表中(考虑到无效结点,要把无效结点放在后面去) 结构体中不仅要保存next地址,还要保存当前地址然后利用sort函数把读入了的结点聚在一起使用,输出#include<bits/stdc++.h>using namespace std;const int maxn=100005;struct Node{ int order,address,data,next; bool..原创 2021-08-09 23:12:34 · 89 阅读 · 0 评论 -
PAT A1051 Pop Sequence
纯手动模拟…需要耐心…注意点:栈的操作 pop,top前都要判空每次序列输入前要把栈清空,否则上一次栈里的内容会影响下一次(调试了半天的bug就在于没有清空栈qaq)#include<bits/stdc++.h>using namespace std;int main(){ int m,n,k; int seq[1010]; scanf("%d%d%d",&m,&n,&k); stack<int> s; ..原创 2021-08-08 22:36:30 · 138 阅读 · 0 评论 -
PAT B1045 快速排序
1045 快速排序 (25 分)著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的 N 个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?例如给定 N=5, 排列是1、3、2、4、5。则:1 的左边没有元素,右边的元素都比它大,所以它可能是主元;尽管 3 的左边元素都比它小,但其右边的 2 比它小,所以它不能是主元;尽管 2 的右边元素都比它大,但其左边的 3 比它大,原创 2021-06-06 11:40:04 · 76 阅读 · 0 评论