返回顶部

06 2020 档案

摘要:题意:有$n$本书,A和B都至少要从喜欢的书里面读$k$本书,如果一本书两人都喜欢的话,那么他们就可以一起读来节省时间,问最少多长时间两人都能够读完$k$本书. 题解:我们可以分$3$种情况来存,即: ​ 1.\(a=b=1\). 2.\(a=1,b=0\). 3.\(a=0,b=1\). 对于2和 阅读全文
posted @ 2020-06-29 13:49 _Kolibri 阅读(239) 评论(0) 推荐(0)
摘要:题意:有一组数,刚开始时$x=0$,每次可以让$x$或让某一个元素+=$x$后$x$,每个元素只能加一次$x$,问最少操作多少次使得所有元素能被$k$整除. 题解:每个元素只能被加一次,我们对每个元素%\(k\),然后记录他们出现的次数(不考虑$k$能整除的情况),因为$x$是递增的,所以如果我们将 阅读全文
posted @ 2020-06-29 13:23 _Kolibri 阅读(292) 评论(0) 推荐(0)
摘要:题意/题解:经典括号匹配题目,不多说了. 代码: int t; int n; string s; int cnt; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>t; while(t--){ cnt=0; int ans=0; c 阅读全文
posted @ 2020-06-29 13:10 _Kolibri 阅读(120) 评论(0) 推荐(0)
摘要:题意:有一个数$n$,每次操作可以使$n*=2$或$n/=6$(如果能被整除),求最少操作次数使得$n=1$,如果不满足,输出$-1$. 题解:我们只要看$n$的质因子即可,如果要满足条件,那么它的质因子只能含有$2$和$3$,并且$2$的次数不大于$3$的次数.直接去找$2$和$3$的次数即可.( 阅读全文
posted @ 2020-06-29 11:46 _Kolibri 阅读(186) 评论(0) 推荐(0)
摘要:题意:有三个正整数$x,y,n$,再$1$~$n$中找一个最大的数$k$,使得$k\ mod\ x=y$. 题解:先记$tmp=n/x$,再判断$tmp*x+y$的值是否大于$n$,如果是,直接输出$(tmp-1)x+y$,否则输出$tmpx+y$. ps:这题好像可以直接二分搞 代码: int t 阅读全文
posted @ 2020-06-29 11:41 _Kolibri 阅读(137) 评论(0) 推荐(0)
摘要:选择某一个点开始,每次去找这个点的最短边,然后再从这个开始不断迭代,更新距离. 代码: 朴素(vector存图) #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm 阅读全文
posted @ 2020-06-28 20:20 _Kolibri 阅读(136) 评论(0) 推荐(0)
摘要:题意:有一个矩形,有$k$个警报器,警报器所在半径$r$内不能走,问是否能从左上角走到右下角. 题解:用并查集将所有相交的圆合并,那么不能走的情况如下图所示 所以最后查询判断一下即可. 代码: #include <iostream> #include <cstdio> #include <cstri 阅读全文
posted @ 2020-06-22 14:03 _Kolibri 阅读(299) 评论(0) 推荐(0)
摘要:题意:有$n$袋爆米花,某个队伍有$c$个队员,每个队员每秒做多可以吃$t$粒爆米花,但一袋爆米花只能由一个队员吃完,并且一个队员只能吃连续的一袋或几袋,不能隔着吃某一袋,求将所有爆米花吃完的最少时间. 题解:这道题当时想了半天,发现怎么也求不出答案,后来想到了二分答案的办法,将答案代入并模拟题意判 阅读全文
posted @ 2020-06-22 13:44 _Kolibri 阅读(235) 评论(0) 推荐(0)
摘要:题意:给你$m$个长度为$n$的二进制数,求最少选多少个使它们$|$运算后所有位置均为$1$,如果不满足条件,则输出$-1$. 题解:这题$n$的范围很大,所以我们先用$string$读,然后再转化为$bitset$,之后再直接dfs爆搜,对于满足条件的维护一个最小值即可. 代码: #include 阅读全文
posted @ 2020-06-21 15:48 _Kolibri 阅读(189) 评论(0) 推荐(0)
摘要:题意:有$n$堆物品,每次可以将两堆捆成一堆,新堆长度等于两个之和,每次消耗两个堆长度之和的长度,求最小消耗使所有物品捆成一堆. 题解:贪心的话,每次选两个长度最小的来捆,这样的消耗一定是最小的,但是我们需要一个容器来存这些数,这时候很明显要用到优先队列(小根堆),我们将所有元素入队,每次取前两个捆 阅读全文
posted @ 2020-06-21 15:35 _Kolibri 阅读(159) 评论(0) 推荐(0)
摘要:题意:对于正整数$n$,每次可以选择使它变为$n-1$或者$n/t$ ($n\ mod\ t=0$且$t$为奇数),当$n=1$时便不可以再取,问先手赢还是后手赢. 题解:首先特判$1$和$2$的情况,然后显然如果$n$是奇数,一定是先手赢. ​ 如果$n$是偶数,那么我们去找它的奇数因子. ​ 如 阅读全文
posted @ 2020-06-21 15:22 _Kolibri 阅读(206) 评论(0) 推荐(0)
摘要:题意:有一个长度为$2n$的数组,删去两个元素,用剩下的元素每两两相加构造一个新数组,使得新数组所有元素的$gcd\ne 1$.输出相加时两个数在原数组的位置. 题解:我们按照新数组所有元素均为偶数来进行构造,因为旧数组的长度为$2n$,所以无论原数组有多少个奇数和偶数,我们都可以选择删去两个数,使 阅读全文
posted @ 2020-06-21 15:07 _Kolibri 阅读(155) 评论(0) 推荐(0)
摘要:题意:在$1$~$n$中找两个不相等的数使得他们的$gcd$最大. 题解:水题,如果$n$是偶数,那么一定取$n$和$n/2$,$n$是奇数的话,取$n-1$和$(n-1)/2$. 代码: #include <iostream> #include <cstdio> #include <cstring 阅读全文
posted @ 2020-06-21 14:57 _Kolibri 阅读(167) 评论(0) 推荐(0)
摘要:题意:有一组数,每次操作可以将某个数移到头部或者尾部,问最少操作多少次使得这组数非递减. 题解:先离散化将每个数映射为排序后所对应的位置,然后贪心,求最长连续子序列的长度,那么最少的操作次数一定为$n-len$. 感觉不好解释,直接上图,其实就是排序后它们一定是连续的,所以我们就求一个最长的连续的, 阅读全文
posted @ 2020-06-19 13:11 _Kolibri 阅读(293) 评论(0) 推荐(0)
摘要:题意:有一个字符串,要求使用其中字符构造一个环(不必全部都用),定义一个环是k美的,如果它转$k$次仍是原样,现在给你$k$,要求最长的k美环的长度. 题解:我们首先看$k$,如果一个环转$k$的因子次是美的,那么$k$次也一定是美的,然后再看环,假如一个环最少转$d$次是美的,那么这个环的长度$n 阅读全文
posted @ 2020-06-19 12:50 _Kolibri 阅读(243) 评论(0) 推荐(0)
摘要:题意:有一个字符串和一组数,可以对字符串删去任意字符后为数组的长度,且可以随意排序,要求修改后的字符串的每个位置上的字符满足:其余大于它的字符的位置减去当前位置绝对值之和等于对应序列位置上的数. 题解:贪心,我们发现,数组中$0$的位置一定对应字符串中最大的字符,所以我们从这个位置来构造,我循环来找 阅读全文
posted @ 2020-06-19 12:26 _Kolibri 阅读(362) 评论(0) 推荐(0)
摘要:题意:有一排座位,要求每人之间隔$k$个座位坐,$1$代表已做,$0$代表空座,问最多能坐几人. 题解:我们分别从前和从后跑个前缀和,将已经有人坐的周围的位置标记,然后遍历求每一段连续的$0$,对于每一段最多能坐$\lceil len/(k+1) \rceil$,求个和就可. 代码: #includ 阅读全文
posted @ 2020-06-19 12:07 _Kolibri 阅读(206) 评论(0) 推荐(0)
摘要:题意:你刚开始位于坐标轴的$(0,0)$点,一共有$m$颗流星砸向地面,每颗流星在$t$时砸到$(x,y)$点,其四周上下左右也均有波及,你每秒可以向上下左右移动一个单位,问你是否可以移动到安全的地方(没有被流星波及的点),求最小步数. 题解:这题细节有点多,但也是一个基本的bfs,首先我们要用一个 阅读全文
posted @ 2020-06-16 10:48 _Kolibri 阅读(373) 评论(0) 推荐(0)
摘要:题意:有一$n$层高的大楼,每层楼都只能在合法情况下上$x$层或者下$x$层,问你是否能从$a$层楼坐电梯到$b$层楼,输出最小步数. 题解:直接dfs搜,$flo$表示层数,$cnt$表示步数,如果$flo=b$,维护最小值,然后对这层楼标记已走过,判断是否合法再向上向下搜,然后回溯取消标记. 代 阅读全文
posted @ 2020-06-16 09:53 _Kolibri 阅读(231) 评论(0) 推荐(0)
摘要:题意:有一个图,要求从$S$走到$E$,$.\(表示可以走的路径,\)*$周围的八个方向均不能走,要求判断是否能走到$E$,若能,输出最小路径长度,否则输出$Impossible$. 题解:我们先把$*$周围的点标记一下,然后判断$E$是否被标记过了,如果没有,则找到$S$的位置进行BFS,结构体$ 阅读全文
posted @ 2020-06-15 20:32 _Kolibri 阅读(272) 评论(0) 推荐(0)
摘要:题意:从一个数组中尽可能多的选数,要求所选的每个数之间的差不大于$5$. 题解:先排序,然后双指针尺取,如果能取,则移动右指针,维护最大值,否则移动左指针即可. 代码: #include <iostream> #include <cstdio> #include <cstring> #include 阅读全文
posted @ 2020-06-15 20:21 _Kolibri 阅读(177) 评论(0) 推荐(0)
摘要:题意:有一个正整数$n$,从$1,2,3,...,n-1,n$中找两个数异或,使得他们的值最大. 题解:需要特判当$n=1$的情况,答案只能是$0$,然后写个几组数不难发现,一定存在两个数使得他们异或后的二进制上每一位都是$1$,直接模拟即可. 代码: #include <iostream> #in 阅读全文
posted @ 2020-06-15 20:15 _Kolibri 阅读(158) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的数组,求该数组中有多少元素不能整除其它任一元素的个数. 题解:刚开始写了个分解质因数(我是傻逼),后来发现直接暴力枚举因子即可,注意某个元素出现多次时肯定不满足情况,再特判数组中存在$1$的情况即可. 代码: #include <iostream> #include <cst 阅读全文
posted @ 2020-06-15 01:26 _Kolibri 阅读(206) 评论(0) 推荐(0)
摘要:题意:有长度为$n$的数组$a$,要求构造一个相同长度的数组$b$,使得${b_{1},b_{2},....b_}$集合中没有出现过的最小的数是$a_$. 题解:完全可以按照题意直接构造,但是比较麻烦,这里我们先标记原数组中的数,然后将原数组中没出现过的数存进$b$中($a$中出现的数在$b$中不能 阅读全文
posted @ 2020-06-15 01:19 _Kolibri 阅读(123) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的数组,求一子序列,要求子序列中两两差的绝对值最大,并且子序列尽可能短. 题解:将数组看成坐标轴上的点,其实就是求每个单调区间的端点,用差分数组来判断单调性. 代码: #include <iostream> #include <cstdio> #include <cstring 阅读全文
posted @ 2020-06-15 01:07 _Kolibri 阅读(91) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$的数组,找一段最长子数组,使得其元素和为$x$,如果存在,输出子数组的长度,否则输出$-1$. 题解:这题我们要从元素和$sum$来考虑,首先,如果原数组的所有元素都被$x$整除,那么条件不成立. ​ 假如原数组的$sum$不被$x$整除,那么长度就为$n$,如果被$x$整除 阅读全文
posted @ 2020-06-15 00:59 _Kolibri 阅读(139) 评论(0) 推荐(0)
摘要:题意:有$n$组数,对于每组数,问是否能找到两个因子$d_{1},d{2}$,使得$gcd(d_{1}+d_{2},a_=1)\(,如果有,输出它们,否则输出\)-1$. 题解:对于这题,首先我们要推两个gcd的公式: ​ 1) $gcd(a,b)=gcd(a+b,b) $. ​ 2) 若$gcd( 阅读全文
posted @ 2020-06-12 21:47 _Kolibri 阅读(218) 评论(0) 推荐(0)
摘要:题意:有一个$n$x$m$的矩阵,从$(1,1)\(出发走到\)(n,m)\(,问最少修改多少个数,使得所有路径上的数对应相等(e.g:\)(1,2)\(和\)(n-1,m)\(或\)(2,1)\(和\)(n,m-1)$). 题解:我们将二维的点的坐标转化为一维的步数(到$(1,1)$的路径),统计 阅读全文
posted @ 2020-06-12 20:57 _Kolibri 阅读(156) 评论(0) 推荐(0)
摘要:题意:有长为$n$的排列,其中$x$位置上的数为$1$,其余位置全为$0$,询问$m$次,每次询问一个区间,在这个区间内可以交换任意两个位置上的数,问$1$最后出现在不同位置的次数. 题解:维护区间即可,如果某个区间包含了$1$,更新最大的答案区间,(每次更新后说明这整个区间都能取到$1$). 代码 阅读全文
posted @ 2020-06-12 19:01 _Kolibri 阅读(145) 评论(0) 推荐(0)
摘要:题意:你有$a$个树枝和$b$个钻石,$2$个树枝和$1$个钻石能造一个铁铲,$1$个树枝和$2$个钻石能造一把剑,问最多能造多少铲子和剑. 题解:如果$a\le b$,若$b\ge 2a$,那么一直取$b$即可,否则就要两两轮流减,即$(a+b)/3$,取个min即可. 代码: #include 阅读全文
posted @ 2020-06-12 18:54 _Kolibri 阅读(224) 评论(0) 推荐(0)
摘要:题意:一共有$n$个房子,你需要访问$k$次,每次访问的距离是$|x-y|$,每次都不能停留,问是否能使访问的总距离为$s$,若能,输出$YES$和每次访问的房屋,反正输出$NO$. 题解:最优解一定是让每次访问的距离为$s/k$,然后将余数$s\ mod\ k$平均分配到前s%k的房屋中,之后每次 阅读全文
posted @ 2020-06-11 11:16 _Kolibri 阅读(132) 评论(0) 推荐(0)
摘要:题意:有两个字符串$S$和$T$,判断$T$是否能由$S$通过交换某位置的相邻字符得到,如果满足,输出交换次数及每次交换的位置,否则输出$-1$. 题解:首先判断不满足的情况,只有当两个字符串中出现的字母次数不同时不满足条件,用桶判断一下即可.然后我们再来看有解的情况,我们对$T$的每个字符标上序号 阅读全文
posted @ 2020-06-11 11:03 _Kolibri 阅读(159) 评论(0) 推荐(0)
摘要:题意:有$n$个点,$m$条边,现在要给这些点赋值,,每次只能赋给某一点的四周(所连边)的最小没出现过的值.如果不能按照所给的数赋值,输出$-1$,否则输出赋值顺序. 题解:我们用$pair$记录最后一行所给的数和位置,不难想,每次肯定是赋最小的数,所以我们对其排序,然后遍历取位置,看这个位置周围能 阅读全文
posted @ 2020-06-10 17:45 _Kolibri 阅读(167) 评论(0) 推荐(0)
摘要:题意:有一个正整数$n$,要求写出所有$1$~$n$的二进制数,统计相邻的两个二进制同位置上不同数的个数. 题解:打表找规律,不难发现: ​ $00000$ ​ $00001$ ​ $00010$ ​ $00011$ ​ $00100$ ​ $00101$ ​ 当最低位时,每次都变换,由低位向高位, 阅读全文
posted @ 2020-06-10 15:16 _Kolibri 阅读(113) 评论(0) 推荐(0)
摘要:题意:有一个$3$x$3$的的棋盘,有八个$1$~$8$的棋子,每次可以将一枚棋子移动到四周的空位,问最少移动多少次,使得最后的状态为$123804765$. 题解:直接BFS,用map来Hash存步数,这儿有个比较难想的点,就是把一维的坐标转化为二维的坐标(代码中有注释),然后我们找到$0$的位置 阅读全文
posted @ 2020-06-09 12:23 _Kolibri 阅读(146) 评论(0) 推荐(0)
摘要:题意:建一颗以$1$为根结点的树,询问$q$次,每次询问一个结点,问该结点的第$k$个子结点,如果不存在则输出$-1$. 题解:该题数据范围较大,需要采用dfs预处理的方法,我们从结点$1$开始向下找,$ans$数组记录的是,第$x$次查找时的结点,$path$表示某个结点所需的查找次数,$siz$ 阅读全文
posted @ 2020-06-04 18:53 _Kolibri 阅读(130) 评论(0) 推荐(0)
摘要:题意:给你两个长度相同的字符串$a$和$b$,你可以将相同位置上的$a$和$b$的字符交换,也可以将$a$或$b$中某个位置和对应的回文位置上的字符交换,这些操作是不统计的,你可以将$a$的某个字符替换,操作数+1,然后可以执行上文的操作,问最少操作多少次,使得$a$和$b$相等. 题解:我们只对$ 阅读全文
posted @ 2020-06-04 13:54 _Kolibri 阅读(191) 评论(0) 推荐(0)
摘要:题意:给你一棵树,每次可以去掉叶节点的一条边,Ayush先开始,每回合轮流来,问谁可以第一个把$x$点去掉. 题解:首先如果$x$的入度为$1$,就可以直接拿掉,还需要特判一下入度为$0$的情况,否则,仔细想一想,因为每次都不想让对方赢,所以摘到最后,一定会出现$x$连的都是叶结点的情况,所以此时我 阅读全文
posted @ 2020-06-04 13:43 _Kolibri 阅读(146) 评论(0) 推荐(0)
摘要:题意:给你一个只含有$0$和$1$的字符串,每次操作可以将$0$改成$1$或$1$改成$0$,问最少操作多少次,使得子序列中不含有$010$和$101$. 题解:仔细想一想不难发现,构造后的字符串要么全是$1$和$0$,要么就是$000....111$和$111...000$,我们对$0$求一个前缀 阅读全文
posted @ 2020-06-04 13:23 _Kolibri 阅读(169) 评论(0) 推荐(0)