08 2021 档案
摘要:题目大意 先给出一个长度为$n$的字符串(以下称为初始字符串),然后还有$q$个询问,每个询问给出一个长度小于$50$的字符串(以下称为询问字符串),判断此字符串是否是初始字符串字符串的子序列。 题目分析 我们可以预处理一个数组$f_{i,j}$,表示后$i$个字符中第$j$个字符第一次出现的位置。
阅读全文
摘要:@ 前言 本蒟刚刚学了基本的康托展开,特在此留下学习笔记。 康托展开是什么? 康托展开就是求在一个特定长度的全排列中,一个特定的排列在全部排列中排第几个。举个例子:如长度为$3$的全部排列为 $1,2,3$ $1,3,2$ $2,1,3$ $2,3,1$ $3,1,2$ $3,2,1$ 所以$1,2
阅读全文
摘要:题目大意 多个询问, 每个询问给出长度为$n$的$2$个序列$a,b$ 每次可以对$1<i<n$的$a_i$进行操作, 操作后,\(a'_i=a_{i-1}+a_{i+1}-a_i\) 问能否通过若干次操作,使得序列$a$变成$b$ 题目分析 移项原式,得 \(a'_i-a_{i-1}=a_{i+1
阅读全文
摘要:@ 前言 在网上看到了很多奇奇怪怪的链表操作,不仅代码多还难以理解,给出的代码还会编译错误(也许只是小编愚钝……),后来找了很多资料,终于找到一种精简的链表,所以写一篇文章来介绍一下。 单链表的的定义 十分简单,只要定义一个头指针,尾指针就好了。 struct node{ int data; nod
阅读全文
摘要:@ 前言 最近几天一直在线段树上面死磕,现在大概弄懂了较简单的线段树(只支持加减法的那种),来这里写篇大约的笔记,等以后学习了更多还会更新。 什么是线段树 线段树是一种二叉树,每个节点都代表一个区间的和(或者最大值等等,可以自己定义。以下用和作为例子)。比如说根节点就代表整个区间的和,下图展示了一棵
阅读全文
摘要:题目大意 给出一个数列,有两种操作: 将某区间每一个数加上$k$ 求出某区间每一个数的和 题目分析 假如暴力模拟,时间复杂度$O(mn)$,最多只能拿七十分。 既然已经是线段树的模板题了,那么正解一定是线段树,直接写线段树就好了。 不会线段树的请看我的另一篇博客数据结构:线段树 时间复杂度$O(ml
阅读全文
摘要:题目大意 给定n,求出所有正整数x,满足小于n,且x^2(%n)=1 将满足的x按从小到大的顺序依次换行输出 题目分析 \(x^2=kn+1\) \(x^2+x-x-1=kn\) \((x+1)(x-1)=kn\) 我们可以分别拆解$k,n$为两个相乘的形式$k=k_1k_2,n=n_1n_2$ 所
阅读全文
摘要:题目大意 若数列A存在位置k,满足 ①i<k,ai<ai+1 ②i>=k,ai>ai+1 则称该数列为单峰数列 给出正整数n,求全排列n中存在多少个单峰数列 题目分析 对于每个$n$, \(ans=2^{n-1}\),为什么我也不知道,暴力的时候找到的规律,用快速幂乘一下真就$AC$了。 \(Cod
阅读全文
摘要:题目大意 $n$个物品,每次去掉一个之后再询问的$01$背包问题。 题目分析 调整事情顺序,把第$i$个去掉的事情放在$n-i+1$个位置上,然后再做一次二维$01$背包,然后输出$f_{m,n} \to f_{m,1}$($f_{i,j}$表示有$i$点精力,做前$j$件事情时能取得的最大值) 因
阅读全文
摘要:超级快读模板 #define getcha() (S==T&&(T=(S=fsr)+fread(fsr,1,1<<15,stdin),S==T)?EOF:*S++) char fsr[1<<15],*S=fsr,*T=fsr; inline int read(){ int r(0),w(1);cha
阅读全文
摘要:题目大意 给出一个长度为$n$的序列$A$描述一个长度为$n$的全排列,$A_i$表示前$i-1$个有多少个比第$i$个数大。 题目分析 从后往前分析,当前$a_i$表示有几个数比当前位置的数大,那么当前应该选择的数一定是剩余数字中第$a_i$大的,暴力模拟匹配,时间复杂度$O(n^2)$,可以过$
阅读全文
摘要:题目大意 $n$个人排队打饭,假如相邻的人打的菜一样,就会影响彼此用餐的心情。求这个队伍中有人被影响心情的状态数,对$100003$取余。 题目分析 直接求怎么影响心情难度较大,我们可以反道而行之,求不合法的方案数即求有多少种方法可以不影响心情。 第一个人可以随便选,即可以选$m$种菜,后$n-1$
阅读全文
摘要:题目大意 定义一个运算操作,求出一个长度为$n$的数列在经过$n-1$次合并后能得到几种不同的结果。 题目分析 首先先来观察一下这个$X$运算:\(a(X)b=((a\&b)+(a|b))>>1\) 实际上,这个 \(((a\& b)+(a|b))>>1\) 的值就是等于$(a+b)/2$的值,因为
阅读全文
摘要:题目大意 求最符合拔河比赛要求的分队方法。 题目分析 用一个三元组(x,y,z)来表示当前的情况:x为当前考虑到第几个人,y为当前已经选择了多少个人到第一个分队里,这队人的体重和为z。 当y==n/2或者x>n时结束。 用dfs暴搜来实现…… \(Code\) #include<iostream>
阅读全文
摘要:[题目]大意 有$n$只兔兔,每只兔兔单独时都需要吃$hunger_i$的食物量,假如有同食者,那么每个同食者会让它需要多吃$greed_i$的食物量。假如小明最多能提供$totalFood$的食物,那么他最多能养多少只兔兔。 题目分析 养的兔子越多,所需食物量越大,可见答案具有单调性,用二分答案做
阅读全文
摘要:题目分析 答案具有单调性,先确定答案的上下限,由于是部分或全部$a_i$的平均值,且所有的$a_i$都小于$2000$,所以答案范围为$0\leq x\leq 2000$ 考虑二分,判定条件是“是否存在一个长度$\leq L$的子段,平均值不小于$mid$” 求平均值十分麻烦,我们可以把子段内的所有
阅读全文
摘要:题目大意 给出一条防线上的防具布置情况,求防线的第一个破绽位置与该位置上的防具数量。 题目分析 记$S(x)$表示$0~x$的位置上一共有多少防具,对于每组防具,如果$s_i$在x之前,那么就把$min(x,d_i)$之前的防具累加,一直累加到n求出$S(i)$,时间复杂度为$O(n)$。 特判:若
阅读全文
摘要:题目大意 把一个长度为n数列分成m段,让每段的最大值最小。(m<=n) 题目分析 首先看出这题应该用二分做,然后考虑这道题答案范围的上下限:下限就是最大的$a_i$,而上限就是$\Sigma^{i=n}_{i=1}a_i$ 确定边界之后,开始二分: 用当前的mid作为每一段的最大值,假如能够将该数列
阅读全文

浙公网安备 33010602011771号