随笔分类 - PTA
摘要:一、题目描述 二、解题思路 这题设计两个栈就可以做出来了,属于简单数据结构的应用,判断一下除零的情况即可 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 stack <int> s1; 4 stack <char> s2; 5 i
阅读全文
摘要:一、题目描述 二、解题思路 利用map,vector进行映射,然后读出来就可以了,本题是一个stl的妙用。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 map <vector<int>,int> mp; 4 int main(
阅读全文
摘要:一、题目描述 二、解题思路 用mp记录前面出现过的数字,如果后面的数字的因子出现过,则这个数不加入答案。最后把答案正着打一遍,倒着打一遍就行了。 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #define rep(i
阅读全文
摘要:一、题目描述 二、解题思路 并查集模板题,只不过输出的时候不是输出a[i]而是要再查一次,输出find(a[i]) 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #define rep(i,z,n) for(int i
阅读全文
摘要:一、题目描述 二、解题思路 这个题打比赛的时候以为是”马拉车“就直接跳过了,打完比赛回来想了两分钟发现这个题就是个LCS的模板题。亏大了!!!!直接把原串翻转,然后对原串和翻转后的原串做DP,最后dp[n][n]就是答案。 三、代码实现 1 #include "bits/stdc++.h" 2 us
阅读全文
摘要:一、题目描述 二、解题思路 这题是一个拓扑排序的模板题,所谓拓扑排序就是每次把度为0的依次输出,但是要做到字典序最小该怎么办呢? 上网学了手,用优先队列(小根堆)每次会把最小的放在队首,故最终的答案一定是最小的字典序。 三、代码实现 1 #include "bits/stdc++.h" 2 usin
阅读全文
摘要:一、题目描述 二、解题思路 我们把tj的马和qw的马从小到大排个序 情况1:如果tj最大的马比qw最大的马快,则答案加1 情况2:如果tj最慢的马比qw最慢的马快,则答案加1 情况3:如果tj最慢的马比qw最快的马慢,则答案减1(也就是用最慢的马去耗qw最快的马) 情况4:如果tj最慢的马和qw最快
阅读全文
摘要:一、题目描述 二、解题思路 这个题难的点在于阅读理解,导致我比赛的时候知道他是个并查集,但是没有写出来。这里我们并不是把人数合并,而是把爱好合并,最后遍历爱好就可以找到答案了。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 ma
阅读全文
摘要:一、题目描述 二、解题思路 简单做法用c++中的stl中string类的find函数一句话解决 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #define rep(i,z,n) for(int i = z;i <=
阅读全文
摘要:一、题目描述 二、解题思路 这个题打的时候没写出来,脑子抽了,很久没用栈写过题了,所以非常sb。思路非常简单,就是当栈不为空时,匹配输入的元素和栈顶,如果匹配了就弹出栈顶,不然就加入栈顶。最后如果栈区元素不为空,则不匹配。 三、代码实现 1 #include "bits/stdc++.h" 2 us
阅读全文
摘要:一、题目描述 二、解题思路 简单贪心问题,先根据他的右端点从小到大排序,再根据左端点从小到大排序。最后开始遍历寻找答案,如果后一个的左端点大于等于前一个的右端点答案就加一,因为没有相交的地方,所以后面的点一定不会与前一个点相交。 三、代码实现 1 #include "bits/stdc++.h" 2
阅读全文
摘要:一、题目描述 二、解题思路 利用map把每一次该层所对应的数值的各个位置存进去,然后进行dfs调用,当发现到了第n - 1层的话就可以比较一下答案了,需要再加上一个剪枝操作,就是当当前的步数已经比答案的步数相等,或者已经大于答案的步数时,再搜下去已经没有必要了。 三、代码实现 1 #include
阅读全文
摘要:一、题目描述 二、解题思路 弄个string的栈,把这些全部存进栈,然后从栈顶一直往下走,碰到两个数字和一个操作符就进行一次操作,再入栈就行。(注意除号和减号不要写反了,不然跟我一样调一个小时) 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair
阅读全文
摘要:一、题目描述 二、解题思路 kruscal模板题 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #define rep(i,z,n) for(int i = z;i <= n; i++) 4 #define per(i
阅读全文
摘要:一、题目描述 二、解题思路 这题是经典的bfs题,但是因为这个守卫每次都会多用掉1个时间,但是我们bfs每次只会扩展一步,所以就会提前到达终点,但是不是最优解的情况 比如说下面这种情况 我们都知道两点之间直线最短。但是这个直线上的士兵这么多,最后花费的时间可能会比走弯道更多。所以我们的解决方法是,设
阅读全文
摘要:一、题目描述 二、解题思路 mp模板题,注意输入即可 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 map <string,string> mp; 4 int main() 5 { 6 string a,b; 7 while(1
阅读全文
摘要:一、题目描述 二、解题思路 首先想到的是dfs进行逐个遍历,但是会有两个错 第一个:如果出现不能整除的情况,那么答案就会丢失,因此我们需要设置一个精度,在这个范围内的答案我们都要去接受他。 第二个:如果出现(a + b)* (c + d) == 24的这种情况,我们的dfs逐个遍历就不能做到这种,因
阅读全文
摘要:一、题目描述 二、解题思路 首先利用string把整个字符串读入 然后用逗号进行分隔成三个字符串,然后用find和rfind函数解决即可。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int main() 4 { 5 stri
阅读全文
摘要:一、题目描述 二、解题思路 简单dp,dp数组的含义为前i个数的最长上升子序列,因为这里的数据范围很小,故不需要二分进行优化,最后扫一遍整个数组的最大值就是答案。 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3 #def
阅读全文
摘要:一、题目描述 二、解题思路 简单暴力解即可以,当然可以在if条件出进行优化,if这个数能被2整除一定不是素数,然后再是判断是否是回文,再判断是否是素数,这样能最大减小常数。 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<int,int> 3
阅读全文