自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 hnjx2015 hashit

题意: 一个串,资瓷末端插入,删除一个字符,求每次操作后本质不同的子串个数; 题解: “可持久化”后缀自动机裸题,类似按zhi并查集的“可持久化”,复杂度O(N)O(N) 当时考场上的神犇大多是这么A的; 作死写了一发替罪羊树搞的后缀平衡树,代码感觉不长,实际比较长。。。 hash比较版本O(NLog2N)O(NLog^2N)#include<bits/stdc++.h>#define

2017-01-25 19:46:08 468

原创 uoj221. 【NOI2016】循环之美

考完后非常令人伤心的题。。。 打表&&找规律&&数学推导…….. 我们得到了目标式子:Σ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

2017-01-21 21:13:17 670

原创 矩阵树定理

又看了一遍。。。。。 在周冬《生成树的计数及其应用》中有证明; 核心是利用Binet-Cauchy公式 但: “如果图是一颗树,那么C的任一个n-1阶主子式的行列式均为1” 的结论 C好像是度数矩阵+邻接矩阵也没问题?试着证明下又对了对拍也没问题? 这样就能推出错误结论啦 有点方。。。又略略看了其它证明平复一下心情 求路过神犇指正QAQ#include<bits/stdc++.h>

2017-01-21 13:51:42 403

原创 2554: Color

#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){}}

2017-01-11 12:21:56 709

原创 4521: [Cqoi2016]手机号码

比较基本的数位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

2017-01-06 09:43:55 379

原创 4553: [Tjoi2016&Heoi2016]序列

挺一般的思路,转变为三维偏序,然后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

2017-01-02 22:00:13 345

原创 3925: [Zjoi2015]地震后的幻想乡

这道题运用了很多数学知识(唉,真羡慕你们高数好的…….) 首先我们扔掉提示。。。。。 尝试枚举最小生成树的最大边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 即答案=答案

2016-12-23 01:04:32 515

原创 4540: [Hnoi2016]序列

好像就我的做法麻烦,但是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

2016-12-22 00:41:32 371

原创 bzoj2277: [Poi2011]Strongbox

可证满足条件的一定是一个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/

2016-12-15 13:34:35 585

原创 bzoj2217:[Poi2011]Lollipop

容易发现题目给的条件对数值的维护增长很慢,故可使用调整法,具体细节见代码#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();

2016-12-12 00:18:10 483

原创 BZOJ 4568: [Scoi2016]幸运数字

暴力合并线性基可以过?

2016-12-08 23:18:32 309

原创 3142: [Hnoi2013]数列

设差分数组a 有:ans=Σa(n−ΣK−1i=1a[i])ans=\Sigma_a(n-\Sigma_{i=1}^{K-1}a[i]) 可拆分a[i]的贡献解决问题 教训: 一开始的思路就是尝试移动开头,但没有想到差分求和,而是怎样求以数x结尾的方案数 然后果断转化模型,通过差分容斥搞到了一个O(K)的麻烦组合式 再尝试生成函数,但回推的时候有一个卷积消不掉(能力有限……),强

2016-12-08 23:05:55 343

原创 bzoj4572: [Scoi2016]围棋

这道题我只会子集和变换优化的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

2016-12-07 15:23:25 677

原创 bzoj1115

差分后转变为阶梯博弈#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

2016-12-04 17:08:31 400

原创 bzoj1921 CTSC2010 jewelry

大概是四节课写代码,三节课debug,七个长相差不多的dfs穿插其中…… 好了不吐槽了; 题意: 给定一棵点上有字母的树,和一个母串 求树上点两两之间 N2N^2 条路径在母串中匹配次数和这里采用的基本是《CTSC2010珠宝商新解》–许昊然的做法 首先考虑两种不同的暴力: 1.枚举端点dfs,SAM上跑转移O(N2)O(N^2) 2.这个暴力比较特殊; 考虑一个作为

2016-12-04 00:50:22 1004

原创 51nod算法马拉松20

先写一下做出的题吧(感觉自己好弱。。。。。) 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

2016-11-28 00:06:53 366

原创 bzoj1893&2371

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

2016-11-27 19:10:59 287

原创 hdu5760

区间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

2016-11-17 09:08:13 256

原创 sd省队集训二轮tree

感觉这题应该跟hdu5290很像,结果它们果然系出同源; 这个题应该处于更根源的位置; 根据算法3的思想,令dp[i][j][k]表示以i为根的子树且已经使用了j个黑点,最深未被覆盖的长度或者沿着根最多能覆盖多少长度。 但是这样状态会很多无法存下。 考虑将k表示成还拥有一个黑点k,使得点i为根的子树全被保护。 令T[i]表示[i不是黑点] 枚举k,当点u枚举到一个儿子v

2016-11-14 18:04:30 391 1

原创 hdu5290

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

2016-11-13 11:33:16 301

原创 bzoj4603 sdoi2016 r2 d2 dice

感觉题目考察的有些偏; 满中国oj都见不到类似的(晚半年的吐槽。。。。) 其实掌握了相关知识还是很裸的;#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 double db;const int N=73;const db

2016-11-06 23:39:00 377

原创 poj3468 zkw线段树

这里使用了zkw线段树; 使标记永久化,并维护sum数组:仅考虑子树的区间和; 这样一个节点对答案的贡献就是子树和加上上方祖先的标记和; 代码中L,R数组均可省去(但由于笔者太懒。。。。。。) 这样就给出了一个与论文中不太一样的sb方法,但各种复杂度还是一样的;#include<cstdio>#define rep(i,k,n) for(int i=k;i<=n;i++)#define

2016-11-06 19:06:53 428

原创 3674: 可持久化并查集加强版

主席数维护可持久化数组实现可持久化并查集思考时主要考虑并查集的变化与特性,没有考虑其易于处理的本质体现以及手中的工具………

2016-10-22 21:18:48 261

原创 2227: [Zjoi2011]看电影(movie)

经典思路:线转化为圈,利用对称性 假设有k+1个椅子围成一圈,每张票上写着1~k+1(而不是1~k),因为概率均等,我们统计有多少种方案导致椅子k+1上坐着人 一共有(k+1)n种可能的情况。为了方便叙述,我们假定每种情况模拟一遍,每次在没人坐的椅子上放一枚硬币(每次恰好有k+1-n把椅子没人坐),则所有情况都模拟完之后每把椅子上都有(k+1-n)(k+1)n-1枚硬币,也就是说,有(k

2016-10-22 21:10:22 378

原创 3462: DZY Loves Math II

一开始看到这题忽视了S以及问题的特殊性;从而想到了奇怪的方向 注意到构成元素均为S的约数,所以划分n的方案可以分成若干S的和与零散部分; 其中零散部分必不能再拆出S,否则会重复计算; 如此,使用组合数与多重背包即可;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(i

2016-10-22 20:46:15 329

原创 2655: calc

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;const int N=1007;int mod,n,A;void upd(int& x,i

2016-10-21 21:50:09 276

原创 1426: 收集邮票

期望乘法独立….#include<bits/stdc++.h>#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;typedef double db;db g,f;int n;int main(){ scanf("%d",&n);g=f=0.0; rep2(i,n-1,0){ g+=n*1

2016-10-21 21:47:58 230

原创 3072: [Pa2012]Two Cakes

有dp[i][j]=min(d[i-1][j],d[i][j-1])+1 –> a[i]==b[j] dp[i][j]=d[i-t+1][j-t+1]+t —> t为i,j向前最长的不同序列; 但真正需要记录的状态为O(n);#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)using namespace std;

2016-10-21 21:16:01 351

原创 4513: [Sdoi2016]储能表

省选被这题虐。。。前段时间推了一晚上终于推出dp式子; 正解是去发现神奇性质,然而数位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;const int N=105;typed

2016-10-21 20:46:22 423

原创 4361: isn

#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;const int N=2017;const int mod=1e9+7;int a[N],n,b[N],c[N],top=0,bin[N],

2016-10-21 20:38:50 271

原创 4377: [POI2015]Kurs szybkiego czytania

取补比取交要简单….思考问题的另一面;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)using namespace std;const int N=1e6+7;char s[N];int n,a,b,p,m,len,tot=0;void upd(int& x,int y){x+=y;if(x>=n)x-=n;

2016-10-21 20:33:24 317

原创 3415: Poi2013 Price List

出题人脑洞好大… 题解参考#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--)#define E1(x,i) for(int i=e1.head[x];i;i=e1.edge[i].next)#define E2(x,i) for(in

2016-10-21 20:31:12 359

原创 bzoj3174 [Tjoi2013]拯救小矮人

首先,我们要证明一定存在一个最优逃生序列ai满足: Aa*i + *Bai <= Aai+1 + Bai+1; 可采用反证法得知对于所有逃生序列ai,交换满足存在: Aa*i + *Bai > Aai+1 + Bai+1 的数对一定不会更差,从而得证; 这样就为我们提供了一个序,然后就可以dp啦#include<bits/stdc++.h>#define rep(i,k

2016-10-01 16:32:48 256

原创 文章标题

又一波文章即将来到。。。。。。。。

2016-07-08 13:06:30 195

原创 3836: [Poi2014]Tourism

树形dp,多开一维记录祖先状态; 转移时其实是使用的泛化背包的转移方式,使程序简洁高效;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=(n);i++)using namespace std;const int N=20005;const int M=100005;const int inf=0x3f3f3f3f;str

2016-06-21 20:33:24 485

原创 1972: [Sdoi2010]猪国杀

来道大模拟 oi生涯中写过最长代码#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<vector>#include<algorithm>#include<deque>#include<queue>#define rep(i,k,n) for(int i=k;i<=(n);i++)#

2016-06-21 19:29:05 953

原创 3717: [PA2014]Pakowanie

dp没想出来TAT#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;const int N=16777777;int f[N],g[N];int c[105],a[N],n,m;boo

2016-06-21 19:22:57 693

原创 bzoj 1937: [Shoi2004]Mst 最小生成树

将原问题对偶成为费用流模型; 写的原始对偶的费用流,然后发现每次增广容量最多为1…mdzz#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--)#define mp make_pair using namespace std;c

2016-06-21 19:18:12 611

原创 【NOI2015】品酒大会

后缀自动机+线段树乱搞竟然1A,神奇…#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--)#define ls x<<1#define rs x<<1|1using namespace std;typedef long lon

2016-06-21 19:11:54 345

原创 【NOI2015】小园丁与老司机

dp+有源汇上下界的最小流; dp:按pair#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;const int N=50305;const int M=600005;const

2016-06-21 19:09:54 742

空空如也

空空如也

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

TA关注的人

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