随笔分类 - 思维
摘要:题意:有$n$个熊小孩,绕着树转圈圈,编号$i$的小孩可以记住$a_{i,1}$和$a_{i,2}$两个小孩,这两个小孩是顺时针相邻的,但谁前谁后不一定.现在给你每个小孩的$a_{i,1}$,\(a_{i,2}\),要求还原序列. 题解:对于第$i$个小孩,我们去判断他的$a_{i,1}$和$a_{
阅读全文
摘要:题意:给你某个字符串的$n-1$个前缀和$n-1$个后缀,保证每个所给的前缀后缀长度从$[1,n-1]$都有,问你所给的子串是前缀还是后缀. 题解:这题最关键的是那两个长度为$n-1$的子串,我们只要判断哪个是前缀就行了,然后再遍历一遍所给的子串,用长度为$n-1$的前缀子串来判断是子串是前缀还是后
阅读全文
摘要:题意:在$x$轴上有很多传送点和钻石,当位于传送点上时,可以传送到其他任意传送点(不记操作数),位于钻石上时可以吃掉它,每次可以移动一个单位,问最少多少次可以吃掉所有的钻石. 题解:对于某个位置上的钻石,我们可以从它左边的传送点走过来,或者从它右边的传送点走过来,又或者从上一个钻石的位置直接走过来,
阅读全文
摘要:题意:有一个数组,每次可以修改子数组,但是修改后每个元素的位置都必须变化,求最少修改多少次使得这个数组有序. 题解:假如这个数组本来就有序,我们直接输出0.否则,对于数组两端,假如它们有序,那么我们可以不用做任何操作,直接看中间部分,所以我们分别扫一遍两端,分别找到两端第一个不满足条件的位置,然后我
阅读全文
摘要:题意:有$a$个蛋糕,$b$个巧克力,第一类人有$n$个,总是吃多的东西(若$a>b$,吃蛋糕,否则吃巧克力),第二类人有$m$个,总是吃少的,可以随便调整这两类人吃的顺序,问是否能让所有人都吃到东西. 题解:首先$a+b\ge n+m$,这个条件是一定要成立的, 然后我们最优先的方法一定是让第二类
阅读全文
摘要:题意:有一个长度$n$的序列,如果$a_<a_{i+1}$,那么可以选择删除$a_$或者$a_{i+1}$,再继续操作,问是否能够将序列删到只剩一个元素. 题解:感觉这种序列变化的题目能用stack写,所以用数组模拟stack写了一发. 首先,假如栈为空或者$a_<a_$,那么就让$a_$入栈.
阅读全文
摘要:题意:有$n$个数,从中选$k$个数累乘,求最大的乘积$(mod\ 10^9+7)$. 题解: 1.假如全是负数,并且选奇数个,那么从小到大选. 2.否则,考虑当前状态,假如$k$是奇数,那么我们先选一个最大的,然后再选两个最大的正数相乘或者两个负数相乘后最大,每次这样选即可. 代码: int n,
阅读全文
摘要:题意:在$1$~$n$中找两个不相等的数使得他们的$gcd$最大. 题解:水题,如果$n$是偶数,那么一定取$n$和$n/2$,$n$是奇数的话,取$n-1$和$(n-1)/2$. 代码: #include <iostream> #include <cstdio> #include <cstring
阅读全文
摘要:题意:有一个$n$x$m$的矩阵,从$(1,1)\(出发走到\)(n,m)\(,问最少修改多少个数,使得所有路径上的数对应相等(e.g:\)(1,2)\(和\)(n-1,m)\(或\)(2,1)\(和\)(n,m-1)$). 题解:我们将二维的点的坐标转化为一维的步数(到$(1,1)$的路径),统计
阅读全文
摘要:题意:一共有$n$个房子,你需要访问$k$次,每次访问的距离是$|x-y|$,每次都不能停留,问是否能使访问的总距离为$s$,若能,输出$YES$和每次访问的房屋,反正输出$NO$. 题解:最优解一定是让每次访问的距离为$s/k$,然后将余数$s\ mod\ k$平均分配到前s%k的房屋中,之后每次
阅读全文
摘要:题意:有两个字符串$S$和$T$,判断$T$是否能由$S$通过交换某位置的相邻字符得到,如果满足,输出交换次数及每次交换的位置,否则输出$-1$. 题解:首先判断不满足的情况,只有当两个字符串中出现的字母次数不同时不满足条件,用桶判断一下即可.然后我们再来看有解的情况,我们对$T$的每个字符标上序号
阅读全文
摘要:题意:给你两个长度相同的字符串$a$和$b$,你可以将相同位置上的$a$和$b$的字符交换,也可以将$a$或$b$中某个位置和对应的回文位置上的字符交换,这些操作是不统计的,你可以将$a$的某个字符替换,操作数+1,然后可以执行上文的操作,问最少操作多少次,使得$a$和$b$相等. 题解:我们只对$
阅读全文
摘要:题意:给你一个只含有$0$和$1$的字符串,每次操作可以将$0$改成$1$或$1$改成$0$,问最少操作多少次,使得子序列中不含有$010$和$101$. 题解:仔细想一想不难发现,构造后的字符串要么全是$1$和$0$,要么就是$000....111$和$111...000$,我们对$0$求一个前缀
阅读全文
摘要:题意:给你一个数组,求有多少子数组的中位数等于$m$.(若元素个数为偶数,取中间靠左的为中位数). 题解:由中位数的定义我们知道:若数组中$<m$的数有$x$个,$>m$的数有$y$个,只有$x=y$或$y-x$=1时,中位数才能取到$m$,记$m$在原数组的位置为$pos$. 于是,我们先遍历
阅读全文

浙公网安备 33010602011771号