
模拟
浑水摸鱼拒绝996福报
这个作者很懒,什么都没留下…
展开
-
关于 欧拉回路的总结 UVA 10129题目 P1341无序字母
首先来总结一下做欧拉回路,欧拉路径问题的对策欧拉回路;所有边都经过且只经过一次,最后一个点回到起点欧拉通路:所有边都经过且只经过一次,最后一个点任意不能是起点判断欧拉回路的办法:首先所有图要联通无向图:每一个点的度都为偶数即可有向图:每一个点的出度与入度即可判断欧拉路径的方法:无向图:有俩个点的度数为奇数,有从其中一个奇数顶点到另一个的奇数顶点有向图:有俩个点各自的出度与入度分别相差一,从出度比入度小一的点开始到另一个点结束。从算法上讨论欧拉路径(如果是欧拉回路就一定是路径)1.无向图原创 2021-04-29 22:34:37 · 88 阅读 · 0 评论 -
树的层次遍历
总结一下:树的层次遍历本身这个层次遍历是完全毫无难度的,只需要用一个队列来模拟层次遍历就可以了,但是这个输入格式是真的恶心,参考了lrj的代码来看看这个输入格式咋写的,自己是真的想不到了 ,// 树的层次遍历.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<string>#include<cstring>#include<algorithm>#include&l原创 2021-04-22 23:18:53 · 194 阅读 · 0 评论 -
树 Tree UVA
总结一下:此题要求我们从树的中序遍历,后序遍历来推出叶子结点到根的最小值,那么我们需要建立起这棵树,我们知道后序的末尾的节点为树的根,那么我们就可以以此入手,中序的根处于左子树与右子树的分界点,正好将这棵树分为左右子树,递归处理左右子树。关于是拿指针还是数组来存这棵树,度可以,但这一题那数组来存储是比较方便的,树建立好以后,就可以dfs搜索树的叶子结点的sum,来求满足题目的节点。// 树 TREE.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <原创 2021-04-22 22:57:41 · 78 阅读 · 0 评论 -
天平
总结一下:这一题是lrj书籍中归为树的题目,其实并不需要使用建树这样子的算法,只需要思考如果我想这个天平平衡,那么是不是我的左天平是要平衡,右天平也要平衡,如果他们俩个不平衡那么总的俩个也不可能平衡,先看左右是否平衡,再看总体是否平衡,这样子层层探究的很容易想到需要用到递归,一层一层先看最下层是否满足平衡。// 天平.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>using namespace std;bool j原创 2021-04-22 22:47:30 · 123 阅读 · 0 评论 -
发射栈
单调栈的问题= =发现了单调站用的递减的非常多总结一下:可以看到题目要求我们找最近俩边的比当前信号塔高的塔,然后改变这俩塔的能量值,那么如果我们创建一个单调递减的队列,新来的元素比栈顶元素的高度小的话,那么很显然新来的元素不能接受能量,但一旦比栈顶元素高的元素来了,那么根据提议,这个高的塔接受能量之后,栈顶元素就完成了他的使命,当然你每次加入一个较低高度元素,栈顶元素相应的能量值就要增加。叙述完毕// 发射栈.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#includ原创 2021-04-16 23:42:49 · 75 阅读 · 0 评论 -
Look Up S 洛谷
这也是一道单调队列的题目哈总结一下:题目要求你让奶牛排成一排,看每一只奶牛能看到最近的比他高的奶牛,如果啥也没看到就输出0,那就直接初始化一个数组所有元素为0,之后呢#include <iostream>#include<stack>using namespace std;const int maxn = 100000 + 50;int cow[maxn];int H[maxn];int saw[maxn] = { 0 };int s[maxn];int top原创 2021-04-16 23:36:47 · 111 阅读 · 0 评论 -
最大数 洛谷
来到了我们的栈专题了,新学到了一个叫单调栈的东西,原理非常简单,但是确实在某些问题的思路上非常的巧妙,比如说这一题总结一下:该题目用了单调栈的原理单调栈:顾名思义也就是单调递减或者单调递增的栈,你可以用数组,淡然也可以用STL里的Stack,都是很方便的,假设是单调递增的栈,如果前面的数字比你大那你就将这个数字出栈就可以了。该题创建了一个普通数组用以存输入进来的数字,然后开了一个单调栈,用以储存一个单调递减的栈,至于为何是单调递减呢,因为单调递增数列是不符合本题的思想的(可以自己尝试一下),单调递减的原创 2021-04-16 23:28:50 · 150 阅读 · 0 评论 -
队列安排
总结一下:我们可以看一下这题目就是给小朋友排队,随意删除啊,增添,这明显是一道链表的模板的题目咳咳,很简单。就正常在俩个数之间差一个数,俩个数之间删除一个数,改变几条方向,删完之后的左右边可以设为一个取不到的很大数字。// 对列安排.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<string>#include<algorithm>#include<cstring&g原创 2021-04-13 22:20:37 · 223 阅读 · 0 评论 -
大理石在哪里
这题目额就是个模板题目,就看一看石头上的数字是否符合我给的,额很简单,排序之后就搜索一下,搜索的话还可以用二分降低一下时间复杂度。// 大理石在哪里.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include<algorithm>#include<string>using namespace std;int main(){ int n, p;int kase = 0; while原创 2021-04-13 22:09:28 · 191 阅读 · 0 评论 -
平台 洛谷
总结一下:此题要求我们看看从平台左右边落下之后会落在哪一个平台上,我刚刚开始编的无法解决上下平台相邻,题目要求输出的是0,而我输出的是低高度平台的值,所以后来着手解决这一问题解决问题:刚开始我想的是排除掉边在俩个边缘的情况,然后判断下面平台是否是连续的但要判断的条件太多了,因为本身我的想法就存在非常严重的缺陷,这是想到了我们可不可以从上至下搜索满足条件的平台,而且呢题目要求重叠的平台我们选择序号偏小的品台,所以我们优先以高度大为优先级大,次级就按序号小排,然后从上至下来搜索。#include <i原创 2021-04-13 22:05:55 · 1458 阅读 · 0 评论 -
学生分组
总结一下:这个题目学生分组思路刚开始我想的是先比较在范围以外的人,集合比最低值小的离最低值的总和,加上集合比最大值大的离最大值的总和,然后呢两者相减看谁比较大,然后看一看符合范围里的人数能不能盖过剩余的数量,如果满足不了就输出-1,行的话输出集合外面大的那个。但是我在本地IDE可以输出正确值 但是没通过样例很恐怖,所以在参考了别人的思想之后,直接在之前先判断符不符合,可以的话就输出大的那个数,很简单。RNG加油0.0// 学生分组.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。原创 2021-04-13 21:44:45 · 288 阅读 · 0 评论 -
2021-04-11
太长了哇靠很恐怖 主要刚开始想的时候没有优化代码量。总结一下:该题目要求我们去用代码来模拟俩个下棋的人,棋的规则相当于五子棋差不多反正就是喂起来了就吃光,给你一个已经有棋子的棋盘,现在叫你以某一方起手,看一看下到哪里才可以100%将对方棋子围起来吃掉,然后输出这些位置,如果没有呢那就换一个,还有一中操作是,在这些满足条件的点上选一个位置下之后呢将所有被吃掉的棋子换成妮子的颜色的棋子,写到这个地方就知道这个题目代码两会很大。我先写了一个判断操作的函数,是输出位置还是下棋,然后分别写了俩个函数用以输出位置和原创 2021-04-11 13:37:36 · 76 阅读 · 0 评论 -
正方形 UVA201
总结一下:该题目要你去写一个判断图里面有几个正方形 然后按长度顺序输出这些正方形的数量,那么用一个二维数组来存储这个图形是很简单的,关键是如何去判断呢判断这个咳咳 我们就用最原始的方法去慢慢一个一个点来判断,题目告诉我们正方形的长度,那我们就从(1,1)这个点开始从长度1到n来推测这个正方形是否是成立的嘻嘻,就完事了#include <iostream>#include<string>#include<algorithm>using namespace std;原创 2021-04-11 13:20:29 · 170 阅读 · 0 评论 -
象棋 UVA 1589
总结:这个代码可就长太多了- -题目是要求我们看看能否将死对面黑将,炮,帅,车在逻辑上的移动我们可以归为一类,但就是炮呢在遇到自己的同色棋子之前的位置他是无法进行进攻的,所以我们需要创建一个attack来表示这个到底是帅,车还是炮。他们移动是模拟四个方向的移动。马和黑将单独写一块代码来代替他们的移动。注意的点1.炮在进入攻击状态后,帅,车在碰到红子是还是要把他吃掉的,但不能够在下去。碰到黑将是不用管,直接继续改变该条方向上的状态2.炮在非攻击状态下碰到黑将是无法吃到的哦。#include <原创 2021-04-11 13:08:40 · 145 阅读 · 0 评论 -
2021-04-11
总结:约瑟夫问题的变钟,不过他是一个双向的,本来尝试着想用队列来模拟的不过队列无法获取队尾的元素的东西所以遂而放弃,改用比较普通的方法,利用循环队列的法则,这里有一个小技巧需要记住一个p=(p+n-1+d)%n+1表示p走d步长的距离并在n这个大范围里循环,但是是从1开始的哦#include <iostream>#include<string>#include<algorithm>using namespace std;const int maxn = 25;原创 2021-04-11 11:20:56 · 78 阅读 · 0 评论 -
刽子手游戏 UVA489
总结:这题也是比较简单的,每次猜一个字母,才玩这个字母之后呢,那这个单词里就不会存在这个字母了,我们可以用visited【maxn】来存储是否已经找了这个单词了,但我们也可以将这个字符串中的这些字母全部改为空格来代替这个数组的功能更为巧妙。#include <iostream>#include<string>#include<cstring>#include<algorithm>#include<vector>using namespa原创 2021-04-11 11:13:57 · 96 阅读 · 0 评论 -
古老的密码UVA 1339
思考:此题为例题给定俩个字符串 要求你看看他们在解密后是否是匹配的,我们可以不去关注他的配对是否是正确的,因为一串字符串重排在加映射后可以,这串字符策相应在字母表中的顺序是无法改变的,因此映射之后的字母在字母表中的顺序以及相应个数与愿字符串是相同的,只要抓住这个特性这题就迎刃而解了。#include <iostream>#include<string>#include<cstring>#include<algorithm>using namespa原创 2021-04-11 10:57:22 · 100 阅读 · 0 评论