返回顶部

随笔分类 -  思维

摘要:题意:一个棋盘上有一些"车",现在要让这些"车"跑到左倾斜的对角线上,每次可以移动一个棋子,但是棋盘的任意时刻都不能出现一个"车"能吃另一个"车"的情况.问最少需要移动多少次才能满足条件.("车"的个数小于对角线的格子数). 题解:对于某个棋子的位置$(x,y)$,我们可以$x->y$来建边,如果棋 阅读全文
posted @ 2020-12-21 20:22 _Kolibri 阅读(343) 评论(0) 推荐(0)
摘要:题意:给你一长度为$n$的数组,有一长度为$k\ (1\le k \le n)$的区间不断从左往右扫过这个数组,总共扫$n$次,每次扫的区间长度$k=i$,在扫的过程中,每次取当前区间内的最小值,存到v中,问每次扫完后v中的数是否能构成一个序列. 题解:我们首先特判区间长度$1$和$n$的情况,这很 阅读全文
posted @ 2020-12-08 19:11 _Kolibri 阅读(259) 评论(0) 推荐(1)
摘要:题意:给你一个$n$x$m$的矩阵,需要在这些矩阵中涂色,每个格子可以涂成黑色或者白色,一个格子四周最多只能有$2$个和它颜色相同的,问最多有多少种涂色方案. 题解:首先我们考虑一维的情况,一个格子的方案数是$2$,两个格子的方案数是$4$,我们记$f[1]=2$,\(f[2]=4\),然后我们考虑 阅读全文
posted @ 2020-12-08 18:02 _Kolibri 阅读(108) 评论(0) 推荐(0)
摘要:题意: 有一个分两层的圆盘,每层从12点方向均分插入$n$和$m$个隔板,当内层和外层的隔板相连时是不能通过的,有$q$个询问,每次给你内层或外层的两个点,判断是否能从一个点走到另外一个点. 题解: 因为是均分,所以内层和外层隔板相连的个数为$gcd(n,m)$,不懂的可以从角度方向来考虑,将$36 阅读全文
posted @ 2020-11-30 17:16 _Kolibri 阅读(114) 评论(0) 推荐(0)
摘要:题意:给你一组非递减的数,你可以对两个连续的数进行异或,使其合并为一个数,问最少操作多少次使得这组数不满足非递减. 题解:首先,给出的这组数是非递减的,我们考虑二进制,对于三个连续的非递减的最高位相同的数,我们可以将后面的两个异或,那么第一个数一定比合并的数大,所以当出现三个最高位相同的数时,操作数 阅读全文
posted @ 2020-11-30 00:51 _Kolibri 阅读(99) 评论(0) 推荐(0)
摘要:题意:给你两个长度为$2$的字符串$s$和$t$,你需要构造一个长度为$3n$的字符串,满足:含有$n$个$a$,$n$个$b$,$n$个$c$,并且$s$和$t$不能是它的子串. 题解:首先,假如所给的长度为$2$的字符串两两不相等,那么我们一定可以构造一个类似$aaaabbbbcccc$这样的相 阅读全文
posted @ 2020-11-26 22:33 _Kolibri 阅读(71) 评论(0) 推荐(0)
摘要:题意:有一个$n$个点,$n$条边的图,问你长度至少为$1$的简单路径有多少条. 题解:根据树的性质,我们知道这颗树一定存在一个环,假如一棵树没有环,那么它的所有长度不小于$1$的简单路径数一定是$\frac{n*(n-1)}{2}$,因为每个点都可以和其他任意一个点形成一条路径,除以$2$表示去除 阅读全文
posted @ 2020-11-26 22:20 _Kolibri 阅读(144) 评论(0) 推荐(0)
摘要:题意:给你一个模式串$t$,现在要在主串$s$中删除多个子串,使得得到的$s$的子序列依然包含$t$,问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择$s$头部到最右边的子序列的头部和最左边的子序列的尾部到$s$的尾部这两个子串,除去这两个子串,我们要找的最大子串一定在子序列的头部到 阅读全文
posted @ 2020-11-24 15:40 _Kolibri 阅读(92) 评论(0) 推荐(0)
摘要:题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换到前面就行,如果出现相同字符的话,先让最靠前的字符调换到对应位置一定是最优的.我们先记录原字符串中每 阅读全文
posted @ 2020-11-06 10:24 _Kolibri 阅读(74) 评论(0) 推荐(0)
摘要:题意:给你一个长度为$n$的升序序列,将这个序列分成$k$段,每一段的值为最大值和最小值的差,求$k$段值的最小和. 题解:其实每一段的最大值和最小值的差,其实就是这段元素的差分和,因为是升序,我们可以先求出差分数组,然后再对差分数组排序,因为我们可以分成$k$段,所以会有$k-1$个断开的'缝隙' 阅读全文
posted @ 2020-11-02 10:49 _Kolibri 阅读(63) 评论(0) 推荐(0)
摘要:题意:有一个$2$X$n$的矩阵,你想从$(1,1)\(走到\)(2,n)$,每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作,操作后询问是否能走到终点. 题解:只有当第一层和第二层被堵的点连通时才会到不了终点,比如$(x,y)\(和\){ 阅读全文
posted @ 2020-10-27 19:14 _Kolibri 阅读(76) 评论(0) 推荐(0)
摘要:题意:给你一串只含$4,8,15,16,23,42$的序列,如果它满足长度是$6$的倍数并且有$\frac {6}\(个子序列是\)[4,8,15,16,23,42]$,则定义它是好的,问最少删除多少元素使得序列是好的. 题解:我们开个桶(要离散化)记录这些数字出现的次数,然后线性遍历,当遇到$4$ 阅读全文
posted @ 2020-10-14 13:04 _Kolibri 阅读(112) 评论(0) 推荐(0)
摘要:题意:RT 题解: \(i\ mod \ k=0\),即所有事$k$的倍数的位置都要进行异或,根据异或的性质,我们知道如果相同的异或的数个数是偶数的话,得出的结果是$0$,所以每次询问,我们判断需要进行异或的个数,如果不是奇数的话就不用求贡献,这儿还有个结论,如果我们原来有偶数的个数,然后进行一次异 阅读全文
posted @ 2020-10-12 20:48 _Kolibri 阅读(180) 评论(0) 推荐(0)
摘要:题意:有一个模板串,给你$T$个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符的最后出现的最小位置,如果合法,更新答案即可. 代码: const string tp="puleyak 阅读全文
posted @ 2020-10-02 21:21 _Kolibri 阅读(173) 评论(0) 推荐(0)
摘要:题意:有一组数,分别用长度从$[1,n]\(的区间去取子数组,要求取到的所有子数组中必须有共同的数,如果满足条件数组共同的数中最小的数,否则输出\)-1$. 题解:我们先从后面确定每两个相同数之间的距离,然后维护每个$i$位置上的数到后面所有相同数的最大距离,然后我们就可以dp来搞了,我从$1$开始 阅读全文
posted @ 2020-09-29 01:35 _Kolibri 阅读(202) 评论(0) 推荐(0)
摘要:题意:给你$n$个区间,从这$n$区间中选$k$个区间出来,要求这$k$个区间都要相交.问共有多少种情况. 题解:如果$k$个区间都要相交,最左边的区间和最右边的区间必须要相交,即$min(r[1],...,r[k])>=max(l[1],...,l[k])$.我们先按左边界对所有区间进行排序,然后 阅读全文
posted @ 2020-09-26 17:30 _Kolibri 阅读(225) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的一组数,每次可以交换两个数的位置,问能否在$\frac{n*(n-1)}{2}-1$次操作内使得数组非递减. 题解:不难发现,只有当整个数组严格递减的时候,操作次数是$\frac{n*(n-1)}{2}$,所以我们可以直接遍历判断有无$a[i]<=a[i+1]$即可. 代码: 阅读全文
posted @ 2020-09-25 16:15 _Kolibri 阅读(176) 评论(0) 推荐(0)
摘要:题意:有一个长度为$n$并且所有元素和为$0$的序列,你可以使$a_-1$并且$a_+1$,如果$i<j$,那么这步操作就是免费的,否则需要花费一次操作,问最少操作多少次使得所有元素为$0$. 题解:首先优先考虑不用花费的情况,如果$a_>0$,\(a_{j}<0\),且$i<j$,那么我们可以免费 阅读全文
posted @ 2020-09-12 18:10 _Kolibri 阅读(150) 评论(0) 推荐(0)
摘要:题意:有一张$H$x$W$的图,给你$M$个目标的位置,你可以在图中放置一枚炸弹,炸弹可以摧毁所在的那一行和一列,问最多可以摧毁多少目标. 题解:首先我们记录某一行和某一列目标最多的数目,用桶标记每个目标的位置,然后记录每一行和每一列的炸弹数,再去枚举每一行和每一列,将目标数等于最大值的存起来,最后 阅读全文
posted @ 2020-08-25 13:49 _Kolibri 阅读(402) 评论(3) 推荐(2)
摘要:题意:给你一串括号,每次仅可以修改一个位置,问有多少位置仅修改一次后所有括号合法. 题解:我们用栈来将这串括号进行匹配,每成功匹配一对就将它们消去,因为题目要求仅修改一处使得所有括号合法,所以栈中最后一定会有两个括号剩余,并且这两个括号要么是$((\(要么是\)))\(,\))(\(是无论如何都不合 阅读全文
posted @ 2020-08-22 00:32 _Kolibri 阅读(96) 评论(0) 推荐(0)