12 2020 档案
摘要:题意:有个长度为$n$的监狱,犯人在位置$a$,cop在位置$b$,你每次可以向左或者向右移动一个单位,或者选择不动并在原地放一个爆竹$i$,爆竹$i$在$s[i]$秒后爆炸,cop每次向你的位置移动一个单位,你最终一定会被抓住(因为监狱是有限的),问你在被抓住前,最多能看到多少爆竹爆炸. 题解:我
阅读全文
摘要:题意:酒吧里有两个服务员,每个人每次都只能服务一名客人,服务员2按照客人进酒吧的顺序服务,服务员3按照客人的钱来服务,询问$q$,$1$表示有客人进入酒吧,带着$m$块钱,$2$表示询问服务员2当前应该服务的客人编号,$3$表示服务员3当前应该服务的客人编号. 题解:搞两个set,第一个set存pa
阅读全文
摘要:题意:给你一张图,要你去边,使其成为一个边数为$n-1$的树,同时要求树的最小边权最大,如果最小边权最大的情况有多种,那么要求总边权最小.求生成树后的所有简单路径上的最小边权和. 题解:刚开始想写最大生成树的,但是很明显不能满足总边权最小的要求.所以这里我们可以用二分,二分最小边权的值,然后再去跑k
阅读全文
摘要:题意:给你四个数字,你可以用这四个数字凑出四个1位数,一个2位数和两个1位数,或一个3位数和一个1位数,你可以用你凑出的数字进行$+,-,x$运算(所有运算符号至少出现一次),问你一共能得到多少个不同的数字. 题解:dfs瞎搞,不合法乘法的细节特别多,在dfs函数里面用flag和mult来分别去除出
阅读全文
摘要:题意:你在一家公司工作$t$天,负责给饮水机灌水,饮水机最初有$k$升水,水的范围必须要在$[l,r]$内,同事每天白天都会喝$x$升水,你在每天大清早可以给饮水机灌$y$升水,问你在公司工作的这几天内,饮水机会不会发生故障. 题解:假如$x>=y$,那么,我们贪心的思路一定是每天让水减的尽可能少,
阅读全文
摘要:题意:一个棋盘上有一些"车",现在要让这些"车"跑到左倾斜的对角线上,每次可以移动一个棋子,但是棋盘的任意时刻都不能出现一个"车"能吃另一个"车"的情况.问最少需要移动多少次才能满足条件.("车"的个数小于对角线的格子数). 题解:对于某个棋子的位置$(x,y)$,我们可以$x->y$来建边,如果棋
阅读全文
摘要:题意:给你两个数组$a$和$b$,对于$j=1,...,m$,找出$a_1+b_j,...,a_n+b_j$的$gcd$. 题解:我们很容易的得出$gcd$的一个性质:$gcd(a,b)=gcd(a,b-a),gcd(a,b,c)=gcd(a,b-a,c-b)$以此往后类推, 那么对于此题,我们要求
阅读全文
摘要:题意:有围着一圈的$N$把椅子,其中有一个是冠位,你在离冠位顺时针$S$把椅子的位置,你每次可以顺时针走$K$个椅子,问最少要走多少次才能登上冠位,或者走不到冠位. 题解:这题和洛谷那个青蛙🐸的约会简直一模一样啊,我们可以把圆看成是一条直线,我每次都向前都$k$步,多出$N$的部分我们可以对$N$
阅读全文
摘要:形如$ax\equiv c\ (mod\ b)$的方程叫为线性同余方程. 对于$ax\equiv c\ (mod\ b)$,我们可以得出$ax+by=c$,又根据裴蜀定理,$x,y$有整数解的充要条件为$gcd(a,b)|c$,即$c$一定是$gcd(a,b)$的倍数,我们可以根据$ax+by=gc
阅读全文
摘要:题意:给你一长度为$n$的序列(可能含有相等元素),你要找到$m$个位置不同的元素使得$max(a_,a_,...,a_)-min(a_,a_,...,a_)\le k$,问你共有多少种不同的元祖满足条件,对答案$mod 1e9+7$. 题解:我们可以先用map做桶统计每个数出现的次数,然后枚举$[
阅读全文
摘要:题意:给你节点数为$n$的树,每个节点都有自己的权值,求所有路径的上的点的权值按位与的和. 题解:题目给的数据很大,我们不能直接去找.因此我们可以枚举二进制$[1,20]$的每一位,然后再枚举所有点,看它二进制对应位置是否满足条件,之后再去dfs找$1$的连通块即可. 代码: const int N
阅读全文
摘要:题意:给你含有$n$个节点,$n-1$条边的树,以及$m$个质数和$1$,你需要在这$m$个质数和一个$1$选择数(质数只能选一次,$1$可以多选)给$n-1$条边赋值,求所有简单路径的边权和. 题解:很简单,对于每条边,我们看它左右有多少个点,右边有多少点,左边点数x右边点数就是包含这条边的简单路
阅读全文
摘要:题意:给你一个字符串,找出一个类似为$aaabbbccc$这样的由连续的$abc$构成的子序列,其中$|a|=|b|=|c|$,问字符串中能构造出的子序列的最大长度. 题解:这题刚开始一直想怎么线性扫过,结果好像没有什么思路(其实是可以预处理$b$的个数然后双指针的),但这题最好写的其实还是二分答案
阅读全文
摘要:题意:给你一长度为$n$的数组,有一长度为$k\ (1\le k \le n)$的区间不断从左往右扫过这个数组,总共扫$n$次,每次扫的区间长度$k=i$,在扫的过程中,每次取当前区间内的最小值,存到v中,问每次扫完后v中的数是否能构成一个序列. 题解:我们首先特判区间长度$1$和$n$的情况,这很
阅读全文
摘要:题意:给你一个$n$x$m$的矩阵,需要在这些矩阵中涂色,每个格子可以涂成黑色或者白色,一个格子四周最多只能有$2$个和它颜色相同的,问最多有多少种涂色方案. 题解:首先我们考虑一维的情况,一个格子的方案数是$2$,两个格子的方案数是$4$,我们记$f[1]=2$,\(f[2]=4\),然后我们考虑
阅读全文
摘要:题意:给你$n$个矩形,求矩形并的面积. 题解:我们建立坐标轴,然后可以对矩形的横坐标进行排序,之后可以遍历这些横坐标,这个过程可以想像成是一条线从左往右扫过x坐标轴,假如这条线是第一次扫过矩形的宽(长)的话,我们就可以在$y$轴上对应的区间打上标记,每次枚举的面积就是当前横坐标和上次横坐标的差值乘
阅读全文
摘要:题意:给你一组数,每次可以选择拿走第$i$个数,得到$a[i]$的分数,然后对于分数值为$a[i]-1$和$a[i]+1$的值就会变得不可取,问能得到的最大分数是多少. 题解:$a[i]$最大取$2e5$,那我们可以枚举$[1,2e5]$的所有数字,用桶记录每个数出现的次数$cnt$,对于当前所枚举
阅读全文
摘要:题意:RT. 题解:很明显的线段树维护区间最大值操作,但是我们同时还要维护最大值的个数,我们在build或者modify操作完子树然后push_up的时候,我们先从两个儿子取max更新父节点的最大值,然后再判断父节点的最大值是否和两个儿子相等,这样我们就成功的维护了区间最大值的个数.剩下的就是线段树
阅读全文
摘要:在基础线段树的模板上做了优化,具体看eval函数和push_down. #include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back #define me m
阅读全文
摘要:#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pb push_back #define me memset #define rep(a,b,c) for(int a=b
阅读全文
摘要:题意:定义两个数$a,b$是朋友,如果:\(gcd(a,b)\),\(\frac{a}{gcd(a,b)}\),$\frac{gcd(a,b)}$能构成三角形,现在给你一个正整数$n$,问你$1-n$中有多少数没有朋友. 题解:首先考虑合数,设$a=b*c$,\(b\ge c\),\(b\ge 2,
阅读全文
摘要:题意:给你一组不重复的序列$a$,每次可以选择一个数删除它左边或右边的一个数,并将选择的数append到数组$b$中,现在给你数组$b$,问有多少种方案数得到$b$. 题解:我们可以记录$b_i$在$a_i$中的位置,然后枚举$b_i$,取它在$a_i$的位置,然后看$a_$和$a_{i+1}$的情
阅读全文