#1

由于自己太懒不想一篇一篇写题解。于是就准备写很久的题再一次发一次题解。大概囤50道就发一次?

还有几十天就退役了看看能囤几波吧TAT。。

这次囤了50题,虽然不都是BZOJ的QwQ。

Problem 2728. -- [HNOI2012]与非 

有A nand A = not A,not ( A nand B ) = A and B,这样所有的位运算都可以算出来了。而如果对于A里的每一个数有一些位都是一样的话,那么这些位无论怎么运算最后都是一样的要么都是0要么都是1,这样我们可以只把本质不同的位拿出来数位dp一遍就可以了。

Problem 2729. -- [HNOI2012]排队

组合数学+高精度。(把老师和男同学放在一起然后让女同学插进序列中。。)

Problem 1092. -- [SCOI2003]蜘蛛难题

恶心模拟题。

Problem 2727. -- [HNOI2012]双十字

扫描线+树状数组

Problem 2731. -- [HNOI2012]三角形覆盖问题

因为三角形是等腰三角的,可以从下往上扫描,每次答案累加一些梯形的面积。扫描线扫到一个新的高度时,把底边在这个高度的三角形加进去,把原来在处理的三角形的底--,如果减完为0,那么这个三角形就可以删掉了。

把一些被包含的三角形去掉,用个双向链表维护扫描线的过程就可以AC了

Problem 2734. -- [HNOI2012]集合选数

状压dp。可以列出这样一张表,第一行是1,3,9……3^n,第二行是2,6,18,……2*3^n,在这张表中相邻的数字不能同时取,经典的状压dp。

然后把1和每一个质数(除了2,3)都这么做一遍累加起来就是答案了。时间复杂度O(lnn*logn*2^(log₃n)

Problem 1444. -- [Jsoi2009]有趣的游戏

精度要求很低嘛。。把AC自动机建出来,建出矩阵,直接跑许多遍矩阵乘法就可以了。(正解当然是高斯消元一遍。

Problem 2553. -- [BeiJing2011]禁忌

把AC自动机建出来然后因为要统计答案和,就新增一行一列,令b[cnt+1][cnt+1]=1,这样转移的时候答案就被累加起来了。这题卡精。。

Problem 3322. -- [Scoi2013]摩托车交易

才不是看到交易两个字才去写这题的呢!显然走的边是mst上的边,于是可以先做一遍mst。而且到达一个点的金块取决于手上有的金块和路径上的瓶颈边。

逆序把每个点的limit算出来。(因为最后一个点出去的时候金块要是0)

lim[n]=max(0,-b[ord[i]]),lim[i]=min(lim[i+1],MN(ord[i],ord[i+1])+max(0,-b[ord[i]]))

然后正序跑一遍就可以了。

Problem 1930. -- [Shoi2003]pacman 吃豆豆

k取方格数? n太大优化建图:先拆点,如果有三个点x,y,z形成偏序的话,可以x’->y,y’->z,流量为2,费用为0,如果有两条流通过x,y,z而且这两条流不相交。然后让每个点x->x’,一条流量为1,费用为1,一条流量为1,费用为0,表示费用只算一次。

Problem 2465. -- [中山市选2009]小球

只要不看错题意就是水水的费用流

Problem 2468. -- [中山市选2010]三核苷酸

暴力预处理出所有的相同串,然后正面gang和式。

2439: [中山市选2011] 序列

用f[i]表示1~i中让数列单调递增的费用,g[i]表示i~n中让数列单调递减的费用。

f[i]=f[i-1]+max(0,a[i-1]-a[i]+1),g[i]=g[i-1]+max(0,a[i+1]-a[i]+1)

设让1~i单峰,ans[i]=max(f[j]-f[1],g[j]-g[i]);(就是说我让一边的某一个点增加的话,可以同时让右边一个点减少。等价于差分序列。在[l,r]中+1相当于差分后b[l]+1,b[r+1]-1,然后中间都没有变化。)

可以发现决策点单调。而且i-1的决策点是<=i的决策点的。

单调队列达到O(N)

Problem 3996. -- [TJOI2015]线性代数

把式子推一推就是个最大权闭合图。

Problem 1190. -- [HNOI2007]梦幻岛宝珠

分层dp。

f[i][j]表示取了j个2^i,对于重量为a*2^i的直接做一遍背包。然后层与层之间再做一次背包。

具体是这样的:考虑到我可以把第i位化成两个i-1位,f[i][j]=max(f[i][j],f[i][j-k]+f[i-1][min(sum[i-1],2*k+(s&bin[i-1]))]

sum[i]表示第i位至多有多少个可以取到,除了题目给的点,还要预留出给之前的位置。

这样推一遍就可以得到答案了。。(但是为什么我感觉我还是不是很懂。。

Problem 2746. -- [HEOI2012]旅行问题

求前缀的lcp。

开始非常作死的写了个SAM。然后发现空间完全不够。。其实只要拿出fail树就可以了SAM还是AC自动机都是无所谓的。。

Problem 2659. -- [Beijing wc2012]算不出的算式

随便打个表找找规律就行了。

Problem 1977. -- [BeiJing2010组队]次小生成树 Tree

写个倍增乱搞。。

Problem 1251. -- 序列终结者

splay模板题

Problem 1500. -- [NOI2005]维修数列

splay模板题。(各种标记真心烦QwQ。。

Problem 1507. -- [NOI2003]Editor

我才不会告诉你我偷懒写了rope

Problem 2006: [NOI2010]超级钢琴

堆+rmq

记录一个三元组(i,l,r)表示左端点为i,右端点在l,r取到的最大值,并记录右端点的位置pos。

用优先队列维护这个值,每次(i,l,r)出队之后,让(i,l,pos-1),(i,pos+1,r)入队。

然后区间最值写个RMQ。

Problem 2631. -- tree

lct模板题

Problem 2257. -- [Jsoi2009]瓶子和燃料

其实这是一道数论,由于ax+by=d,所以找出最大的d,使得有不少于k个数是它的倍数就行了。

Problem 1567. -- [JSOI2008]Blue Mary的战役地图

二维hash

Problem 4413. -- [Usaco2016 Feb]Milk Pails.txt

模拟题。

Problem 1143. -- [CTSC2008]祭祀river

最长反链=最小路径覆盖

Problem 1826. -- [JSOI2010]缓存交换

每次找最远的一定是最优的。因为懒得手写堆于是手写了个线段树

Problem 1449. -- [JSOI2009]球队收益

费用流。

S连所有队伍,队伍连比赛,比赛连汇。队伍赢一场相当于赢一场+少输一场,所以可以让S->i,费用为C[i]*2*j-1-D[i]*2*(b[i]+sum-j+1),最后把答案加上比赛全输后获得的收益。

Problem 1820. -- [JSOI2010]Express Service 快递服务

非常暴力的dp

Problem 1443. -- [JSOI2009]游戏Game

如果1*2的骨牌能完全覆盖空位的话,那么后手必输(设选点的是后手)。那么就是对图黑白染色判断能否出现完美匹配。

然后要输出方案,对于找不到匹配点的点,可以让它沿着交替路增广一遍,可以得到另外一个已经匹配的点,这两个点都可以被输出出来。

Problem 1560. -- [JSOI2009]火星藏宝图

由于绝对值不等式,对于点(i,j),比如它决策的那个点是在k列的话,只要符合条件,上面的点必定比下面的点优。

然后就可以稍稍压一下状态数。。

Problem 1819. -- [JSOI]Word Query电子字典

在AC自动机上dfs一遍就可以了。

Problem 1017. -- [JSOI2008]魔兽地图DotR

非常神奇的树形dp。

Problem 2007. -- [Noi2010]海拔

平面图最小割转最短路。注意一下方向的问题。

Problem 1491. -- [NOI2007]社交网络

随便写个floyed

Problem 2152. -- 聪聪可可

无数人写树形dp,我写了个点分练手。。。

Problem 2120. -- 数颜色

我写的是分块暴力,被真正的暴力教做人了TAT

Problem 3672: [Noi2014]购票

点分治维护凸包。

对于一个分治结构,把根到fa[rt]的这部分先分治,用它们来更新rt。这样我们就求出了根到rt的值。

像cdq分治一样,这些点对分治结构中其他点都是有贡献的,让它们按dis-limit排序,每次都把它的符合要求的祖先加到栈里面维护凸包。

这样的话在凸包里的点都可以作为当前点的决策。然后维护一个下凸包,把斜率在凸包上二分就好了。

(注意因为我们是一次次找祖先,所以凸包上的点在x轴方向上是单调递减的,要反着做下凸包。

Problem 1177. -- [Apio2009]Oil

分成六种情况讨论。。。维护一下每个点的左上左下右上右下二维前缀和。然后YY下式子。。

Problem 3675. -- [Apio2014]序列分割

发现可以顺序统计答案,看出是斜率优化,然后就没有然后了。

Problem 3514. -- Codechef MARCH14 GERALD07加强版

啊这题好鬼畜。反正我是看题解的TAT。

出现环的时候就把第一条在联通块的边弹掉,并记录下来。然后答案就是n-[l,r]中ntr[i]<l的个数(ntr[i]一开始都是0)。

然后lct+主席树。

Problem 1912. -- [Apio2010]patrol 巡逻

找两次过1的最长路,然后第二次找的时候把第一次的最长路上的权值赋为-1。

最长路=最长到儿子路径+次长到儿子路径。然后树形dp一下。

Problem 3624. -- [Apio2008]免费道路

题意是求一个生成树必须恰好包含k条白边。

先把必须拓展的白边找出来,然后再扩展成k条,最后把其他的黑边补上。

Problem 1411. -- [ZJOI2009]硬币游戏

啊这题。。在隔壁KPM大爷的一遍遍提醒下我一遍遍认识到自己有多么的蠢。。在掉rating之后写这题真是爽。。

变换2^x后a[i]=a[(i-2^x)%n]^a[(i+2^x)%n]。然后拿着S进行log(s)次变换就可以了。

Problem 3033. -- 太鼓达人

这个是个欧拉图。。。。然后爆搜找出欧拉回路就可以了。

Problem 3289. -- Mato的文件管理

莫队+逆序对个数

Problem 2040. -- [2009国家集训队]拯救Protoss的故乡

用树链剖分+线段树模拟一个费用流。

Problem - 650B - Codeforces

啊这题在比赛的时候并没有写出来啊哭。

向右走一遍向左走一遍,向右走一段转身再向左走完,向左走一段转身再向右走完。

恩O(n)枚举转折点跑一遍就可以了。。

Problem - 650C - Codeforces

这题觉得还是挺厉害的。先把同行同列中相同的数用个并查集并起来。然后对每行每列进行排序,把相邻的点(代表的并查集)用边连起来,通过dfs可以出来一个DAG。

然后对这个DAG直接标号就可以了。

一开始比较蠢写个vector都要强上迭代器,被KPM怒D真是开心。。。

posted on 2016-03-12 17:58  ctlchild  阅读(460)  评论(1编辑  收藏  举报

导航