返回顶部

04 2021 档案

摘要:题意:给你$n$个升序的点,问你是否能构造一颗二叉搜索树,且每个儿子节点和父节点的$gcd>1$. 题解:首先可以预处理每两个点之间的$gcd$,我们先考虑暴力的写法,设$dp[l][r][k]\(表示区间\)[l,r]$以$k$为根节点是否合法,那么如果$dp[l][r]k]$要合法的话,其左儿子 阅读全文
posted @ 2021-04-29 17:34 _Kolibri 阅读(50) 评论(0) 推荐(0)
摘要:题意:有一只老鼠,有$n$个位置,刚开始老鼠可能出现在任意位置,然后每次跑去第$a_i$个位置,如果$i=a_i$那么它就会停下,你可以在第$i$个位置花费$c_i$放置老鼠夹,你想要话费最小的代价来保证能抓到老鼠,问最小代价是多少. 题解:我们可以把数组$a$抽象成一张有向图,容易发现,对于一条链 阅读全文
posted @ 2021-04-29 16:59 _Kolibri 阅读(54) 评论(0) 推荐(0)
摘要:题意:一长度为$n$的序列,有$m$个限制条件,问有多少排列方法使得题目所给的$m$个限制条件都满足. 题解:$n$给的范围很小,我们可以状态压缩,$v[num][j]$表示题目所给的限制条件前$num$个数最多不大于$y$的个数,我们可以枚举所有情况,然后判断每个状态是否和题目所给的条件冲突,如果 阅读全文
posted @ 2021-04-29 16:44 _Kolibri 阅读(135) 评论(0) 推荐(0)
摘要:题意:给你$n$个数,有$q$个询问,每次询问一个区间,问你这个区间至少要分成多少个子区间,使得每个子区间的所有元素乘积等于它们的$lcm$. 题解:因为$lcm(x,y)=\frac{x*y}{gcd(x,y)}$,推广一下不难发现,要满足题目条件的话,区间内所有元素的$gcd=1$.即不能有公共 阅读全文
posted @ 2021-04-26 20:29 _Kolibri 阅读(93) 评论(0) 推荐(0)
摘要:题意:有一个$n$x$m$的矩阵,相邻点之间都存在边权,每次可以移动到相邻点,问你每个点移动$k$次后并回到该点的最短边权和. 题解:如果$k$是奇数的话,一定不能走回到自己,因为线段来回来走两次或走一个矩阵,他们的边长和都是偶数.$dp[i][j][k]\(表示点\)(i,j)$走$k$次后回到自 阅读全文
posted @ 2021-04-26 20:11 _Kolibri 阅读(46) 评论(0) 推荐(0)
摘要:题意:给你$n$个数,问你最少删去多少个数,使得剩下的数任意分成两组,两组数的所有元素均不同. 题解:我们先对这$n$个数求和,如果$sum$是奇数,那么我们不用删去任何元素.否则,我们对这$n$个数求整体的$gcd$,并对所有数去掉这些$gcd$.去掉后整体结果不变,但是其中一定会存在至少一个奇数 阅读全文
posted @ 2021-04-26 20:03 _Kolibri 阅读(50) 评论(0) 推荐(0)
摘要:题意:给你一个序列,有$q$个询问,每次询问一个区间$[l,r]\(,你要将这个区间内的数*最少*分成几个子序列,使得每个序列中的众数出现的次数不大于\)\lceil \frac{2}\rceil$($x$为子序列区间长度). 题解:假如区间内众数出现的次数$cnt<=\lceil \frac{2} 阅读全文
posted @ 2021-04-26 17:45 _Kolibri 阅读(51) 评论(0) 推荐(0)
摘要:题意:刚开始有一长度为$n$,空白的空数组,有$q$次询问,每次询问都会选一个区间$[l,r]$将其全部涂成颜色i,现在给你一个数组,问你能否得到所给的数组,$0$表示任何颜色都可以. 题解:首先这题有一个坑点,数组中必须要有颜色$q$,然后,易知两个相同颜色之间一定不能有比它小的颜色出现,那么对于 阅读全文
posted @ 2021-04-26 17:23 _Kolibri 阅读(52) 评论(0) 推荐(0)
摘要:题意:有一个$[1,2,...,n-1$]的序列,要你构造出一个子序列,使得子序列的所有元素的乘积%\(n\)=1. 题解:首先我们构造出的子序列的乘积一定是$k*n+1$,这个值一定和$n$互质. 证明:设$gcd(kn+1,n)=d$,那么$d|kn$,\(d|n\),\(d|1\),而整除$1 阅读全文
posted @ 2021-04-26 17:02 _Kolibri 阅读(83) 评论(0) 推荐(0)
摘要:题意:RT,但是这题不能直接模拟(因为会炸longlong?). 题解:我们可以用线段树来处理,如果是操作1,就找到叶子结点将它修改为$m$,如果是操作$2$,我们就将修改位置的叶子结点修改为$1$即可,这样的话整个操作中就没有除法出现,也应该不会炸long long,每次询问根节点的值即可. 代码 阅读全文
posted @ 2021-04-26 14:08 _Kolibri 阅读(69) 评论(0) 推荐(0)
摘要:题意:RT,老鼠可以在任意两点移动. 分析:由于$n$的范围非常小,我们考虑状压,我刚开始是用一维dp转移的,但是这样的话会出现一个问题,也就是我们从上一个状态转移过来时,会出现不同坐标但状态值相同的情况,那么我们用一维就不能确定哪个坐标是最优的,所以要用二维dp来进行转移.$dp[i][j]$表示 阅读全文
posted @ 2021-04-26 13:25 _Kolibri 阅读(72) 评论(0) 推荐(0)
摘要:题意:给你三个长度为$2n$的01串,要你构造出一个长度为$3n$的字符串$s$,使得$s$的两个子序列至少包含两个给出的01串. 题解:因为给出的字符串长度为$2n$且为01串,那么某一个串包含的$0$或$1$的个数必然不小于0,那么我们可以找到两个$0$的个数或$1$的个数不小于0的串,拿出$n 阅读全文
posted @ 2021-04-19 08:32 _Kolibri 阅读(123) 评论(0) 推荐(0)
摘要:题意:有一个$n$x$n$的空矩阵,有三种颜色,Alice每次给你一种颜色,你需要选择另外两种颜色填某一个空格子,不能出现相邻格子同一种颜色,交互题,Alice会根据你的决定来出最优的情况,每次输出颜色和单位. 题解:我们用两个栈将不相邻的格子存起来,栈1用来涂颜色1(Alice选颜色2的时候),栈 阅读全文
posted @ 2021-04-16 09:54 _Kolibri 阅读(63) 评论(0) 推荐(0)
摘要:题意:给你一个长度为$n$的01串$s$,要求你构造出两个长度为$n$的合法括号序列$a$和$b$,如果$s_i=1$,那么$a_i=b_i$,如果$s_i=0$,那么$a_i \ne b_i$,问你能否构造出两个序列,若可以,输出他们. 题解:首先,\(s_1=s_n=1\),这是一定要成立的,其 阅读全文
posted @ 2021-04-16 09:35 _Kolibri 阅读(93) 评论(0) 推荐(0)
摘要:题意:有$m$个党派,$n$个选民,每个选民都有自己要投的党派,你是党派1的首领,富可敌国,你想要贿赂一些选民使得所有党派中,你的票数最高,问最少要花多少钱才能当选. 题解:像这种贪心怎么想都想不出来的题的话,就应该考虑枚举和二分了,我们可以枚举我需要的票数来写,假设我们最终当选的票数为$k$,那么 阅读全文
posted @ 2021-04-14 13:34 _Kolibri 阅读(55) 评论(0) 推荐(0)
摘要:题意:有一组数$a$,如果$gcd(a_i,a_{i+1},...,a)=min(a_i,...,a{i+1},...,a)$,那么$i$和$j$之间就可以连一条边,边权为$min(a_i,...,a{i+1},...,a)$.$i$和$i+1$之间都可以连一天边权为$p$的边,现在给你这$n$个点 阅读全文
posted @ 2021-04-14 11:33 _Kolibri 阅读(111) 评论(0) 推荐(0)
摘要:题意:给你两个正整数$n$和$k$,要你构造一个只包含前$k$个字母的字符串(\([a,a+k-1]\)),使得对于任意两个不相交的连续长度为$2$的区间,相等的子串数最少. 题解:我们一共有$aa,ab,...,ba,bb,...,ca,cb...,a+(k-1),...$,这样的不同长度为$2$ 阅读全文
posted @ 2021-04-14 11:21 _Kolibri 阅读(54) 评论(0) 推荐(0)
摘要:题意:找出LCIS 题解:我们设$dp[i][j]\(为\)[a_1,a_i]\(和\)[b_1,b_j]$组成的并且以$b_j$结尾的最长公共上升子序列,若$a[i]!=b[j]$,那么$dp[i][j]=dp[i-1][j]$,如果$a[i]=b[j]$,那么我们就固定$a[i]$,从$dp[i 阅读全文
posted @ 2021-04-09 00:53 _Kolibri 阅读(50) 评论(0) 推荐(0)
摘要:题意:给你一组数,问你最少能凑多少个LIS和LDS. 题解:能解决的办法好像只有dfs找了,但是我们可以贪心和剪枝来优化,我们来看贪心,当我们遍历到$i$个数时,想要把它加入到前面的某个上升子序列中,那么最优的放法一定是放到末尾数字比$a[i]$小的最大的那个数后面,因为加入放到一个末尾数字很小的子 阅读全文
posted @ 2021-04-09 00:29 _Kolibri 阅读(47) 评论(0) 推荐(0)
摘要:题意:给你一组数,求LDS和最少需要多少块LDS 题解:第一问LDS随便写,关键是要怎么求出最少有多少个LDS,这里介绍一个dilworth定理:***对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目.***对偶一下,我们要求最小LDS的划分数目,那么也就是求LIS的元素数目. 阅读全文
posted @ 2021-04-08 23:53 _Kolibri 阅读(92) 评论(0) 推荐(0)
摘要:题意:给你两个字符串$a$和$b$,有$q$个询问,每次给你一个区间$[l,r]\(,问你在\)[a_l,...,a_r]$中,子串$b$出现了多少次. 题解:我们可以先预处理出所有$b$在$a$中的起始和末尾位置,用两个数组分别存他们,其中存末尾位置的时候要取负,方便后面二分查找,然后每次询问的时 阅读全文
posted @ 2021-04-08 23:19 _Kolibri 阅读(41) 评论(0) 推荐(0)
摘要:题意:有$2n$个数,要凑$n$个坐标出来,使得这些坐标全部落在一个矩形内部,问你最小的矩形面积是多少. 题解:这种题一般都是将横纵坐标分开看,首先,矩形的面积=\((max(x)-min(x))\)*\((max(y)-min(y))\).对坐标排序,根据最值原理,“和一定,差大积小”,所以我们可 阅读全文
posted @ 2021-04-01 20:39 _Kolibri 阅读(62) 评论(0) 推荐(0)
摘要:题意:你要参加一场考试,考试持续时间为$T$,有两类题目简单题和难题,做一道简单题要花$a$分钟,难题要$b$分钟,每道题目都有一个强制时间$t_i$,当考试时间为$s$时,且$s\ge t_i$,假如你这时离开考试并且第$i$题没有写出来的话,你将得到$0$分,你可以在任意时刻离开考试,如果此时考 阅读全文
posted @ 2021-04-01 20:19 _Kolibri 阅读(58) 评论(0) 推荐(0)
摘要:题意:有$n$个物品,每个物品的价值是$a_i$,每个物品只有一个,假如你买了价值为$a_x$的物品,那么你可以选择$k$个价值不大于$a_x$的物品一块打包送给你,但是必须要$k$个才行,不能多不能少,你现在有$p$块钱,问你最多能买多少物品. 题解:先对物品排序,假如我们要买$x$个物品,不难发 阅读全文
posted @ 2021-04-01 20:04 _Kolibri 阅读(58) 评论(0) 推荐(0)
摘要:题意:给你一个有向图,求最大半连通子图的总节点数和不同最大半连通子图的方案数. 题解: 用tarjan缩点后,注意缩点后建边的时候要判重,因为两个连通子图之间可能有很多条边,跑拓扑排序然后dp更新节点数和方案数即可,具体看代码. 代码: #include <bits/stdc++.h> #defin 阅读全文
posted @ 2021-04-01 13:23 _Kolibri 阅读(75) 评论(0) 推荐(0)