自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 BNUOJ51279 组队活动(cdq分治&&NTT)

题意:N个人进行组队,每个队不超过M人,求方案数模998244353。这个递推方程我都没想到。。枚举当前这个人所在队伍剩余人数j,则f[i]=Σf[i-1-j]*C(i-1, j),把组合数展开后发现是个卷积的形式,但是不能直接NTT,因为之前的f值没有求出来。套用cash一题的策略使用cdq分治解决,先递归左边,再用左边的更新右边,再递归右边。注意NTT需要补成2的次幂,常数有点大,但只要保

2016-02-27 22:11:05 718

原创 bzoj4361 isn(树状数组优化DP)

要点:一个不合法的状态一定是由一个长度多1的不下降子序列转移来的,直接减掉即可。然后就转化为求长度为i的不下降子序列个数。定义f[i,j]表示以i结尾的,长度为j的不下降子序列个数,则f[i,j] = sum(f[k,j-1]), k#include#include#include#include#define rep(i,a,b) for(int i=a;i<=b;++i)#d

2016-02-27 17:49:54 1102

原创 hdu5290 Bombing plan(树DP)

题意:给一棵树,边长都是1,每个点有个点权w[i],表示这个点能覆盖与其距离多远的点。选最少的点覆盖树上所有点。N树DP好久都没练了,并且感觉以前也不是特别擅长写树DP,见的模型也不多。以前的树DP基本都是多叉转二叉,记录向上若干节点的信息,树背包等套路,这道题不一样,因为是无根树,每个点不仅会辐射他的父亲,还对他儿子有影响。我们要开两个DP数组,f[i][j]表示i节点子树全部被覆盖,且与其

2016-02-27 16:00:15 443

原创 BZOJ2310 parkii (插头DP)

题意:给一个矩阵,让找一条简单路径使路径和最小。N如果矩阵全是正数的话枚举起点终点跑跑费用流就好了,省选的话一定会给这个部分分。考虑用括号序列的插头DP,增加一个3号表示起点和终点那种插头。注意这个1表示左括号,2表示右括号,3表示其它这个是有讲究的,可以用xor来很方便地转化。分类讨论比较繁琐,参考了一下claris的才完整地写出来。但是有些细节的处理上要注意和回路的区别。还有就是要

2016-02-25 00:34:51 898

原创 ants(插头DP)

有一个N*N的矩阵,需要用若干循环将其铺满,使得每个格子都处于一个循环上,求方案数,逆时针和顺时针的循环算作不同的方案。n插头DP,用0表示空,1表示插向轮廓线下侧的插头,2表示插向轮廓线上侧的插头。一共有9种转移,分类讨论即可。实现的过程中可以用4进制来代替3进制。由于我直接用的city那道题的插头DP模板,结果N=8以上就卡了很久。注意换行的时候不能直接移位,因为会产生不合法的状态,要

2016-02-24 17:18:56 440

原创 BZOJ4310 跳蚤(后缀数组+二分答案)

题意:将一个字符串分成不超过K段,使得这K段中,所有子串中字典序最大的最小。即每一段当中取一个最大的子串,再在所有段的最大子串再取一个最大值,让这个最大值最小。长度10W。最大值最小,明显二分,但是乱二分是没前途的。要对所有本质不同的子串排名后二分,也就是你要能求出你二分出的第mid大的子串。这个可以用后缀数组来搞,先求出sum(n-sa[i]-height[i])作为不同子串的总数,求第

2016-02-24 00:41:40 2162

原创 hdu5372 Segment Game (树状数组)

题意:每次插入一条线段或删除之前一条线段,每次操作线段长度递增,求插入一段线段时有多少线段被它完全覆盖。由于保证线段长度递增,我们可以用右断点在合法区间内的减去左端点不在合法区间的,可以用树状数组分开维护。下标需要离散化。下标可以是负数,这读入优化坑了我一个小时。。#include#include#include#include#includeusing namespac

2016-02-24 00:28:01 357

原创 [BZOJ4259] 残缺的字符串 (FFT)

题意:定义*号可匹配任意字符。给出A串,B串,求A串在B中完全匹配的所有位置。将*号视作0,则两个等长的串可匹配当且仅当Σ(a[i]-b[i])^2*a[i]*b[i]==0。将A串和B串最左边对齐,每次上式都要重算一次,不科学。所以讲A串先反转过来然后补上*号,就是卷积啦。原来的万径人踪灭一题当中用FFT来求了回文串,这里又能玩字符串匹配,真是太6了。#include#includ

2016-02-21 17:42:54 2302

原创 BZOJ3125city (插头DP)

题意:就是上一道formula的基础上限定某些格子只能竖着通过,某些只能横着通过。还是括号表示。这个转移的时候特判一下就好了,具体实现基本和上一题一样。#include#include#include#include#includeusing namespace std;#define LL long long#define clr(a) memset(a,0,sizeof

2016-02-16 23:26:28 874

原创 ural1519Formula 1 (插头DP)

题意:n*m的地图,'*'代表不能走,'.'代表可以走。求哈密顿回路的数量。n,mclaris讲了插头DP,感觉都差不多听懂了,但是实现还是有一定困难,花了3个小时才写出来我的第一篇插头DP的程序。感觉就是维护一个轮廓线,每一格压位表示,然后DP过程中每一次对这个轮廓线的维护都是O(1)的。这是用括号表示的,0表示空,1表示左括号,2表示右括号。注意分类讨论就行了。实现的时候还是要ha

2016-02-16 23:24:14 590

原创 【bzoj3171】[Tjoi2013]循环格 (费用流)

题意:N*M的矩阵,每个格子有一个LRUD标记表示走到这个格子后下一个格子往哪个方向走。走出边界后自动到另一端。问至少修改几个格子使得在任意一个格子上开始都可以最后回到自身。N,M这个15真是迷一样的数据范围。。搜的话太大了,DP的话太小了。。然后我就想是不是各种状态很复杂的或者是状压DP,想了差不多15分钟没想出来。。真是太蠢啦!!以前做过一道题是要让一个有向图中每个点处于k个环内,而这道题

2016-02-14 17:08:15 548

原创 BZOJ1858 序列操作 [treap,避免双标记的特殊技巧]

题意:给一个01序列,有5种操作:0 L R 将[L,R]之间的数字都变成0;1 L R 将[L,R]之间的数字都变成1;2 L R 将[L R]之间的数字都取反;3 L R 询问[L R]之间1的个数;4 L R 询问[L,R]之间连续1的个数最大是多少.第一眼:这sb题。。第二眼:这sb题。。第三眼:哎呀卧槽这儿取反和赋值俩标记咋搞???大致脑补了一下,

2016-02-11 21:39:43 482

原创 [CQOI2015]任务查询系统 (可持久化treap)

题意:有n个任务。每个任务描述为(s,e,p)表示起始、结束时间、优先级。M次询问,查询i时刻优先级排前k的任务的优先级之和。如果k超过那个时刻运行任务的总量,输出那个时刻所以优先级之和。强制在线。s,e哎呀我去这么裸的主席树为什么去年省选只有一个人A了?开始看做插入一个数,结束看做删除,询问就是问第i个版本中前k个之和。先把p离散化,然后扫描一遍用主席树来维护p值。好像没什么坑点

2016-02-05 23:20:17 1896

原创 [hdu4453]looploop [treap/splay]

题意:给定一个循环序列,支持以下操作:区间增加,区间翻转,单点插入/删除,移动光标,询问光标所指的位置的值。首先一眼看出可以用线性数据结构(平衡树)来维护。然后这些操作都很基础。但是要注意光标怎么处理。可以维护一个k记录它指向第几个,但是这样在区间操作时候可能区间分别位于这个序列的两端(因为你破环为链了)。比较好的方式是每次人工使得光标指向的元素位于序列的最左端。这种题以前都是写的spla

2016-02-05 22:58:02 537

原创 WC2016酱油记

这次WC2016真有趣啊!第一课堂讲的东西普遍偏难,很难保持跟上思路,于是就当了解来学了。picks的多项式,太深奥了,接触到了一些奇葩复杂度的算法。正统的有FFT,NTT,不过不好的是取模比较麻烦。有个karatsuba算法,N^1.585的复杂度,但是是基于分治实现的,可以很方便地取模。然后有关于正规语言与自然语言处理的课。学了一下正则表达式,然后之后的都很难听懂了,大致知道自然语

2016-02-02 09:23:18 699

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除