- 博客(23)
- 收藏
- 关注
原创 GDKOI2016 day 2 Problem 4. 小学生数学题 - 数学题
题意:求∑i=1ni−1modpk,p≤105\sum_{i=1}^{n}i^{-1}\mod p^k,p\leq 10^5
2016-02-23 20:53:15 2561 6
原创 GDKOI2016 题解
day 1 Problem 1. 魔卡少女 题意:动态维护区间内所有子序列的异或和的和,单点修改。 解法:先做一个序列的异或前缀和Si=Ai⊕Si−1S_i=A_i\oplus S_{i-1},于是查询就变成了询问[l,r][l,r]内的∑i<jSj⊕Si\sum_{i<j}S_j\oplus S_i。注意到元素的大小只有10001000,也就是不超过10个二
2016-02-22 13:24:45 1771
原创 GDKOI2015 day 1 代码
项链:#include using namespace std;#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >= _ ; i --)#define cr(x) memset(x , 0 , sizeof x)inline
2016-02-17 17:52:00 1186
原创 【 bzoj 2553 】 [BeiJing2011]禁忌 - AC自动机+矩阵乘法
将自动机建出来之后就可以得到一个转移矩阵,在没有两个串不能重叠的条件下直接跑矩乘就可以了。但是现在有这个条件,我们就新加一个点表示转移到的单词节点会转移到这里面去,然后这个点连出的边只有自己且边权为1。还要注意的是,一个节点的fail点是单词节点的话那么这个点也要标记成单词节点(终态),因为他是禁位,也要转移到那个新点。#include <bits/stdc++.h>#define rep(i,a
2016-02-16 22:46:37 1214
原创 【 bzoj 1444 】 [Jsoi2009]有趣的游戏 - AC自动机+矩阵乘法
假设现在建好了一个AC自动机,那么接受一个串相当于从根节点走到单词节点。对应到这道题上,每走一步是有权值的(概率),就相当于无向图一样。这样只要把邻接矩阵建出来然后自乘一定次数就可以了。 因为精度要求不太高,所以自乘个63次就完全够了233333#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _
2016-02-16 18:11:53 1222
原创 【 bzoj 3670 】 [Noi2014]动物园 - KMP
据说这题松爷现场脑补hash实现kmp?吓尿了orz 如果不看超过一半那个限制的话num[i]num[i]实际上就是ii跳多少次到0,这样直接KMP一下,完了之后跳一下就可以了。#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (i
2016-02-16 15:22:12 628
原创 【 bzoj 1355 】 [Baltic2009]Radio Transmission - KMP
考虑一个串重复出现多次并在最后超出这个字符串的话,肯定存在一个最长后缀等于最长前缀且后面剩下来的一截是那个重复串。 KMP一下没了。#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >=
2016-02-16 12:08:40 722
原创 【 bzoj 2555 】SubString - LCT SAM
LCT无脑维护SAM的right集大小。 别问我为啥范围开到那么大= =#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >= _ ; i --)inline int rd() {
2016-02-15 23:02:40 898
原创 【 bzoj 2400 】Spoj 839 Optimal Marks - 最小割
每一位之间的贡献是独立的,所以枚举二进制位来算。 每个未确定的点,显然他的权值要么是0要么是1,他划进0有一个代价,划进1有一个代价,同时和相邻的未确定点也有代价。如果用最小割,割完后SS的权值均为1,TT的权值均为0,这样最小割就是最小代价。考虑怎么去构造这样的图。 对于确定是1的,从s连到他inf流量,确定是0的连到t也是inf流量,剩下按无向图建图即可。 割完后从S开始跑个d
2016-02-15 20:59:12 829
原创 【 bzoj 2127 】happiness - 最小割
A了这题的我是这样的:暴力建模似乎没啥好说的。。做了2132之后感觉会好些。。。#include <bits/stdc++.h>#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for (int i = a , _ = b ; i >= _ ; i --)#define fore(i,u)
2016-02-15 16:11:29 704
原创 【 bzoj 2132 】GDOI圈地计划 - 最小割
考虑黑白染色成二分图。我们要的是最大收益,那么就应该是删掉最小的一些收益。对于白点WW,连S→WS\rightarrow W,W→TW\rightarrow T,容量分别为A收入和B收入,黑点则反过来,然后有关系的双向连上容量为C的和的边。 这样割掉之后就行了。#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) fo
2016-02-15 15:37:57 917
原创 【 bzoj 3955 】[WF2013]Surely You Congest - 网络流 SPFA
显然地可以看出两个乘客有可能撞车当且仅当他们的最短路相同。 于是对乘客按最短路分组,每组在图的最短路DAG上跑类似最大路径覆盖的东西即可。 每次稍微要重新构图,复杂度可能比较高,不过跑起来还是可以的。 #include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for (int i = a , _ = b
2016-02-15 10:49:42 1212
原创 bzoj 1449 && bzoj 2597 - 一类凸费用网络流
对于一个网络G=(V,E)G=(V,E),若其中的边权Wu,vW_{u,v}与边(u,v)(u,v)的流量fu,vf_{u,v}呈凸关系,则可以拆边来搞,设其费用与流量的关系为g:fu,v→Wu,vg:f_{u,v}\rightarrow W_{u,v},那么第i条边容量为1,费用为g(i)−g(i−1)g(i)-g(i-1)。 这两题有几个共同点,一是在于凸费用,二是在于需要分配点的流量。前
2016-02-14 19:26:27 1201
原创 【 bzoj 2661 】 [BeiJing wc2012]连连看 - 拆点费用流
每个数ii拆成两个点LiL_i和RiR_i,连边S→Li,Ri→TS\rightarrow L_i,R_i\rightarrow T流量为1费用为0,每对有关系的数(x,y)(x,y)连边 Lx→Ry,Ly→RxL_x\rightarrow R_y,L_y\rightarrow R_x流量为1费用为x+yx+y,打个表可以发现边数不会很多,直接跑最大费用最大流。 #include <bits/
2016-02-14 19:14:30 1208
原创 【 bzoj 1797 】[Ahoi2009]Mincut 最小割 - 经典题
这个题就是要求一条边在最小割里面的充分条件和必要条件。 首先考虑第一问,也即求充分条件。 我们先对这个图进行最大流算法得到任意一个最小割。设这个时候的残量网络为GfG_f。那么GfG_f中的点集可以显然地被分成了三部分,一部分是源ss可以到达的,一部分是可以到达tt的,剩下的独立成一部分。 可以证明,第一类点一定会被归为最小割中的SS集,第二类点一定会被归为TT集,第三类点两个集合
2016-02-14 19:05:33 1756 1
原创 【 bzoj 3509 】[CodeChef] COUNTARI - 分块FFT
看起来很像数据结构乱搞? 然而仔细看看数据范围:Ai<=30000A_i<=30000 这意味着我们可以用生成函数来乱搞。 将式子变成Ai+Ak=2AjA_i+A_k=2A_j,于是就可以很愉快地枚举j,记录j两边的生成函数,然后求卷积 就行了 ……? 毛。。。这样卷积是O(nVlogV)O(nV\log V)的 //以下设V=max{A}V=\max\{A\
2016-02-04 21:05:23 2270
原创 【 bzoj 3545 】 [ONTAK2010]Peaks - Treap快速合并
听说这题有在线做法……?YY了一下似乎要把各种东西都给可持久化掉。。。好麻烦。。。
2016-02-04 19:19:37 1179
原创 【 bzoj 1014 】 [JSOI2008]火星人prefix
用平衡树瞎维护一下哈希串即可。 不知道为啥这题写Treap这么慢= = P.S.提取出区间之后一定要判断是否为空区间!插入的时候计数器也要++!#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for (int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b)
2016-02-04 19:09:32 1002
原创 【 bzoj 3065 】 带插入区间K小值 - 树套树乱搞
这题写的真是excited。。。 虽然树套树这种东西随便嘴巴嘴巴就会了。。。但是写起来还是十分的蛋疼。。。 下午四点左右开始写,到将近七点写完,然后吃饭+思考人生了一小时,又开始debug,将近十二点时过对拍,洗了发澡冷静了一下,然后轰炸评测机= =十二点半左右时AC。 最后发现是因为线段树值域开小了。。。orz。。。 带插入带修改的区间K小值是有很多做法的,然后我看VFK给
2016-02-04 01:00:22 1133
原创 【 bzoj 1500 】NOI2005 维修序列 - 平衡树乱搞 treap
嘛。。。又是屯了一年多的题。。。然而之前太弱了调不出来QAQ 随便一个可以提取区间的平衡树都可以搞这道题。 然后这题的splay我写过3个版本了。。。QAQ 为了写WC2016的T3,用treap写了一发这题练练手。 似乎没啥东西需要注意的。代码还好长,以后想办法缩一缩吧。。。
2016-02-02 23:31:14 1609
原创 【 bzoj 4355 】 Play with sequence - 线段树乱搞
先讲个故事。。。 据说某一天,claris扔了一道题到某群里面然后引起了不大的讨论~然后好学向上的whx同学发现了这题。。。聪明的whx想了很久。。。然后!whx发现看不懂claris给的暴力的证明。。。于是去找了吉司机。。。吉司机若有所思。。。再后来跟whx说:这是对的。。。然而whx同学并没有写。。。最后就弃坑啦。。。 第二年,whx来到WC2016的会场上,发现:诶,吉司机的线段树
2016-02-01 19:13:23 1705 2
原创 WC2016随记
简单地说WC基本就是:吃饭,听课,一脸茫然,吃点心,睡觉,吃饭,睡觉,听课,一脸懵逼,吃点心,睡觉,吃饭,不知所措,睡觉。 直接结果就是最后的测试挂啦。另外fsf 155pts rank2怒艹集训队! 不努力谁也保不了自己啊。
2016-02-01 16:43:22 844
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人