- 博客(28)
- 收藏
- 关注
原创 【博弈论】bzoj1022[SHOI2008]小约翰的游戏John
题目链接 题目大意:nim游戏,定义取最后一枚石子的人输。大概在IOI2009贾志豪的论文上有一道例题吧… 然而这是08年的题,默默流泪…如果全部都是11的话,直接判断堆数的奇偶性即可。 那么如果只有一个不是11的话,将这些石子数全部异或起来,如果非零这有必胜策略。猜测: (1)所有堆的石子数都为11且游戏的异或值为00。 (2)有些堆的石子数大于11且游戏的异或值不为00。 证明:对于第
2016-05-02 09:31:14 375
原创 【数论】bzoj3601一个人的数论
题目链接 如果这题叫“一只蛤的神论”…反正窝只会30分乱搞… test1:暴力水过 test2:欧拉函数 test3:n/2*欧拉函数…蒟蒻之前从未见过莫比乌斯反演与高斯消元如此奇妙的结合在一起… 所以来瞎bb一下…明确目标:ans=∑ni=1[gcd(i,n)==1]idans=\sum_{i=1}^{n}[gcd(i,n)==1]i^d,然后就开始漫长的治疗公式恐惧症的历程…利用莫比乌
2016-04-29 23:57:22 1181
原创 【数论】bzoj4174tty的求助
题目链接 (ps:这是一道权限题…)计算∑n=1N∑m=1M∑k=0m−1⌊nk+xm⌋\sum_{n=1}^N\sum_{m=1}^M\sum_{k=0}^{m-1}\lfloor\frac{nk+x}m\rfloor 其中N,M<=500000,0<x<=100000N,M<=500000,0<x<=100000,xx精确到小数点后88 位小数。 根本不会的说… 然后去看po姐博客就一脸
2016-04-29 17:37:49 781
原创 【多项式快速幂】bzoj3992: [SDOI2015]序列统计
题目链接如果对生成函数稍有了解的,应该可以一眼看出这题要用生成函数吧… 附上蒟蒻对生成函数浅层次的理解: f=a0g0+a1g1+a2g2+...f=a_0g^0+a_1g^1+a_2g^2+... 其中aia_i取决于达到ii的状态的个数。 转移的时候就变成了两个多项式相乘,就可以用FFT,NTT之类的东西辣。#include <iostream>#include <cstdio>#i
2016-04-27 01:28:36 619
原创 【拉格朗日乘数法】bzoj2876: [Noi2012]骑行川藏
题目链接普及一下拉格朗日乘数法。 知识链接问题:求f(a,b,c,...)f(a,b,c,...)的极值,其中g(a,b,c,...)=0g(a,b,c,...)=0。 即一个多元式在某一限制下的极值。令f+λg=0f+\lambda g=0。 于是有:f‘(a)+λg‘(a)=0f`(a)+\lambda g`(a)=0 f‘(b)+λg‘(b)=0f`(b)+\lambda g`(b)=
2016-04-26 19:48:28 830
原创 BestCoder Round #80小结
比赛传送门CA娘出一场比赛就身败名裂….第一题:给定一个数集,如果能使用其中的数相加得到任意自然数(每一个数可以使用多次),输出”YES”,否则输出”NO”。大水题… 直接判断是否有11就行了啊… 然后交一发,WA辣… 然后一看300多次提交一个过的都木有…然后在Discuss中说道00也是自然数…那么再多判一个00就行了啊…第二题:对于一条x+y=qx+y=q的直线,求它和坐标轴在第一象限围
2016-04-18 08:41:54 372
原创 【线段树】BZOJ4373算术天才与等差数列
传送门 Description 给定一个长度为 n 的序列,其中第 i 个数为 ai。 有 m 次操作,每次要么修改其中的某一项,要么给出询问l; r; k,问区间 [l; r] 内的数从小到大排序后能否形成公差为 k 的等差数列。 Input 第一行包含两个正整数n,m(1<=n,m<=300000)n,m(1<=n,m<=300000),分别表示序列的长度和操作的次数。 第二行包含n
2016-03-02 00:00:19 463
原创 【数位DP】BZOJ3629数字之积
传送门数位DP大法好… 乘积太大保存不下来肿么办? 这乘积都是11到99的数字乘起来滴,于是乎用质因数表示就好了,特别注意对每一种质数的最大个数最好卡着开数组,要不然很容易MLE滴…原谅蒟蒻太弱,代码为了放错就写的很丑= =#include <iostream>#include <cstdio>#include <cstring>#define LL long long intusing
2016-02-24 00:13:27 493
原创 【数位DP】SPOJ10606Balanced Numbers
传送门 题目大意:一个数被称为是平衡的数当且仅当对于所有出现过的数位,偶数出现奇数次,奇数出现偶数次。 给定AA,BB,请统计出[A,B][A, B]内所有平衡的数的个数。注意,这里的偶数是指出现过的数,并且不能计算前导零。蒟蒻一开始理解成所有的偶数和奇数,被坑成狗QAQ对于每一个数有三种状态: 00:这个数还木有出现过。 11:这个数出现过奇数次。 22:这个数出现过偶数次。 于是乎用
2016-02-23 23:49:45 271
原创 【DP】BZOJ4347[POI2016]Nim z utrudnieniem
一道权限题/(ㄒoㄒ)/~~无法传送Time Limit: 3030 Sec Memory Limit: 6464 MB Description A和B两个人玩游戏,一共有mm颗石子,A把它们分成了nn堆,每堆石子数分别为a[1],a[2],...,a[n]a[1],a[2],...,a[n],每轮可以选择一堆石子,取掉任意颗石子,但不能不取。谁先不能操作,谁就输了。在游戏开始前,B可以扔掉若
2016-02-20 23:49:05 296
原创 【HDU5452】Minimum Cut
转送门 题目大意:已知一个nn节点mm条边的无向图以及它所对应的一棵生成树,要求只能删除一条树边和若干条非树边,求最少要删除多少条边。 注意:必须删除一条树边且只能删除一条树边(蒟蒻一开始理解成了至少删除一条树边QAQ)既然必须删除一条树边,那么就枚举这一条树边吧o(>﹏删去这条树边之后,生成树就被分成了两个部分,我们只需要将连接这两个部分的边全部删除即可。那么问题来了,怎样快速滴算
2016-02-20 22:59:42 486
原创 【点分治】poj1741
众所周知,树分治有两种:点分治和边分治。顾名思义,点分治是按点进行分治,为了让子问题的规模尽量小,我们通常选择重心做为分治的点;而边分治通常选择使得所分离出来的两棵子树的结点个数尽量平均的边。求重心和这样的边均可以用树DP的方法解决。通常点分治和边分治的递归层数为O(logn)O(log_n),在实际运用中,边分治的层数经常达到O(n)O(n)效率低下…… 以上均属于扯淡……关于树的分治有一篇IO
2016-02-15 23:54:32 279
原创 【费用流模型】BZOJ2668 UVA1317 UVA1486 UVA1104
1.BZOJ2668 按照棋盘建图。 为了满足格子(i,j)(i,j)只能参与m(i,j)m(i,j)次交换,将每一个格子拆成两个,连边。若该格子的起始状态和结束状态不同,那么容量为ceil[m(i,j)/2]ceil[m(i,j)/2];否则容量为floor[m(i,j)/2]floor[m(i,j)/2]。 相邻的格子从i‘i`连向jj,容量为+∞+∞,费用为11。 跑一次最小费用最大流
2016-01-21 17:48:52 432
原创 【网络流之最小割模型】poj3469 BZOJ3144 UVA1212
1.poj3469 题目大意:有nn个任务,每个任务均可以在2个核上完成。其中,有mm对任务之间需要信息交换,即若这两个任务在不同核上完成需要另花ww。求最小费用。建立nn个节点表示任务,源点代表第一个核,汇点表示第二个核。第ii个点向源点连边,容量为aia_i;向汇点连边,容量为bib_i。若i,ji,j之间有信息交换,那么i,ji,j之间连一条容量为ww的无向边。答案为最小割。 如何理解?
2016-01-20 21:42:38 326
原创 【KMP+矩阵加速】BZOJ1009[HNOI2008]GT考试
BZOJ1009只要是做过poj2778(AC自动机+矩阵快速幂)的,这道题就不算是一道难题。令f[i][j]f[i][j]表示一个ii位数的后jj位和不吉利数的前jj位时的方案总数,同时不包含长度大于jj且与不吉利数前缀相同的后缀。(蒟蒻就是没有想到这一点导致转移方程出了点问题,WA成狗了= =) 为什么要这样呢? 例如不吉利数121212,那么f[i][2]f[i][2]就包含了f[i][4
2016-01-16 00:08:53 288
原创 【搜索】BZOJ3139 HNOI2013比赛
BZOJ3139 搜素题一道。 n<=8n<=8乱搞都可以过。(BZOJ1306和这道题一模一样,只是n<=8n<=8)先付乱搞代码一份(只能过BZOJ1306)#include <iostream>#include <cstdio>#define mod 1000000007using namespace std;int n, rest[15], ans, sum;void dfs(
2016-01-15 00:44:37 312
原创 【AC自动机】hdu2222 hdu2896 hdu3065 zoj3430 poj2778 hdu2243
AC自动机用于多个模式串与多个母串的匹配。 第一步:根据模式串建立字典树int len=strlen(w), r=root; for(int i=0;i<len;++i) { if(tree[r].ch[w[i]])r=tree[r].ch[w[i]]; else r=tree[r].ch[w[i]]=++cnt; } ++tree[r].c
2016-01-07 23:52:10 316
原创 【上下界网络流】sgu194 zoj3229 sgu176 zoj1994 zoj3496
终于意识到了一个好的网络流模板是有多么重要。%>_<% 而且上下界的代码细节特别多,再加上蒟蒻木有写一段就检查的好习惯,直接导致调了很久……sgu194 这是一道无源点汇点的求上下界网络流的可行流。 首先把它转化为一个有源点汇点的网络流。令du[u]du[u]表示出边的下界之和减去入边的下界之和。把所有边的流量改为up−downup-down(上界-下界)。 建立一个超级源点ss和超级汇点t
2016-01-07 21:12:06 454
原创 【费用流】hdu1533 poj2516 bzoj1070 bzoj1061
费用流是在网络流的基础上求流最大的前提下使得费用最小(或者最大)。算法一:SPFA寻找增广路 在isap算法中,是当dis[v]+1==dis[u]dis[v]+1==dis[u]时才访问vv。即边(u,v)(u,v)的边权为11。在这里令边权为流过该边的费用即可。bool spfa(){ queue<int>q; for(int i=b;i<=e;++i)dis[i]=inf,
2016-01-03 12:33:53 321
原创 【后缀自动机】SPOJLCS SPOJNSUBSTR SPOJLCS2 HDU4416
据说后缀自动机可以替代后缀数组和后缀树…… 后缀自动机,用线性的节点数来保存所有的后缀。构建自动机struct node{ int ch[26], len, link; void init() { len=link=0; memset(ch,0,sizeof ch); }}tree[MAXN<<1];int pos;char w
2015-12-29 22:20:36 322
原创 【后缀数组】poj1743Musical Theme
推荐阅读《后缀数组——处理字符串的有力工具》。 后缀数组的主要目的是将每一个后缀提取出来,按字典序排序,并求出height数组(当前排名为i的后缀与排名为i-1的后缀的最长公共前缀)。后缀数组的排序是基于基数排序。bool cmp(int num[],int a,int b,int len){return num[a]==num[b]&&num[a+len]==num[b+len];}void
2015-12-28 23:52:55 261
原创 CodeforcesRound#337(Div. 2)
终于等到了一场不是凌晨开始的CF了~(≧▽≦)/~ 读题慢,手速慢,破题慢,代码实现能力不够,一AC不行,rating掉…… 题目链接第一题:有一个根长度为nn的木棍,将它做成一个矩形(不能是正方形)。求有多少种方案(长和宽交换是一种)。水题一道。#include <iostream>#include <cstdio>using namespace std;int n;int main(
2015-12-27 22:10:11 344
原创 【AC自动机】hdu2222 hdu2896 hdu3065 zoj3430 poj2778
AC自动机用于多个模式串与多个母串的匹配。 第一步:根据模式串建立字典树int len=strlen(w), r=root; for(int i=0;i<len;++i) { if(tree[r].ch[w[i]])r=tree[r].ch[w[i]]; else r=tree[r].ch[w[i]]=++cnt; } ++tree[r].c
2015-12-24 20:39:16 338
原创 【置换+DP】BZOJ1025
题目链接这道题题目很长,废话太多。 说白了就是有若干个正整数,它们的和为nn,求lcmlcm即最小公倍数有多少种。把题目看透后,似乎题变简单了。然后一眼就看出是一个DP。然而蒟蒻还是不会做。动规弱爆了= =决定最小公倍数的,是这些数的质因数以及对应的幂。 那么首先筛一下素数吧,然后DP。/******************************************************
2015-12-19 12:30:59 317
原创 【HDU3294,URAL1294】manacher算法
manacher算法用于计算最长回文子串。 上模板 //s是原子符串,而w是在s的前面、后面、字符之间插入一个未出现的字符‘#’ scanf("%s",s); w[0]='*';//防止越界,在最前面加上一个‘*’ w[++len]='#'; for(int tmp=strlen(s), i=0;i<tmp;++i) { w[++len
2015-12-19 12:05:48 278
原创 【LCT】BZOJ2049[Sdoi2008]Cave 洞穴勘测
传送门动态树LCT是一种NB的数据结构,虽然不太好写。 与树链剖分类似,LCT把最后一个访问的儿子做为重边(暂且将Perferred Path叫做重边吧QAQ)。 对于一个由重边组成的链用序列之神Splay来维护。那么一棵LCT就有很多个Splay,然后每一个Splay的根都和它真实的父亲相连。在Splay中是将该点上面的点放在左儿子,下面的点放在右儿子。 具体的操作详见杨哲的SPOJ375
2015-12-05 17:07:57 601
原创 【弦图染色】BZOJ1006神奇的国度
传送门如果不知道玹图,请学习陈丹琦的弦图与区间图 PPT学习完了之后就发现这是一道裸题= = 先求出完美消除序列,再倒着进行贪心。蒟蒻用的是MCS算法。 在这里蒟蒻提一个小小的问题,为什么一定要先求出完美消除序列再来进行贪心?#include <cstring>#include <cstdio>#define MAXN 10005#define MAXM 1000005using n
2015-12-05 09:03:14 454
原创 BZOJ1005[HNOI2008]明明的烦恼
传送门蒟蒻这段时间才开始刷BZOJ,然后发现很多知识都没学= = 这道题需要用到prufer编码。prufer编码用于树的形态。一个prufer编码与一棵树是唯一对应的。如何求prufer编码? 第一步:算出每一个点的度。 第二步:找到度最小同时编号最小的点,将它删去,并将它的父亲放入prufer编码中。 第三步:重复第二步,直到只剩下两个节点。 如: 这棵树的prufer编码为1
2015-12-04 21:43:25 376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人