![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法入门经典训练指南
_枫南_
这个作者很懒,什么都没留下…
展开
-
UVA 11078打卡
算法竞赛入门经典训练指南打卡题目链接:UVA 11078思路因为i是肯定再j前面的,所以我们只需要对输入的数进行处理 首先上第一个数据作为i,之后每输入一个数据 先假设其为j,查看差值然后将最大的差值存入ans中 再更新i,让i为最大值即可具体细节见代码注释代码如下:#include <iostream>using namespace std ;const int INF = 10e6 ;int main(){ int i , t , n , x ;原创 2020-08-18 10:29:47 · 87 阅读 · 0 评论 -
UVA 11462打卡
算法竞赛入门经典训练指南打卡题目链接:UVA 11462思路原创 2020-08-18 10:30:11 · 113 阅读 · 0 评论 -
UVALive 3177打卡
算法竞赛入门经典训练指南打卡题目链接:UVALive 3177思路首先,毋庸置疑,肯定相邻的两个人是要分开拿礼物的,即不能拿到同一种,那么1.对于偶数个人来说,只要第一个人和最后一个人完全可以按照奇偶错开比如第一个人拿1 2 ,第二个人拿 3 4 ,第三个人又可以拿 1 , 2 所以我们只需要找到相邻的两个人所要礼物加起来最多的礼物数即可 定义i遍历数组 ans = max(r[i] + r[i + 1] , ans)2.对于奇数个人来说,如果只是奇偶错开,则第一个人和最后一个人原创 2020-08-17 14:04:15 · 90 阅读 · 0 评论 -
UVALive 3902打卡
算法竞赛入门经典训练指南打卡题目链接:UVALive 3902思路首先,我们可以将其转化为树状可以看出我们只需要查看它的深度最大的节点,选择它的k级祖先,然后每放置一台服务器,进行dfs,将可以覆盖的节点全部覆盖掉然后循环查找寻找深度最大的节点,放置服务器,覆盖这个操作即可具体细节看代码注释代码如下:#include <iostream>#include <vector>#include <cstring>using namespace std原创 2020-08-17 13:21:54 · 80 阅读 · 0 评论 -
UVA 11520打卡
算法竞赛入门经典训练指南打卡题目链接:UVA 11520思路使用暴力枚举的方法查看即可,没有什么难的代码如下:#include <iostream>#define ton(i , n) for(int i = 0 ; i < n ; ++ i)using namespace std ;char letter[15][15] ;int main(){ int t , k = 1 ; cin >> t ; while (t --){原创 2020-08-14 13:40:58 · 87 阅读 · 0 评论 -
UVALive 3635打卡
算法竞赛入门经典训练指南打卡题目链接:UVALive 3635思路就假定每个人得到的派的面积为x,然后进行判断如果每个派分出来的派加起来大于等于f + 1个,则说明此时可以使用二分查找找到最大的x即可没有具体细节,逻辑简单代码如下:#include <iostream>#include <cmath>#define max_n 10000 + 5#define ton(i , n) for(int i = 0 ; i < n ; ++ i)using原创 2020-08-14 13:07:16 · 112 阅读 · 0 评论 -
UVALive 3971打卡
算法竞赛入门经典训练指南打卡题目链接:UVALive 3971思路使用二分查找的方法,假设答案为q,每个类型配件中找到价格最小且品质因子大于等于q的配件,查看加起来的价格是否不超过预算即可思路简单,具体细节看代码注释代码如下:#include <iostream>#include <vector>#include <map>#define max_n 1005using namespace std ;struct Component{ i原创 2020-08-13 13:08:24 · 96 阅读 · 0 评论 -
UVA 10795打卡
算法竞赛入门经典训练指南打卡题目链接:UVa 10795思路对于汉诺塔问题,首先需要做的是将大的盘子移动到目标位置所以我们应该首先找到大的盘子进行判断,如果大的盘子在目标位置上,则不动,如果不在则要先移动大的盘子因此首先找到最大的不在目标位置的盘子然后如书上提供的思路算出初始局面移动到参考局面和目标局面移动到参考局面的步数之和再加1即为最终结果具体的细节看代码注释代码如下:#include <iostream>#define LL long long#define ton原创 2020-08-13 13:02:39 · 89 阅读 · 0 评论 -
UVa 11384打卡
算法竞赛入门经典训练指南打卡题目链接:UVa 11384思路对于1,,2,3,4,5,6.....n,最终的结果也就是要把所有的数变为0,即所有的数都相同所以我们只需要每次操作让不同的数变少即可,一开始有n个数(不算0),最终要变为只有1个数因为是递增,所以每次操作最多可以使一半的数变成相同的数所以只需要判断什么时候n==1即可,此时除了0之外,只剩下一个数将其变为0即可注意:n指有多少个还剩多少个不同的数字,但是不包含0主要是今天两道打卡题难度不高,没事做了,所以开始绕圈圈代码如下:原创 2020-08-11 12:44:55 · 134 阅读 · 0 评论 -
UVa 11210打卡
算法竞赛入门经典训练指南打卡题目链接:UVa 11210思路简单的暴力枚举题,我们可以分别尝试添加34张牌中的一张牌,凑成14张牌,查看是否可以和牌 如果可以和牌,则输出这张牌,如果所有牌加上去都不可以和牌则输出Not ready判断和牌的方式:枚举+深搜+回溯 首先枚举将,然后深搜其他的牌是否满足可以组成四组(刻子和顺子),如果可以则说明可以和牌具体细节看到代码注释代码如下:#include <iostream>#include <vector>#defi原创 2020-08-11 12:22:59 · 90 阅读 · 0 评论 -
UVALive 3401打卡
算法竞赛入门经典训练指南打卡题目链接:UVALive 3401思路题目的要求是让所有的立方体完全相同,其实就是让n个正方体变成一样的 对于一个正方体,可以让任意一个面作为前面,然后以一个和它相邻的面作为顶面 所以对于一个正方体,按照题目的编号方式,可以有24种情况(如果实在无法理解,可以用一个魔方,选一个颜色对着你,再选一个颜色朝着上方,你会发现有24种放法)假设有两个正方体,一个正方体我们作为参照,另一个正方体用一种放法,两个立方体只有一个面的颜色不同,其他面颜色一致,则需要涂的面就只有一原创 2020-08-10 14:59:51 · 63 阅读 · 0 评论 -
UVA 11464打卡
算法竞赛入门经典训练指南打卡题目链接:UVA 11464思路如果我们要写出一个上述的偶数矩阵,肯定是先确定第一排,然后再根据第一排确定第二排,通过第一排和第二排确定第三排。也就是说我们必须要先确定第一排的数,再推导下面的数。而每个数都可以是0或者1,所以第一排我们可以使用2进制来确定第一排的数。这样可以使第一排的每种可能都出现。然后我们再通过第一排确定第二排,一直到写出整个偶数矩阵为止。此时判断该矩阵与我们输入的矩阵有多少个地方是变化了的即可具体的细节可以看代码注释代码如下:#include原创 2020-08-10 14:15:47 · 87 阅读 · 0 评论 -
UVALive 2995打卡
算法竞赛入门经典训练指南打卡题目链接:UVALive 2995思路主要有以下两点: 1.如果在这个某个视图下看到的是".",那么说明这个位置往里的n的为止都没有方块 2.如果某一个地方没有方块,那么从不同视图看到的这个位置的颜色应该不同所以,只需要将每个方块的颜色存储下来看是否有冲突,有冲突的地方按照第二点改为空即可,最后只需要查看不为空的有多少个代码如下:#include <iostream>#define ton(i , n) for(int i = 1 ; i <原创 2020-08-07 18:53:01 · 134 阅读 · 0 评论 -
UVa 10881打卡
算法竞赛入门经典训练指南打卡题目链接:UVa 10881思路首先有以下几点: 1.由于是在直线上运动,所以蚂蚁相撞后各自沿对方之前的路线走,即可以看出对穿而过(这个大家可能都理解) 2.不管两只蚂蚁往一个方向走还是相向而行,从左往右数第1只蚂蚁永远是第一只蚂蚁,同理可得对于所有蚂蚁,从左往右数第i只永远是第i只综上:我们可以忽略碰撞,直接计算每只蚂蚁t秒后的位置,然后按照最终位置从左往右数,第i只蚂蚁所在的位置即是初始状态第i只蚂蚁的最终位置 然后我们所需要做的就是记录下输入的顺序,最后按照顺原创 2020-08-07 18:13:16 · 129 阅读 · 0 评论 -
UVALive 3708打卡
算法入门经典训练指南打卡题目链接:UVALive 2708思路我们可以将园看成一条直线,则第一个墓碑作为原点不动,其他的墓碑将该直线均分即可只需要查看原有的第2、3.....n个雕塑会移动到第几个,再算出他们一定的距离即可而对于第i 个雕塑,添加前的位置为i / n * 1000 添加后则是第i / n * (n + m)个雕塑,而该值不可以为小数,所以只能取整,四舍五入,距离哪个点近则移到哪个点。代码如下:#include <iostream>#include <m原创 2020-08-06 18:17:57 · 102 阅读 · 0 评论 -
UVa 11300打卡
算法入门经典训练指南打卡题目链接:UVa 11300思路举个栗子:设现在有四个人,第i人给上一个人的金币和收到上一个人的金币的和为xi,如图:由上图可知:对于A1:M = A1 - x1 + x2 --> x2 - x1 = M - A1 = -C1 --> x2 = x1 - C1对于A2:M = A2 - x2 + x3 --> x3 - x2 = M - A2 = -C2 --> x3 = x1 - C2 - C1对于A3:M = A3 - x3 + x4 --原创 2020-08-06 12:47:42 · 85 阅读 · 0 评论 -
UVa 11729打卡
算法入门经典训练指南打卡题目链接:UVa 11729思路如图:由图可知:总时间的长短跟重叠部分有关。而重叠部分则是前一次交待任务的执行时间因此,只需要按照执行时间从长到短交待即可代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std ;struct Jobs{ int b ; int j ;};bool cmp(Jo原创 2020-08-05 18:28:20 · 110 阅读 · 0 评论 -
UVa 11292 打卡
算法入门经典训练指南打卡题目链接:UVa 11292思路:求需要花费的金币最少,即骑士的能力值之和最小,而每个骑士又必须且只能杀掉一个头。所以我们只需要将骑士的能力值和恶龙的头的直径按照从小到大排序如果该骑士可以砍掉当前的头,则记下,如果不可以则继续查找下一个骑士最后返回结果即可代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std ;i原创 2020-08-05 17:42:35 · 109 阅读 · 0 评论