![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础算法
The sunshine。
实在是太菜了 记忆力也不太好,,我还是写博客记录一下吧wuwuwuwu
展开
-
基础算法_模拟+暴力
题意:给一个队列,n次操作,每次操作可以进行插入或删除,问每次操作后能否则队列元素中选择一个子集,使得子集中元素的异或值为42。输入n和n次操作内容输出每次操作后输出Yes或No思路:因为加进队列里面的数最大才42所以完全可以直接进行暴力求解代码实现:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 5;const ll mod = 1e9 +原创 2021-01-12 22:08:55 · 128 阅读 · 0 评论 -
基础算法_模拟
题意:给一个长度为n的数组A,我们现在要选出一个序列,要求就是这个序列的中位数最接近k,输出最长的那个满足要求的序列在数组A中的下标输入:n和k,数组A输出:最长的满足要求的序列的长度len,以及下标 p1, p2, …, plen (1 ≤ pi ≤ n, pi < pi + 1)input5 31 2 3 4 5output51 2 3 4 5input5 421 2 3 4 5output15思路:直接模拟就好了,但是最开始的时候好像我理解错了题意。代码实现:原创 2021-01-12 22:02:30 · 93 阅读 · 0 评论 -
基础算法_模拟+STL
题意:有n个组,m个人,s条描述语句,问在这m条描述语句之后每个人各收到了多少条信息每一条语句是如下描述的其中一个:t x yt == 1:表示x加入yt == 2:表示x从y出来t == 3:表示x在y组发送了一条信息思路:就是直接模拟,无奈我代码能力太差,没写出来代码实现:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 5;cons原创 2021-01-10 13:06:35 · 70 阅读 · 0 评论 -
基础算法_鸽巢原理+打表
题意:给一个n*m的矩阵,每个小方格都可以取三种颜色。问有多少种染色方法可以使得矩阵中至少一对(x1,y1)与(x2,y2)满足输入:t,代表t组样例每组样例输入n和m输出:染色方案数思路:打表 + 鸽巢原理打表:可以手动打表(很难),也可以想办法代码进行打表鸽巢原理:400个人一定有两个人在同一天生日(通俗易懂哈)官方题解:不妨假设n < m。考虑一个只有2行的矩阵。由于我们只有3种颜色,只能产生9种不同的列组合。如果我们的列数超过9.那根据抽屉原理,我们必定能找到相同原创 2021-01-10 12:10:20 · 158 阅读 · 0 评论 -
基础算法_大水题
题意:思路:大水题,就不说了。。。问题是这种字符变化问题,最后%的是26,不是25代码实现:#include<cstdio>#include<math.h>#include<cstring>#include<algorithm>#include<iostream>#include<set>#include<map>#include<queue>#include<deque>原创 2021-01-08 21:33:49 · 102 阅读 · 0 评论 -
基础算法_模拟
题意:刚开始有一个空栈,我们可以对这个栈进行n次操作,每次操作之后返回栈中数字的最大值a[i],如果栈为空,那么则返回0,即a[i] = 0。。怎样对栈进行操作题目已经给出,需要求的是思路:直接模拟,刚开始队友可能想到线段树维护最大值需要注意的是除了题目中描述的函数的变量类型不改为long long, 其他的变量类型全部变为long long问题 :需要思考的是pop的时候是怎么维护最大值的?答:用一个pre数组存储当前栈中的最大值如果操作是push,我们很容易可以想到pre[top]原创 2021-01-08 21:25:49 · 65 阅读 · 0 评论 -
基础算法_几何+思维
题意:有n个同心圆,最里面的圆的半径为1,然后往外依次是2,3,4…有m条经过圆心的线和圆相交,形成2 * m个交点,这2m个交点将圆等分,直线和圆,以及直线和直线会形成若干个交点,会得到一个点集,问点集中,任意两点之间的最短距离和是多少?、输入:n和m输出:距离和思路:对于同一个圆上的两个点,肯定就是沿着半径走或沿着圆弧走,肯定取min嘛对于不同圆上的点,那就是先沿着半径从一个圆上走到另一个圆上,然后就转变成同一个圆上两个点最短距离的问题了 这种方案和直接沿着半径走,先从一个圆上的一点走到原创 2021-01-08 12:45:26 · 336 阅读 · 0 评论 -
基础算法_生成全排列
题意:有一个机器人,最开始的时候这个机器人在(0,0)点, 机器人只能上下左右四个方向进行移动,给一串机器人移动方向的序列和一个雷的位置,问是否能通过变换这个序列,而不使机器人走入雷区。输入:第一行 输入t,代表一共有t组样例对于每一组样例,首先输入雷的位置mx和my然后输入机器人移动方向的序列字符串输出:如果能通过变换序列而使机器人 不走入雷区,输出变换后的序列,否则,输出“Impossible”输入51 1RURULLD0 5UUU0 3UUU0 2UUU0 0UU原创 2021-01-08 11:38:54 · 76 阅读 · 0 评论 -
基础算法_尺取
题意:一个老师有n个学生,第i个学生可能会得a[i]分也可能会得b[i]分,假设这n个学生中成绩最高的是x,那么只有成绩不低于p% * x的才能通过考试InputThe first line of the input gives the number of test cases, T (1≤T≤5e3). T test cases follow.For each test case, the first line contains two integers n (1≤n≤2e5) and p (1≤原创 2021-01-07 22:27:09 · 108 阅读 · 0 评论 -
基础算法_模拟
题意:题意啊555,好难懂啊大概意思是这个亚子的,就是给了一些文件夹,文件夹里面有子文件夹和文件,有n个是可以忽略的,m个不可以忽略的,问最少可以忽略多少个文件??(什么意思呢?也就是一个文件夹里面的文件都是可以忽略的,就只保留文件夹就好了)思路:可以忽略掉的文件假设有这两个:a/b/ac/b/c(1)如果按单词存储,第二个文件会被删掉,然而第二个文件不可以删(2)如果是按照前缀存的话呢??我们先存的是不能删的文件路径的所有前缀如果能删的路径和不能删的路径有公用前缀,就继续往下面原创 2021-01-06 21:07:47 · 82 阅读 · 0 评论 -
基础算法_扫雷的思维题
题意:给两个n * m的扫雷游戏的图a和b,那我们要做的是什么呢?是这样的qaq,如果一个格子里没有雷,那么这里会有一个数字,这个数字的值等于当前没有雷的格子周围八个方向的雷的数量现在可以对b操作最多⌊ nm/2⌋次每次操作可以将有雷的格子换成没有雷的格子,也可以将没有雷的格子换成有雷的格子问把b换成什么样子的图,能使a和b没有雷的格子的数字之和相等。。。如果没有办法实现,就输出-1输入:n和ma图和b图输出:转换后的b图输入2 4X…XX.X.X.X..X…输出X.XX原创 2021-01-06 20:51:50 · 444 阅读 · 1 评论 -
基础算法_分类+二分
题意:有一个长度为n的线段,两个人在上面走,问最少什么时间两个人的路径能覆盖整个线段??一个人再p1位置,速度为v1.另一个人在p2位置,速度为v2.输入第一行输入一个t代表多组每组样例输入输出所需要的最短时间思路:分类讨论啊1.一个人走2.交叉着走,也就是左边的人往右边走,右边的人往左边走3.左边的人负责左边的这部分,右边的人走右边的这部分,从哪里开始分界呢??哈哈哈,二分求,无论是左边的人走的时间比较长,还是右边的人走的时间比较长,都会使答案偏大。。所以就要使两个人所花费的时间原创 2021-01-06 20:22:53 · 74 阅读 · 0 评论 -
基础算法_二分(lower_bound和upper_bound)
题意:给一个长度为n的a数组和一个长度为m的b数组,问相邻的b数组元素中间最多有多少个a数组元素??输入第一行输入t,代表t组样例输入n和m,分别代表a数组和b数组的长度输入a数组输入b数组输出如果ans == 0,输出Impossible否则,输出ans思路:lower_bound和upper_bound的使用代码实现:#include<bits/stdc++.h>using namespace std;typedef long long ll;const in原创 2021-01-05 21:58:27 · 227 阅读 · 0 评论 -
基础算法_贪心水题
题意:给一个长度为n的序列,Alice和Bob玩游戏.Alice先开始,如果Alice拿到的是偶数,分数就加a[i].否则就不加Bob拿到的如果是奇数就加a[i],否则就不加拿完游戏结束,谁的分数高谁赢哈哈哈问:最后谁能赢??思路:贪心:从大到小开始拿,是自己的就拿走,不是自己的就扔掉代码实现:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5 + 5;原创 2021-01-05 12:28:18 · 270 阅读 · 0 评论 -
数据结构_三分+概率
题意:有一个人,做一个烟花需要n分钟,做的好的概率是p * 0.0001,点燃一次烟花需要m分钟(不管有多少个烟花),如果点燃的烟花中有一个好的,就停止做烟花,否则就继续练习,问最少需要多长的练习时间??输入第一行一个t,代表t组样例接下来的t行,每一行输入n,m,p输出最小的练习时间输入31 1 50001 1 11 2 10000输出4.000000000010141.58528911363.0000000000思路:首先先来说明,每一次都是生产相同数量点燃。原因:这原创 2021-01-05 10:18:50 · 114 阅读 · 0 评论 -
基础算法_思维
题意:给一个锅,这个锅一次可以煎k个饼(每个饼都是只煎一面),花费一个小时,现在需要煎n个饼(两面都煎),最少需要多少个小时??输入描述:The first line has two integers N,K1≤N,K≤100输出描述:Output the answer.输入3 2输出3思路:两种做法:(1)需要煎两面,那么n个饼总共要煎2 * n个一面,那么答案就是2 * n / k向上取整。(2)先煎一面,那么可以煎n / k * k个饼的一面,需要n / k个小时,这个时候原创 2021-01-05 09:14:04 · 226 阅读 · 0 评论 -
基础算法_贪心。。菜啊。。
题意:1420 数袋鼠好有趣有n只袋鼠。每只袋鼠的大小用一个整数表示。一只小袋鼠能装进一只大袋鼠的条件是,大袋鼠的大小至少是小袋鼠的两倍。每只大袋鼠最多可以装一只袋鼠。小袋鼠被装进大袋鼠之后就不能再装其它的袋鼠了。小袋鼠被装进大袋鼠之后就不能被我们看见了。请找出一个装袋鼠的方案,使得被看见的袋鼠最少。(袋鼠不能3只套在一起)输入单组测试数据。第一行包含一个整数n(1≤n≤5*10^5)。接下来n行,每行一个整数si,表示第i只袋鼠的大小 (1≤si≤10^5)。输出输出一个整数,即最少原创 2020-12-13 19:46:41 · 83 阅读 · 0 评论 -
基础算法_等差数列+贪心+特判
题意:1390 游戏得分A与B两人玩一个游戏,这个游戏有若干个回合(可能0回合)。游戏的回合依次标号为1,2,3,4…。你不需要关心游戏的内容,现在只要知道第i回合胜者会获得2*i-1分,每回合游戏不存在平局。现在已知A和B在游戏结束时各获得了x分与y分的总分。问A在这个游戏中至少获胜了几盘?如果给出的x与y一定不会出现那么输出-1.输入多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5每组测试数据有相同的结构构成:每组数据一行包含两个整数x,y,表示A与B最后的总得分原创 2020-12-13 13:36:00 · 333 阅读 · 0 评论 -
基础算法_贪心
题意:1351 吃点心有N盒点心,这些盒子标号为1,2,…N,你有一次机会选择一些盒子作为你的晚餐,但是每个盒子里点心的数量是未知的,不过有人告诉你一些信息:1)这些盒子里的点心总和是C个;2)对于盒子i,其中的点心个数最少有low_i个,最多有high_i个,即low_i<=box_i<=high_i,box_i是第i盒的点心个数。你选择的方式如下,一次挑出N盒中的若干盒,也就是{1,2,…,N}的一个子集,然后拿走你选出的盒子,再打开它们,到此时你才知道你到底获得了多少个点心。为了原创 2020-12-12 23:22:42 · 108 阅读 · 0 评论 -
基础算法_模拟 + 细节
题意:1337 翻转游戏这个游戏与灯有关,有M只灯排成一行,编号为0,1,…M-1.所有灯在游戏初始时都是灭的。这个游戏有N关,你需要按顺序一关关通过,每一关由一个M长的字符串LevS描述,串中每一个字符对应一盏灯,其中LevS[i]对应序号为i的灯。每个字符有三种可能,分别代表三种要求:1)LevS[i]=’+‘表示在这关中灯i的状态必须是开着的;2)LevS[i]=’-‘表示在这关中灯i的状态必须是关着的;3)LevS[i]=’?'表示在这关中灯i的状态可以是开也可以是关,即没有要求;要通过原创 2020-12-11 20:03:19 · 78 阅读 · 0 评论 -
基础算法_STL的map
题意:1280 前缀后缀集合一个数组包含N个正整数,其中有些是重复的。一个前缀后缀集是满足这样条件的下标对(P,S), 0<= P,S < N 满足数组元素A[0…P]的值也在A[S…N - 1]的值中出现,并且A[S…N - 1]中的值也再A[0…P]中出现。换句话说前缀的集合A[0…P]与后缀集合A[S…N - 1]包含完全相同的值。求这样的前缀后缀集合的数量。例如:3 5 7 3 3 5,共有14个集合符合条件:(1, 4), (1, 3), (2, 2), (2, 1), (2,原创 2020-12-10 18:59:01 · 102 阅读 · 0 评论 -
基础算法_最小化最大值(二分答案)
题意:1243 排船的问题一个码头中有N艘船和N个木桩,船的长度为2*X,码头的宽度为M,N个木桩的位置(相对码头左岸的位置)会在数据中给出。把所有的船排成一排,船和船之间不能重叠,也不能超出码头的两岸。船和木桩之间用绳子连接,并且1个木桩只能栓1条船,绳子的一头拴在木桩上,另一头拴在船的中间。船中间到木桩的距离,就是所需的绳子的长度。由你安排船的位置,使得所用到的最长的绳子最短。输出这个最短的长度,如果码头排不下所有船则输出-1。例如:N = 3, X = 2, M = 16。三个木桩的位置原创 2020-12-09 23:39:07 · 308 阅读 · 0 评论 -
基础算法_二分答案
题意:给出一个长度为N的正整数数组,不改变数组元素的顺序,将这N个数分为K组。各组中元素的和分别为S1,S2…Sk。如何分组,使得S1至Sk中的最大值最小?例如:1 2 3 4 5 6分为3组,{1 2 3} {4 5} {6},元素和为6, 9, 6,最大值为9。也可以分为{1 2 3 4} {5} {6}。元素和为:10 5 6,最大值为10。因此第一种方案更优。并且第一种方案的最大值是所有方案中最小的。输出这个最小的最大值。思路:二分答案就直接二分答案,但是这道题比较。。因为题目并没有说序原创 2020-12-06 18:11:28 · 369 阅读 · 0 评论