<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[limboman的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/limboman</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; limboman]]></copyright><item><title><![CDATA[hnjx2015 hashit]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/54730778</link><guid>https://blog.youkuaiyun.com/limboman/article/details/54730778</guid><author>limboman</author><pubDate>Wed, 25 Jan 2017 19:46:08 +0800</pubDate><description><![CDATA[题意： 
一个串，资瓷末端插入，删除一个字符，求每次操作后本质不同的子串个数； 
题解： 
“可持久化”后缀自动机裸题，类似按zhi并查集的“可持久化”，复杂度O(N)O(N) 
当时考场上的神犇大多是这么A的； 
作死写了一发替罪羊树搞的后缀平衡树，代码感觉不长，实际比较长。。。 
hash比较版本O(NLog2N)O(NLog^2N)#include<bits/stdc++.h>
#define]]></description><category></category></item><item><title><![CDATA[uoj221. 【NOI2016】循环之美]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/54647457</link><guid>https://blog.youkuaiyun.com/limboman/article/details/54647457</guid><author>limboman</author><pubDate>Sat, 21 Jan 2017 21:13:17 +0800</pubDate><description><![CDATA[考完后非常令人伤心的题。。。 
打表&&找规律&&数学推导…….. 
我们得到了目标式子：Σni=1Σmj=1[(i,j)=1][(j,k)=1]\Sigma_{i=1}^n\Sigma_{j=1}^m[(i,j)=1][(j,k)=1] 
这里的（i，j）表示gcd（i，j） 
然后：方向一：Σni=1Σmj=1[(i,j)=1][(j,k)=1]\Sigma_{i=1}^n\Sigma_{j=1]]></description><category></category></item><item><title><![CDATA[矩阵树定理]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/54645652</link><guid>https://blog.youkuaiyun.com/limboman/article/details/54645652</guid><author>limboman</author><pubDate>Sat, 21 Jan 2017 13:51:42 +0800</pubDate><description><![CDATA[又看了一遍。。。。。 
在周冬《生成树的计数及其应用》中有证明； 
核心是利用Binet-Cauchy公式 
但： 
“如果图是一颗树，那么C的任一个n-1阶主子式的行列式均为1” 
的结论 
C好像是度数矩阵+邻接矩阵也没问题？试着证明下又对了对拍也没问题？ 
这样就能推出错误结论啦 
有点方。。。又略略看了其它证明平复一下心情 
求路过神犇指正QAQ#include<bits/stdc++.h>]]></description><category></category></item><item><title><![CDATA[2554: Color]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/54342319</link><guid>https://blog.youkuaiyun.com/limboman/article/details/54342319</guid><author>limboman</author><pubDate>Wed, 11 Jan 2017 12:21:56 +0800</pubDate><description><![CDATA[#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=n;i++)
using namespace std;
typedef double db;
typedef long long ll;
const int N=1e4+7;
struct f{
    db a,b;f(db a=0.0,db b=0.0):a(a),b(b){}
}]]></description><category></category></item><item><title><![CDATA[4521: [Cqoi2016]手机号码]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/54134041</link><guid>https://blog.youkuaiyun.com/limboman/article/details/54134041</guid><author>limboman</author><pubDate>Fri, 06 Jan 2017 09:43:55 +0800</pubDate><description><![CDATA[比较基本的数位DP，限制都较为简单；#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=n;i++)
#define rep2(i,k,n) for(int i=k;i>=n;i--)
using namespace std;
typedef long long ll;
const int N=13;
void upd(ll& x,ll]]></description><category></category></item><item><title><![CDATA[4553: [Tjoi2016&Heoi2016]序列]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53982725</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53982725</guid><author>limboman</author><pubDate>Mon, 02 Jan 2017 22:00:13 +0800</pubDate><description><![CDATA[挺一般的思路，转变为三维偏序，然后cdq分治维护dp值就可以了 
想了10min左右，写了20min左右，调了60min左右。。。 
都是sb错误（只有1.5k啊，非得生成数据对拍才能看出吗？） 
谨以此文，纪念debug能力越来越弱的自己#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=n;i++)
#define rep2(i,k]]></description><category></category></item><item><title><![CDATA[3925: [Zjoi2015]地震后的幻想乡]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53827645</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53827645</guid><author>limboman</author><pubDate>Fri, 23 Dec 2016 01:04:32 +0800</pubDate><description><![CDATA[这道题运用了很多数学知识（唉，真羡慕你们高数好的…….） 
首先我们扔掉提示。。。。。 
尝试枚举最小生成树的最大边x，令g(x)g(x)表示答案<=x的概率 
发现答案可以表示成∫10xg′(x)dx\int_0^1xg^{'}(x)dx 
根据分部积分法，原式=1−∫10g(x)dx=∫10(1−g(x))dx1-\int_0^1g(x)dx=\int_0^1(1-g(x))dx 
即答案=答案]]></description><category></category></item><item><title><![CDATA[4540: [Hnoi2016]序列]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53797501</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53797501</guid><author>limboman</author><pubDate>Thu, 22 Dec 2016 00:41:32 +0800</pubDate><description><![CDATA[好像就我的做法麻烦，但是O(nlogn)O(nlogn)的树状数组加仅用于求最小值的酱油线段树； 
首先，我们可以注意到对于每个询问均可以被其中的最小值切裂成两部分 
以此为划分依据，答案可以分成4部分； 
（规定l[i]l[i]为i处向左第一个比a[i]小的位置+1，r[i]r[i]为i处向右第一个比a[i]小的位置-1） 
设询问ql,qr讨论ql<=i<=qr的所有数产生的贡献; 
1.所有l]]></description><category></category></item><item><title><![CDATA[bzoj2277: [Poi2011]Strongbox]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53669404</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53669404</guid><author>limboman</author><pubDate>Thu, 15 Dec 2016 13:34:35 +0800</pubDate><description><![CDATA[可证满足条件的一定是一个mod gcd（a[k],n)的循环群； 
考虑mod n意义下的加法群以a[k]生成子群下的偏集划分； 
可将问题放在mod gcd（a[k],n)意义下研究（并没有什么卵用…） 
然后考虑所构成子群的非单位元最小值便可证；然后就是： 
要找到一个数g，使得g|（n，a[k]），且对于任意1<=i<=k-1，g不是a[i]的约数 
枚举约数乱搞…#include<bits/]]></description><category></category></item><item><title><![CDATA[bzoj2217:[Poi2011]Lollipop]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53577037</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53577037</guid><author>limboman</author><pubDate>Mon, 12 Dec 2016 00:18:10 +0800</pubDate><description><![CDATA[容易发现题目给的条件对数值的维护增长很慢，故可使用调整法，具体细节见代码#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=n;i++)
#define rep2(i,k,n) for(int i=k;i>=n;i--)
using namespace std;
void sc(int& x){x=0;char c=getchar();]]></description><category></category></item><item><title><![CDATA[BZOJ 4568: [Scoi2016]幸运数字]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53526723</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53526723</guid><author>limboman</author><pubDate>Thu, 08 Dec 2016 23:18:32 +0800</pubDate><description><![CDATA[暴力合并线性基可以过？]]></description><category></category></item><item><title><![CDATA[3142: [Hnoi2013]数列]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53526640</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53526640</guid><author>limboman</author><pubDate>Thu, 08 Dec 2016 23:05:55 +0800</pubDate><description><![CDATA[设差分数组a 
有:ans=Σa(n−ΣK−1i=1a[i])ans=\Sigma_a(n-\Sigma_{i=1}^{K-1}a[i]) 
可拆分a[i]的贡献解决问题 
教训： 
    一开始的思路就是尝试移动开头，但没有想到差分求和，而是怎样求以数x结尾的方案数 
然后果断转化模型，通过差分容斥搞到了一个O（K）的麻烦组合式 
再尝试生成函数，但回推的时候有一个卷积消不掉（能力有限……），强]]></description><category></category></item><item><title><![CDATA[bzoj4572: [Scoi2016]围棋]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53506698</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53506698</guid><author>limboman</author><pubDate>Wed, 07 Dec 2016 15:23:25 +0800</pubDate><description><![CDATA[这道题我只会子集和变换优化的sb暴力（什么轮廓线插头都忘光了…） 
考虑到合法状态的稀疏性（其实是你自己不会证明吧……），就可以放心暴力啦；#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=n;i++)
using namespace std;
const int mod=1e9+7;
const int N=5e4+7;
const]]></description><category></category></item><item><title><![CDATA[bzoj1115]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53455168</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53455168</guid><author>limboman</author><pubDate>Sun, 04 Dec 2016 17:08:31 +0800</pubDate><description><![CDATA[差分后转变为阶梯博弈#include<cstdio>
int u,n,op,l,x,ok;
int main(){scanf("%d",&u);
while(u--){
    l=ok=0;scanf("%d",&n);op^=(n&1);
    while(n--){scanf("%d",&x);if(op)ok^=x-l;l=x,op^=1;}
    if(ok)puts("TAK");e]]></description><category></category></item><item><title><![CDATA[bzoj1921 CTSC2010 jewelry]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53449800</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53449800</guid><author>limboman</author><pubDate>Sun, 04 Dec 2016 00:50:22 +0800</pubDate><description><![CDATA[大概是四节课写代码，三节课debug，七个长相差不多的dfs穿插其中…… 
好了不吐槽了； 
题意： 
    给定一棵点上有字母的树，和一个母串 
    求树上点两两之间 N2N^2 条路径在母串中匹配次数和这里采用的基本是《CTSC2010珠宝商新解》–许昊然的做法 
首先考虑两种不同的暴力： 
1.枚举端点dfs，SAM上跑转移O(N2)O(N^2) 
2.这个暴力比较特殊； 
考虑一个作为]]></description><category></category></item><item><title><![CDATA[51nod算法马拉松20]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53371144</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53371144</guid><author>limboman</author><pubDate>Mon, 28 Nov 2016 00:06:53 +0800</pubDate><description><![CDATA[先写一下做出的题吧（感觉自己好弱。。。。。） 
A： 
拆分贡献，组合数搞一搞；#include<bits/stdc++.h>
#define rep(i,k,n) for(int i=k;i<=n;i++)
#define rep2(i,k,n) for(int i=k;i>=n;i--)
using namespace std;
typedef long long ll;
const int N]]></description><category></category></item><item><title><![CDATA[bzoj1893&2371]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53366049</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53366049</guid><author>limboman</author><pubDate>Sun, 27 Nov 2016 19:10:59 +0800</pubDate><description><![CDATA[2004年的论文《优化，再优化》 
中所讨论的题的加强版（其实并没有加强多少……）； 
论文最后给出了n−√\sqrt{n}的复杂度； 
其实可以用生成函数给出一种logn\log{n}的做法，而且更加清晰； 
首先有递推式: 
g(i,j)=g(i−1,j)+g(i−1,j−1)+1g(i,j)=g(i-1,j)+g(i-1,j-1)+1 
g(1,j)=1g(1,j)=1 
1<i,j1<i,j]]></description><category></category></item><item><title><![CDATA[hdu5760]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53195458</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53195458</guid><author>limboman</author><pubDate>Thu, 17 Nov 2016 09:08:13 +0800</pubDate><description><![CDATA[区间Dp，经典问题最长上升公共子序列的变式； 
计数需要去重，思想在于对于本质相同的序列均将其表示到最大的哪个； 
然后dp时依据包含关系就可以去重啦；#include<cstdio>
#include<algorithm>
#include<cstring>
#define rep(i,k,n) for(int i=k;i<=n;i++)
#define rep2(i,k,n) for(int i]]></description><category></category></item><item><title><![CDATA[sd省队集训二轮tree]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53161856</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53161856</guid><author>limboman</author><pubDate>Mon, 14 Nov 2016 18:04:30 +0800</pubDate><description><![CDATA[感觉这题应该跟hdu5290很像，结果它们果然系出同源； 
这个题应该处于更根源的位置；
  根据算法3的思想，令dp[i][j][k]表示以i为根的子树且已经使用了j个黑点，最深未被覆盖的长度或者沿着根最多能覆盖多少长度。 
  但是这样状态会很多无法存下。 
  考虑将k表示成还拥有一个黑点k，使得点i为根的子树全被保护。 
  令T[i]表示[i不是黑点] 
  枚举k，当点u枚举到一个儿子v]]></description><category></category></item><item><title><![CDATA[hdu5290]]></title><link>https://blog.youkuaiyun.com/limboman/article/details/53148078</link><guid>https://blog.youkuaiyun.com/limboman/article/details/53148078</guid><author>limboman</author><pubDate>Sun, 13 Nov 2016 11:33:16 +0800</pubDate><description><![CDATA[tree dp; 
考虑祖先对孩子的影响： 
有g（i，j）表示 i 这个节点获得先祖的 j 深度的赏赐覆盖全部子树的最小代价 
考虑孩子对祖先兄弟等的影响： 
有f（i，j）表示 i 这个节点覆盖了全部子树且向外延伸j的最小代价 
转移显然；#include<cstdio>
#include<algorithm>
#include<cstring>
#define rep(i,k,n) for(i]]></description><category></category></item></channel></rss>