随笔分类 -  PTA

摘要:一、题目描述 二、解题思路 这个题用常规的dp是行不通的,应为数据量太大了。那么应该怎么优化呢。 答案是采用矩阵优化 我们构造一个这样的矩阵,然后乘以以F1、F2构造得2*1的矩阵 为了发现规律,我们再乘一次 我们发现每一次左乘一个我们构造得这样的矩阵,我们都会得到下一个数列。分析下标关系可知,我们 阅读全文
posted @ 2022-03-23 22:02 scannerkk 阅读(60) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这题其实就是枚举每个位置,然后根据这个位置判断需要剔除几个人,反向思考,我们需要剔除几个人。 pos之前的部分做一个最长递增子序列的dp,用前面的总人数减去最长递增就是前面部分需要剔除几个人 pos之后的部分做一个最长递减子序列的dp,用前面的总人数减去最长递减就是后面部 阅读全文
posted @ 2022-03-23 21:51 scannerkk 阅读(39) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这道题是一个贪心的问题。不能想当然的直接按照面积直接装,因为箱子是一个整个的,不可以分开。 首先是6*6的箱子,你可以直接装 然后是5*5的箱子,你在装完一个5*5之后,最多只能再装11个1*1,是1*1尽量往这里面装。一直到5*5的箱子装完 然后是4*4的箱子,装完一个 阅读全文
posted @ 2022-03-23 21:46 scannerkk 阅读(233) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这题是一个概率DP题,我们考虑三种情况 我们用dp[i][j]代表i张印章能凑出j种,设p = 1 / n 显然第一种情况 当i<j时,dp[i][j]=0,因为不可能凑出j种 第二种情况 当j = 1时,此时选出的i张里面都是某一种,概率是(p^i),又因为可能都是n中 阅读全文
posted @ 2022-03-22 18:26 scannerkk 阅读(36) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 每次插入一个元素我就进行一次堆的调整,不要存着最后再进行堆调整。用一个map记录每个元素在队中的位置,剩下的就是读入的问题了。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 const int inf 阅读全文
posted @ 2022-03-20 22:00 scannerkk 阅读(79) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 我们枚举n的因子,然后枚举这个因子的最大长度,然后做个标记。最后在输出答案的时候反推就可以了。 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #define rep(i,z,n) for(i 阅读全文
posted @ 2022-03-19 16:27 scannerkk 阅读(170) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这里我们直接枚举1的个数,然后看看是否能够整除,就是个大数除法的内容。这里注意中间可能有为0的情况,列如530 / 5 = 106中间这个0要注意。 这里大数除法是这样进行的。 比如说123 / 5 第一次1 / 5为0,那么第一个就为0,余数为1 第二次利用上次的余数* 阅读全文
posted @ 2022-03-19 16:23 scannerkk 阅读(116) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 用map模拟这个链表,然后用vis数组去重,用两个vector存答案,一个存去重后的链表,另一个存去重的节点。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 struct node{ 4 string 阅读全文
posted @ 2022-03-19 16:17 scannerkk 阅读(202) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这是个简答的贪心题,就直接按照平均价位从大到小排序,然后一直取就行了,直到所有的吨用完了。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 struct node{ 4 double num; 5 do 阅读全文
posted @ 2022-03-19 16:13 scannerkk 阅读(27) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 首先根据他的原规则建树,然后根据原规则相反建树。最后遍历这两棵树中是否有一颗的前序和输入序列相同,相同就输出这棵树的后序。题目很简单,就是做起来挺麻烦的。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 阅读全文
posted @ 2022-03-19 16:11 scannerkk 阅读(45) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 首先这个题意讲的我迷糊,最后才知道这个Nc就是交集,Nt就是并集。然后我老老实实用set,map做,T了一个点。最后上网一搜,发现别人用了神奇的stl大法求交集并集。 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair 阅读全文
posted @ 2022-03-19 16:07 scannerkk 阅读(90) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这个题就是个暴力枚举题,分两种情况。 (1)——奇数情况:我们可以这样搜,从某个位置开始向两边枚举,直到到边界 (2)——偶数情况:对于每一个位置,我们从当前位置向左,从当前位置的下一个位置向右。 三、代码实现 1 #include "stdio.h" 2 #includ 阅读全文
posted @ 2022-03-19 16:04 scannerkk 阅读(87) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 这个题排个序就可以了,在输入的时候用个vis数组去重就行了。 三、代码实现 1 #include <bits/stdc++.h> 2 using namespace std; 3 double b[100010]; 4 int red[100010]; 5 struct 阅读全文
posted @ 2022-03-19 15:58 scannerkk 阅读(52) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 刚开始想到的是直接暴力模拟算出答案,然后超时了,后来发现其实对于每个轨道,如果需要新增轨道,那么最后那个列车的编号一定是递增的,那么此时我们可以采用二分优化这个搜索过程。优化后成功AC。 比如样例 你会发现每次插入都是递增的,故可以采用二分优化算法。 三、代码实现 1 # 阅读全文
posted @ 2022-03-19 15:47 scannerkk 阅读(309) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 对于每个成绩排个序,去掉最高和最低就行了,然后把平均分放入vector就行了。再把vector排个序输出 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int n,m,k; 4 double ave[ 阅读全文
posted @ 2022-03-19 15:37 scannerkk 阅读(85) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 要想两边的差距尽可能大,而且要人数尽可能平均,那么这就是一个典型的贪心的问题了。我们只需要把数组排个序,然后从前到一半,从一半到最后,统计一下和。然后输出即可。但是这个题有个问题就是当人数为奇数时,你要考虑把中间那个人加到左边还是右边答案更优。 三、代码实现 1 #inc 阅读全文
posted @ 2022-03-19 15:34 scannerkk 阅读(102) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 定义一个map,set,vector,vector负责存答案,map负责统计人和分数的映射,最后遍历答案串的时候,如果他没有在set里面出现过,并且他的map映射的分数大于平均分,那么就是答案,直接输出就可以。 三、代码实现 1 #include "bits/stdc++ 阅读全文
posted @ 2022-03-19 15:30 scannerkk 阅读(63) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 利用map存储这个链表的顺序。前面那个string代表当前节点,映射的是一个结构体,里面存了下一个节点的信息,遍历一遍全部存入一个vector里面,然后从两边输出就行了。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespac 阅读全文
posted @ 2022-03-19 15:24 scannerkk 阅读(91) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 一个普通的bfs模板题,但是要用链式前向星优化内存,不然机会内存超限。在bfs过程中不断更新答案,也就是最小点。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int heads[10010]; 4 阅读全文
posted @ 2022-03-19 15:21 scannerkk 阅读(23) 评论(0) 推荐(0) 编辑
摘要:一、题目描述 二、解题思路 用数组模拟建完全二叉树,可知节点个数,若为完全二叉树,则前n个节点没有为0的,若前面有为0的,那么我们就输出No。至于输出节点,我们可以一直遍历到找到n个数再退出。刚好从前到后满足层次遍历。 三、代码实现 1 #include "bits/stdc++.h" 2 usin 阅读全文
posted @ 2022-03-19 15:18 scannerkk 阅读(47) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示