摘要:
atcoder上的题目 链接 一道思维题目 可以发现如果X是可有可无的,那么所有小于X的数也一定是可有可无的, 所有我们只要找出最大的那个可有可无的数字就好了 进一步分析,发现 若A1, A2, . . . , Ai 的和为 S,当且紧当 Ai+1, Ai+2, . . . , AN 凑不出任何个 阅读全文
摘要:
洛谷链接 BZOJ链接 看到这样不用修改的题目,应该佷容易就联想到了离线来处理。 我们发现若将询问按照r来排序,排完后每次对答案有贡献的仅是每个颜色最后出现的位置 我们用next[i]表示i处颜色之前出现的位置,我们利用树状数组维护每个数最后一次出现的位置小于j的个数,每次的答案就是树状数组l到r这 阅读全文
摘要:
传送门 BZOJ传送门(权限题) 看到n小于20,就可以想到搜索 所有的数要么在集合a中,要么在集合b中,要么都不在 可是3^n复杂度会炸,我们考虑优化 可以利用折半搜索,将前面一半的所有可能情况与后一半列举 排序扫描统计答案 由于选择情况可能会重复,我们还要记录一下状态,然后在统计时判断一下 统计 阅读全文
摘要:
点分治的入门练习。 题目链接 BZOJ的链接(权限题) 关于点分治的思想我就不再重复了,这里重点说一下如何判重。 我们来看上图,假设我们去除了1节点,求出d[2]=1,d[3]=d[4]=2 假设k为5,这样我们会认为节点(2,3)(2,4)(3,4)的距离小于k,从而累计到答案中 但是我们以2为r 阅读全文
摘要:
题目大意 给一个初始全0的矩阵,操作1为将(i,j)处的元素加上k 操作2为输出子矩阵(a,b)(c,d)的所有元素和 操作3为结束程序 二维树状数组模板 唯一要注意的是题目中从0开始标号,所以要将所有的坐标都加1再进行操作 阅读全文
摘要:
好像树状数组虽然常数小,编程简单,可是资瓷的操作有限, 普通的树状数组只资瓷单点修改和区间查询,首先要将其升级为区间修改 我们利用差分来进行 定义差分数组b[i]=a[i]-a[i-1] 这样$ a[j]=\sum_{i=1}^jb[i] $ 这样我们只要用树状数组维护一下b[i]的前缀和就好了 修 阅读全文
摘要:
最近好像掉进什么奇怪的数据结构坑里去了。。。。 先放个板子,讲解和例题到时候在补上 阅读全文
摘要:
学习了一段时间的可持久化数据结构,感觉自己的脑子不太够用。。。。 好吧,先从最基本的看起 可持久化数组 题目链接 你需要维护这样的一个长度为 N 的数组,支持如下几种操作 1.在某个历史版本上修改某一个位置上的值 2.访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生成一个完 阅读全文
摘要:
没有什么特别好的办法,只好用搜索去做 因为一次移动最多归位一个骑士 所以可以想到用IDA*,为了简化状态 我们用k,x,y,sum来表示移动了k步,空格在x,y,还用sum个没有归位的情况 然后枚举转移即可 标准的IDA* 阅读全文
摘要:
题目链接 一道人类智慧的dp题 首先我们可以将∑ai^2转化为求取两次,两次一样的方案数 然后用f[i][j][k][l]表示第一个人在第一个串中取到i第二个串中取到j 第二个人在一个串中取到k第二个串中取到l的方案数 显然i+j=k+l,所以第四维可以省掉 推出方程后,可以看出f[i][j][k] 阅读全文