自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [COGS2287][HZOI 2015]疯狂的机器人(NTT+组合数学)

题目描述传送门题解本来是想找一道题想一想dp到底是怎么用FFT优化的,然而写完了发现怎么和dp没啥关系呢 也可能是我太弱根本没看出来dp 不过确实是一道好题!在hxy神犇的一些提示下做出来…令g(i)g(i)表示只能上下走,不能左右走,不能不走,走i步最后回到原点的方案数 首先可以发现当i为奇数的时候g(i)g(i)一定为0 接着考虑i为偶数的情况,很显然向上走的步数和向下走的步数一定相等,

2017-03-09 21:50:01 854

原创 [BZOJ4503]两个串(FFT)

题目描述传送门题解受到上一道题的影响,这题想了很久… 因为这题的思路和上题真的是相似又互异的 令F(i)F(i)表示把小串结尾怼到大串的第i个字符上是否能匹配,0表示能匹配,非0表示不能匹配 对于大串,f(i)=s(i)f(i)=s(i),对于小串,g(i)=(s(i)=′?′)?0:s(i)g(i)=(s(i)='?')?0:s(i),也就是说,将通配符的权赋为0,其余的直接赋为自己的权值

2017-03-09 18:34:36 519

原创 [Codeforces528D]Fuzzy Search(FFT)

题目描述传送门题解将A,G,C,T分开考虑,统计4遍,答案相加 令F(i)F(i)表示将小串的最后一个怼到大串的第i位最多能匹配多少个 令f(i)f(i)表示大串中,第i个字符是否能匹配当前字符0/1 令g(i)g(i)表示小串中,第i个字符是否是当前字符0/1 将小串反置,然后F(i)F(i)可以表示成卷积的形式F(i)=∑i=0|T|−1f(i−j)g(j)F(i)=\sum\limit

2017-03-09 17:00:56 752

原创 [BZOJ3527][Zjoi2014]力(FFT)

题目描述传送门题解将式子化一下可以得出E(i)=∑j=0iqj(i−j)2−∑j=inqj(i−j)2E(i)=\sum\limits_{j=0}^i{q_j\over(i-j)^2}-\sum\limits_{j=i}^n{q_j\over(i-j)^2} 只考虑第一个式子,令f(n)=qn,g(n)=1n2f(n)=q_n,g(n)={1\over n^2},那么E(i)=∑j=

2017-03-09 16:53:34 637

原创 [BZOJ2194]快速傅立叶之二(FFT)

题目描述传送门题解度娘 卷积是两个变量在某范围内相乘后求和的结果。如果卷积的变量是序列x(n)和h(n),则卷积的结果y(n)=∑i=−∞+∞x(i)h(n−i)=x(n)∗h(n)y(n)=\sum\limits_{i=-\infty}^{+\infty}x(i)h(n-i)=x(n)*h(n) 卷积定理指出,函数卷积的傅里叶变换是函数傅里叶变换的乘积。即,一个域中的卷积相当于另一个域中的乘积

2017-03-09 11:34:06 645

原创 [BZOJ2179]FFT快速傅立叶(FFT)

题目描述传送门题解将乘法的每一位看成是多项式的系数 实际上就是两个多项式相乘 直接FFT 处理进位代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 200005const double pi=acos

2017-03-09 11:24:45 379

原创 [UOJ#34]多项式乘法(FFT)

题目描述传送门题解FFT模板题代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 300005const double pi=acos(-1.0);int n,m,L,R[N];struct comple

2017-03-09 11:21:58 470

原创 [Codeforces343D]Water Tree(树链剖分)

题目描述传送门题解题如其名代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 500005int n,m,dfs_clock;int tot,point[N],nxt[N*2],v[N*2];int si

2017-03-08 18:40:16 458

原创 [Codeforces716E]Digit Tree(点分治+扩欧+二分)

题目描述传送门 题意:一棵树,每条边上有一个数字(1~9),给出一个与10互质的数m,问整棵树上有多少条链满足从起点走到终点树链上形成的十进制数是m的倍数。题解本来是看dsu on the tree找到了这道题,但是发现用dsu on the tree写好麻烦啊=w= 不过用点分就没有那么恶心了 对于每一次分治到的子树,需要一些节点的信息:从当前点出发向上走到根形成的十进制数在模m意义下,记为

2017-03-08 17:10:47 657

原创 [Codeforces291E]Tree-String Problem(hash+倍增)

题目描述传送门题解可以将所有的字符串拆成一个一个的点,每一个点都只有一个字符 首先算出模式串的hash值 然后对于每一个点计算出从根到这个点形成的串的hash值 枚举每一个点,倍增求出与它的距离为模式串的长度的父亲,然后计算这一段的hash值 统计答案即可代码#include<algorithm>#include<iostream>#include<cstring>#include<c

2017-03-08 11:29:11 657

原创 [Codeforces246E]Blood Cousins Return(dsu on the tree+set)

题目描述传送门 题意:一棵树,每一个点有一个颜色(字符串),每一次询问以某一个点为根的子树中与其距离为k的点有多少种颜色。题解dsu on the tree… 关键是这道题要统计每一个深度出现的颜色的个数,于是每一个深度挂一个set stl真tm省事。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstd

2017-03-08 10:21:10 621

原创 [Codeforces375D]Tree and Queries(dsu on the tree+bit)

题目描述传送门 题意:一棵树,每个点有一个颜色,每一次询问以x为根的子树中至少出现k次的颜色有多少种题解dsu on the tree… 记每一个颜色出现了多少次,再记出现多少次的颜色有多少个 因为是至少出现k次,挂一个bit就行了 注意bit更新的时候每一次都到最大值代码#include<algorithm>#include<iostream>#include<cstring>#in

2017-03-08 09:02:42 799

原创 [Codeforces741D]Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(dsu on the tree)

题目描述传送门题解一道细节比较多的dsu on the tree 首先某一个子树中的路径可以分为经过根的和不经过根的,不经过根的可以通过儿子更新过来,所以对于每一棵子树只统计经过根的路径。 经过根的路径又可以分成两种,第一种是到根就结束的,也就是说是根到它子树里某一个点的一条链,这个可以在dfs的时候统计。 第二种是路径的两个端点分别在根的两个儿子的子树里。令s(i)表示1到i的路径的状态,状

2017-03-08 08:05:49 1016

原创 [Codeforces208E]Blood Cousins(dsu on the tree+倍增)

题目描述传送门 题意:给出一棵家谱树,定义向上走k步到达的节点为该点的k-ancestor。每次询问与v同P-ancestor的节点有多少个。题解题目可以转化为在v的P-ancestor的子树里和v同一深度的有多少个点 用dsu on the tree搞一搞。。 倍增求出v的P-ancestor,然后对于每一个询问加一个链表,一遍dfs就行了。 注意这是一个森林 时间复杂度O(nlogn)

2017-03-07 19:30:21 869

原创 [Codeforces570D]Tree Requests(dsu on the tree)

题目描述传送门 题意:一棵树,每一个点有一个字符,给出若干询问,每一次询问以某个点为根的子树中深度为x的点能否组成一个回文串。题解用dsu on the tree搞一下。。 如果可以组成一个回文串的话出现次数为奇数的字符至多有一个 记录一下深度为i的点中字符为j的个数,然后对于每一个点的询问搞一个链表查询就可以了 时间复杂度O(nlogn)O(nlogn)代码#include<algorit

2017-03-07 19:07:26 541

原创 [Codeforces600E]Lomsat gelral(dsu on the tree)

题目描述传送门 题意:一棵树,每一个点有一个颜色,统计以每一个节点为根的子树中出现次数最多的颜色的编号和。题解学习了一下dsu on the tree,安利一下Yveh的良心博客:http://blog.csdn.net/qaq__qaq/article/details/53455462 算法的大致过程: 首先将树轻重链剖分,在dfs的过程中先dfs轻儿子,再dfs重儿子。 假设某一个点的儿

2017-03-07 18:37:58 1327

原创 [BZOJ4542][Hnoi2016]大数(莫队+数学相关)

题目描述传送门题解设f(i)表示[i..n]组成的十进制数在模p意义下的值 那么f(i)-f(j)(j>i)就表示了[i..j-1]这一段区间表示的十进制数扩大10的若干幂次方之后在模p意义下的值 如果不考虑质数2和5的话,扩大10的若干幂次方是不应响结果的,因为剩余的质数都不是10的约数 那么如果要统计区间[l..r]有多少个子串满足是p的倍数的话,只需要统计f(l)..f(r+1)这些数中

2017-03-07 16:19:45 521

原创 [BZOJ4129]Haruna’s Breakfast(树上带修改莫队+分块)

题目描述传送门题解树上带修改莫队的方法是裸题对吧。。 关键是怎么查询 一种比较好的方法是将权值分块,每一个块记录出现过了几个权值,然后可以做到O(1)O(1)修改;查询的时候暴力枚举权值没有全部出现的块,然后再在块内暴力找到第一个没出现的权值,所以是O(n√)O(\sqrt n)查询 这样的话需要将所有的权值离散,并且如果两个权值不相邻的话还需要再中间插入一个权值(较小的+1),并且还需要加入

2017-03-07 11:36:28 684

原创 [BZOJ3052][wc2013]糖果公园(树上带修改莫队)

题目描述传送门题解树上带修改莫队: 1、将树分块,然后离线并将修改和询问分开,对于询问的两个点,将dfs序较小的点作为左端点。 2、将询问排序,关键字为:左端点块的编号、右端点块的编号、最近的修改的时间 3、对于两个询问,转移方式是:将两个左端点的树链状态取反,将两个右端点的树链状态取反。注意取反操作都要刨除树链的lca,在查询的时候要先加上lca、然后查询、然后再减去。 然后这题就是道裸题

2017-03-07 11:32:59 938

原创 [BZOJ2120]数颜色(带修改莫队)

题目描述传送门题解和BZOJ2453相同,在这里可以看到分块的做法 而这道题同时又是一道带修莫队裸题 带修莫队大体方法如下: 1、将修改询问离线并分开,记录每一个修改之前最近的一次询问的编号 2、分块之后将区间排序,关键字为:左端点块的编号、右端点块的编号、记录的最近一次修改的编号 3、在查询每一次询问之前,判断当前做过的修改是否恰好是这次询问需要的修改,如果不够将其修改,修改多了的话恢复

2017-03-06 22:40:12 734

原创 [BZOJ1086][SCOI2005]王室联邦(树上分块)

题目描述传送门题解http://blog.csdn.net/popoqqq/article/details/42772237代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 1005int n,b,x,y,

2017-03-06 21:12:28 723

原创 [BZOJ2548][Ctsc2002]灭鼠行动(大模拟)

题目描述传送门题解又是一道大模拟。。。 需要注意的几个地方: 1、一个时刻x+时间单位x~y操作的顺序是:时刻x老鼠繁殖、时刻x放武器、判断是否发生鼠疫、时间单位x~y老鼠移动。 2、只有某一个点上有且仅有两只老鼠并且满足性别互异、均成年、不在上一次繁殖期间或者昏迷状态下才可以繁殖。 3、某一次繁殖结束之后(等待+繁殖+休息),如果两只老鼠又进行了一次操作(走一步或者转一下方向),并且又同时

2017-03-06 20:05:51 1373

原创 CF#403(Div.2) 解题报告

A题意简述有2n双袜子,编号为1..n。 按顺序从包中拿出,如果这只袜子的另一只还没有拿出,就放在桌子上,否则将桌子上的另一只拿走。 求桌子上最多有多少只袜子。数据范围1≤n≤1051\le n\le 10^5题解模拟。。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cs

2017-03-06 11:19:08 1422 4

原创 [BZOJ4206]最大团(计算几何+dp)

题目描述传送门题解非二分图的最大团问题是npc hard(我不会告诉你我刚知道) 所以今天gang了半天是毫无意义的(逃一个非常奇妙的转化 首先圆内和圆上的点扔掉 对于每一个点做它的两条切线,每个点的两个切点在圆上会形成一段连续的弧,两个点不能同时选,当且仅当两个弧相离或包含 栗子: 这两种情况都是不行的 将圆展成一条链,跨越端点的线段就改为它的补集 这样问题就变成了在一坨线段

2017-03-05 20:39:16 1272

原创 [BZOJ4212]神牛的养成计划(trie+可持久化trie)

题目描述传送门题解这个tag好奇怪啊 首先将字符串按照字典序排序,这样有相同前缀什么的串就到一起了 然后依次将串插入一个trie,每一个点维护一下能匹配到这个点的串的左右端点 然后将每个串反过来建立可持久化trie 对于每一个询问,首先在trie上匹配一下,看匹配到的左右端点是什么。然后在可持久化trie的这段区间中查找有多少个能匹配的后缀就行了 时间是O(∑s)O(\sum s)的代码#

2017-03-05 20:23:24 1127

原创 [BZOJ3118]Orz the MST(单纯形)

题目描述传送门题解这题我的方法好蠢啊 令xix_i表示第i条边增加了几次,yiy_i表示第i条边减少了几次,那么目标函数就是最小化∑Ai∗xi+Bi∗yi\sum A_i*x_i+B_i*y_i 然后对于每一条非树边,它的两个端点对应的树链上的每一条边都应该小于这条非树边,也就是说,xi−yi+wi≤xj−yj+wjx_i-y_i+w_i\le x_j-y_j+w_j,因为wiw_i和wjw_j

2017-03-04 21:38:06 1019

原创 [BZOJ3555][Ctsc2014]企鹅QQ(hash)

题目描述传送门题解枚举每一位,把这一位去掉,hash统计有多少个一样的 因为不存在两个串相同,所以不用管其它的直接搞就行 sort要快很多,map跑好慢…代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<map>using namespace

2017-03-04 19:32:33 610

原创 [BZOJ1565][NOI2009]植物大战僵尸(tarjan+最小割)

题目描述传送门题解首先有一些保护与被保护的关系是给出的,还有就是每一排前面的点可以保护后面的点 从保护的点向被保护的点连边 可以发现,如果一个强连通分量的大小大于1,那么这个强连通分量里的所有点都不可能被打到。并且如果有一个点不可能被打到,它能到达的点也都不可能被打到 把不可能被打到的点都剔除出去,最后只可能剩下一个DAG 那么这些点是可以选择的,但是选择某一个点的前提是,所有保护它的点都被

2017-03-04 19:07:52 817

原创 [BZOJ4408][Fjoi 2016]神秘数(可持久化线段树)

题目描述传送门题解首先考虑O(mnlogn)O(mnlogn)的做法 将询问的一段区间由小到大排序,假设现在已经用前k个数组合出了[1..x]中的所有整数,那么现在考虑加入第k+1个数 若k<=x+1,那么我们一定可以组合出[1..x+k]的所有整数,不会出现断层 若k>x+1,那么x+1这个整数是无论如何都无法组合的,就可以确定答案了那么如果不排序有没有办法做呢? 同样假设当前已经组合好了

2017-03-04 16:39:10 1408

原创 [BZOJ3550][ONTAK2010]Vacation(单纯形)

题目描述传送门题解单纯形裸题 需要注意的一点是要限制每一个数的选择次数<=1代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 1005const double eps=1e-9;const double

2017-03-03 21:49:48 827

原创 [BZOJ3265]志愿者招募加强版(单纯形)

题目描述传送门题解和志愿者招募一样啊 单纯形裸题代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 1005#define M 10005const double eps=1e-9;const doub

2017-03-03 21:00:35 827

原创 [BZOJ2466][中山市选2009]树(高斯消元+dfs)

题目描述传送门题解开关灯问题。。。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<bitset>#include<cmath>using namespace std;#define N 105int n,x,y,now,Min;int tot,point[N],nxt[N

2017-03-03 17:39:16 489

原创 [Codeforces710D]Two Arithmetic Progressions(扩展中国剩余定理)

题目描述传送门题解x=a1k+b1,y=a2l+b2x=a_1k+b_1,y=a_2l+b_2 也就是说 x≡b1(moda1)x\equiv b_1\pmod {a_1} x≡b2(moda2)x\equiv b_2\pmod {a_2} 将两个方程用扩展中国剩余定理合并一下求出x 然后计算一下在[L,R]内的合法解个数就行了 还有一个需要注意的是k,l≥0k,l\ge 0 也就是说

2017-03-03 16:01:01 832

原创 [BZOJ2707][SDOI2012]走迷宫(tarjan+概率期望+高斯消元)

题目描述传送门题解刚开始题意理解错了…或者说我对期望的理解本来就不是很好… 首先考虑图是一个DAG的情况 如果除了终点之外还有出度为0的点,那么答案为INF(因为有概率不走到终点) 然后令f(i)f(i)表示从点i走到终点的期望步数,那么f(i)=∑(i,v)∈E(f(v)+1)∗out(i)f(i)=\sum\limits_{(i,v)\in E}(f(v)+1)*out(i),其中out(

2017-03-03 14:17:25 1712 2

原创 [BZOJ4278][ONTAK2015]Tasowanie(后缀数组+贪心)

题目描述传送门题解和队列变换那道题差不多 就是将两个串连起来求一个sa,然后归并的时候如果两个数相等的话就拿后缀字典序比较小的那一个 中间要加一个比较大的字符,因为如果两个串比较代码总结后缀数组一定要写p>=n,不要写p>n 从10s+蹦到2s+

2017-03-03 07:17:56 601

原创 [BZOJ4327]JSOI2012 玄武密码(AC自动机)

题目描述传送门题解将小串离线然后建立AC自动机 大串在自动机上直接匹配,能匹配的点标1 然后对于每一个点,如果它能匹配,那么它fail指向的点也能匹配 传递一下标记 然后对于每一个小串再查询一下前缀最多到哪里都匹配了代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmat

2017-03-02 23:18:20 1097

原创 [BZOJ1408][Noi2002]Robot(数论+dp)

题目描述传送门题解独立数就是φ\varphi,然后老师就是约数 所以实际上就是求 所有由偶数个奇素数组成的数的φ\varphi的和 所有由奇数个奇素数组成的数的φ\varphi的和 所有约数的φ\varphi的和减去前面两个答案所有约数的φ\varphi的和用一个公式∑d|nφ(d)=n\sum\limits_{d|n}\varphi(d)=n,不算1就是n-1 因为所有的数都是互质的,所

2017-03-02 18:37:14 637

原创 [BZOJ2299][HAOI2011]向量(数论)

题目描述传送门题解由裴蜀定理,若(a,b)=d,那么任何ax+by都是d的倍数 也就是说如果(a,b)|n的话,ax+by=n一定存在一组合法解 这题的瓶颈在于a,b必须配对 设用了k1个向量(a,b),用了k2个向量(b,a),这里的k1和k2是代数和,也就是说,如果用了2个(a,b)和1个(-a,-b),相当于用了1个(a,b) k1(a,b)+k2(b,a)=(x,y)->k1a+k2

2017-03-02 16:03:45 796

原创 [BZOJ2956]模积和(数论)

题目描述传送门题解这题就是正儿八经的化(画)式(柿)子 首先计算i=ji=j和i≠ji\ne j的总和 ans1=∑i=1n∑j=1m(n mod i)∗(m mod j)ans1=\sum\limits_{i=1}^n\sum\limits_{j=1}^m(n\space mod\space i)*(m\space mod\space j) =∑i=1n∑j=1m(n−⌊ni⌋i)∗(m−⌊

2017-03-02 14:51:06 731

原创 [BZOJ4173]数学(数论)

题目描述传送门题解实际上答案就是φ(n)∗φ(m)∗n∗m\varphi(n)*\varphi(m)*n*m 因为规律真心好找… 不过据说∑k∈S(n,m)φ(k)=n∗m\sum_{k\in S(n,m)}\varphi(k)=n*m是可以证明的,但是我目前还不会。。可能需要想很久(也不一定能想出来),以后再补吧。代码#include<algorithm>#include<iostream>

2017-03-02 10:54:44 988 2

空空如也

空空如也

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

TA关注的人

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