自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ws_fqk

AFO

  • 博客(34)
  • 收藏
  • 关注

原创 3241: [Noi2013]书法家 DP

《根据数据范围猜做法系列》 首先感受一下题意,像一个DP。。。 然后观察一下数据范围,感觉应该是个三次方的DP。。 然后发现nn比mm小不少,应该是O(n2m)O(n^2m)的。。。 然后观察一下图形,发现了非常奇妙的性质。。 可以分成这11部分,然后用fif_i表示第ii块,枚举列进行转移。 大概有以下转移: empty→1,1→1,1→2,2→2,2→3,3→3,3→4,4→4

2016-04-29 21:16:30 1170 1

原创 4025: 二分图 分治+并查集

分治大法吼啊.. 好像动态图可以用LCT搞搞..不过没研究过 以后再说 分治的方法可以看popoqqq..感觉挺神的顺便了解了一下命名空间..#include<iostream>#include<cstdio>#include<vector>using namespace std;const int N=100005;int n,m,T,top;int stack[N<<2];str

2016-04-28 18:51:52 584

原创 4184: shallot 线段树+按时间分治+线性基

Oxer大爷安利的题 qwq。 了解了一下按时间分治。 由于每个数的出现区间一定是连续的一段,那么可以在线段树上对应节点插入这个数,也就是每个节点套一个vector。然后dfs一下把根到叶子路径上所有经过的点都插入线性基里,就可以求答案了。#include<iostream>#include<cstdio>#include<set>#include<vector>using namesp

2016-04-27 20:32:40 867

原创 3218: a + b Problem 最小割+主席树优化建图

妈的这题调了我一下午+半晚上= = 首先暴力最小割建图显然。 建边(S,i,bi),(i,T,wi)(S,i,b_i),(i,T,w_i)然后对于每个点ii新建一个点i′i',建边(i,i′,pi)(i,i',p_i),对于1≤j<i1\leq j<i且满足条件的jj,我们连边(i′,j,+∞)(i',j,+∞) 然后边数O(n2)O(n^2),MLE。 我居然以为5000*5000=250

2016-04-26 20:08:53 641

原创 2878: [Noi2012]迷失游乐园 基环树+DP+概率与期望

不妨用downidown_i表示从点ii往下走的期望步数,upiup_i表示从点ii往上走的期望步数。 用sonison_i表示点ii的儿子个数,faifa_i表示点ii的父亲个数(基环树上的点有两个父亲) 那么答案显然等于ans=∑ni=1downi×soni+upi×faisoni+fainans=\frac{\sum_{i=1}^n\frac{down_i\times son_i+up_i

2016-04-26 08:10:32 546 1

原创 2651: 城市改建 树形DP

我太sb了。。一看输出方案就瞎jb记录了一坨信息。。最后发现根本没有用。。 结果写了6.7K。。。成功成为了BZOJ写的最长跑的最慢的选手2333。。题目即在一棵树上删一边加一边,使得新树的直径最小。 那么我们就要维护直径相关的信息。。于是大力DP。。 首先自底向上DP,设fif_i表示以节点ii为根的子树的直径,gig_i表示以节点ii为根的子树中离ii最远的点的距离。 假设j,kj,k为

2016-04-25 10:53:13 686 1

原创 A1330. 世博会(刘洪轩) 主席树

假设最后答案为x0,y0x_0,y_0。 然后ans=∑ni=1max{∣xi−x0∣+∣yi−y0∣}ans=\sum_{i=1}^n max\{ \mid x_i-x_0\mid + \mid y_i-y_0\mid\} 然后我们令Xi=xi+yi2,Yi=xi−yi2X_i=\frac{x_i+y_i}{2},Y_i=\frac{x_i-y_i}{2},那么答案可以转化为ans=∑ni=1

2016-04-24 16:31:55 700

原创 A1251. 设计铁路(钱桥) DP+斜率优化

明明是一道裸题,我却做了这么久。感觉自己斜率优化真是弱啊,省选就没做出来,现在做还是这么费力。 我们用di,aid_i,a_i分别表示第ii个车站到终点的距离和人数。 首先按照did_i降序排序,然后我们用fif_i表示在第i个村庄出修建一个车站,且1 i1~i的所有人都开车到车站,此时的总花费。 然后我们维护两个前缀和si,pis_i,p_i。 si=∑j=i+1ndj∗ajs_i=\su

2016-04-23 19:30:47 614

原创 4542: [Hnoi2016]大数 莫队算法

555我好弱啊 都说今年的HNOI是无脑数据结构赛,都很好想只是码代码的问题,然而我还是不会做这道题。 要退役了啊啊啊。首先我们令sis_i表示以ii为开头的后缀形成的数字。 对于p≠2p\neq 2且p≠5p\neq5的时候,我们可以发现,若存在l,rl,r,满足sl≡sr+1(modp)s_l\equiv s_{r+1}\pmod{p},则区间[l,r][l,r]组成的数字一定是pp的倍数

2016-04-23 08:07:14 473

原创 2959: 长跑 LCT+dfs

不错的一道题目,可惜tsinsen被卡常了,在BZOJ A掉了。 由于我们可以多次经过一个点,那么如果形成了一个简单环,那么环内的每个点都可以被经过,所以可以把这样的环缩成一个点,权值就是原来所有点的权值之和。 这样每次连边的时候如果发现有环就缩点,用并查集维护。 然后就是裸的LCT。#include<iostream>#include<cstdio>using namespace std

2016-04-20 21:15:53 541

原创 [弱校胡策Round2]

出题人:LOI_DQS。本来觉得可以AK的结果各种sb错误硬是成了60分 T_TT1题目大意:给定一棵树,每次选定一条链和一个点,选择链上一个点使该点到给定点路径上的边权的最大值最小。 做法:出题人说是NOIP模拟赛的题,然而我比较sb,写了LCT,大概就是每次把给定点变成根,然后求出另外两个点的LCA。#include<iostream>#include<cstdio>using names

2016-04-19 15:36:21 504

原创 A1310. 矩形计算(钟沛林) 二维莫队

-歪,110,我要报警。这转移真tm难写#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int N=205;const int M=100005;const int NM=40005;int n,m,Q,ans,cnt,tot;int b[N][

2016-04-18 20:43:23 652

原创 A1229. 跳跳棋(何朴藩) 思路题 LCA

这题太神了,还是Orz黄学长吧。要善于将复杂的问题抽象成合适的模型。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int inf=1000000007;int a[5],b[5];int deep;struct node { int a[5]; int& ope

2016-04-18 15:20:44 710

原创 A1258. 稳定婚姻(魏铭) tarjan

如果把婚♂外♂情看做有向边,可以发现Safe就是婚姻关系出现了环,那么tarjan一下看看所属强连通分量大小是否为1就好了。#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N=32005;int head[N],next[N],list[N],dfn[N],low[N],q[N]

2016-04-18 11:03:14 610

原创 A1257. 男生女生(陶文博) 最大流+DP+容斥原理

好题 首先要求的是一个二分图最大团,然后可以转化为补图的最大独立集,又因为最大独立集=n-最小点覆盖,我们可以转化为求补图的最小点覆盖也就是最小割。那么要使得男生尽量多,也就是补图中男生尽量少,可以将求最小点覆盖转化为求最小边权覆盖,即从S−>S->男生连边流量为100100,女生−>T->T连边流量位9999,这样跑出来会使得男生尽量少,且此时的最小边权覆盖的点数就等于最小点覆盖。 然后假设我

2016-04-18 10:02:13 1197 1

原创 4499: 线性函数 线段树

维护处每个区间内的数的乘积,可以发现将两个区间合并的时候为左边的和乘右边的乘积加右边的和,线段树维护。#include<iostream>#include<cstdio>using namespace std;const int mod=1e9+7;const int N=200005;int n,m,K[N],b[N];struct node{ int l,r; lon

2016-04-18 07:19:13 546 2

原创 A1517. 动态树 树链剖分+线段树

打个标记就能求出树链的并了。。#include<iostream>#include<cstdio>using namespace std;const int N=200005;const int base=2147483647;int head[N],next[N<<1],list[N<<1],fa[N],deep[N],belong[N],size[N],in[N],out[N];int

2016-04-17 16:43:38 357

原创 4518: [Sdoi2016]征途 DP+斜率优化

fi,j=fk,j−1+(sumi−sumk)2f_{i,j}=f_{k,j-1}+(sum_i-sum_k)^2 设w<qw<q,且qq比ww优。 则有(fw,j−1+sum2w)−(fq,j−1+sum2q)sumw−sumq<2∗sumi\frac{(f_{w,j-1}+sum_w^2)-(f_{q,j-1}+sum_q^2)}{sum_w-sum_q}<2*sum_i 然后斜率优化#i

2016-04-15 20:10:12 486

原创 4456: [Zjoi2016]旅行者 分治+最短路

UOJ跑不过。。BZOJ勉强过啦。 首先离线,然后考虑像K-D tree一样进行分治,比如当前的矩形区域为(x1,y1)..(x2,y2),那么考虑点在区域内的询问,我们将矩形划分为两部分(划分较长的一边),然后考虑两种情况: 如果询问的两点在分界线的两边,那么最短路一定跨过分界线。 否则也有可能跨过分界线。 所以我们求出分界线上的点到区域内每个点的最短路,更新答案。然后再递归求第二种情况。

2016-04-15 17:06:28 1358

原创 [World Final2015试题选做]

World Final的题做的人太少了网上也找不到题解,蒟蒻只好挑几道水题做做啦。A.Amalgamated Artichokessb题,记录一下前缀最大值就行了。#include<iostream>#include<cstdio>#include<cmath>using namespace std;int p,a,b,c,d,n;double ans,price[1000005];inli

2016-04-15 08:58:10 1120 1

原创 4503: 两个串 FFT

首先将tt串反写,然后用00表示??,用1..261..26表示a..za..z。 首先令fk=∑i+j=k(ai−bj)2×ai×bjf_k=\sum_{i+j=k}(a_i-b_j)^2\times a_i\times b_j 可以发现若fk=0f_k=0,则s[k−lent+1..k]s[k-len_t+1..k]可以和t的反串(其实就是一开始的正串)匹配成功。 然后我们只要快速求fkf

2016-04-14 10:34:39 775

原创 3770: 疯狂的限制 乱搞

从左到右枚举子串的右区间,同时维护每个位置作为子串的左区间时能满足的限制条件个数,将满足条件个数在[L,R]的左区间统计入答案即可。设当前枚举的右区间为i,位置x作为左区间时满足的限制条件个数为a[x]。 现在将右区间改为i+1,如何维护a[]: 首先a[i+1]可以O(k)判断。对于某个限定条件c[x]、l[x]、r[x],其需要修改的a[]最多2段: 1. 若S[i+1]=c[x],那么从

2016-04-14 07:56:54 533

原创 2124: 等差子序列 线段树+hash

用hash值表示每个数当前是否出现过,然后正反维护两棵线段树。如果一个数左边和右边的hash值不同则代表有等差子序列(有一个出现过有一个还没出现过,因为是排列一定在后面出现)。#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#inc

2016-04-11 08:35:20 697

原创 3306: 树 树上倍增

傻逼题,换根分三种情况讨论。#include<iostream>#include<cstdio>using namespace std;const int inf=1000000007;const int N=100005;int head[N],next[N],list[N],in[N],out[N],deep[N],pos[N],val[N],fa[N][18];int n,Q,ro

2016-04-11 08:34:10 432

原创 1951: [Sdoi2010]古代猪文 费马小定理+中国剩余定理+卢卡斯定理+快速幂

数论太弱。 膜ws_yzy#include<iostream>#include<cstdio>#include<cmath>using namespace std;const long long mod=999911659;long long n,g;long long ans[4],fac[4][36005],inv[4][36005];long long p[4]={2,3,46

2016-04-11 08:33:10 508

原创 3809: Gty的二逼妹子序列 莫队算法+分块

这题还卡树状数组!@#¥%……#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<vector>#include<set>#include<map>#define lowbit(x)

2016-04-11 08:30:52 391

原创 3720: Gty的妹子树 块状树

将树分块,保证每块内都联通,然后保证每块内都有序,就可以支持查询操作了。 加入节点的时候,如果达到块的大小就重建一个块,否则加入当前块,不要忘记加入后对块排序!#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const int N=60005;int head

2016-04-11 08:30:05 595

原创 3527: [Zjoi2014]力 FFT

整理一下是个卷积。FFT。#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int N=100005;const double PI=acos(-1);int n;struct C{ double real,i; C (double a=0,double b=0) {re

2016-04-11 08:28:07 662 3

原创 2194: 快速傅立叶之二 FFT

继续模板#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;const int N=400005;const double PI=acos(-1);int n,rev[N];struct C{ double real,i; C(double a=0

2016-04-11 08:27:24 390

原创 2179: FFT快速傅立叶 FFT

模板#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int N=300005;const double PI=acos(-1);int n,tot;char s[N];struct C{ double real,i; C (double a=0,double b=0

2016-04-11 08:26:52 459

原创 2795: [Poi2012]A Horrible Poem hash

求最小循环节,可以枚举最小循环节的长度lenlen,然后判断[a..b−len],[a+len,b][a..b-len],[a+len,b]的hash值是否相等。然后一开始写的O(NN−−√)O(N\sqrt N)的发现TLETLE了。然后我们发现,如果lenlen是循环节,则len×plen\times p也是循环节(len∗p|(b−a+1))(len∗p|(b−a+1)),于是可以分解质因数,

2016-04-11 08:25:55 613

原创 2006: [NOI2010]超级钢琴 ST表+优先队列

来补几发题解吧…从HN集训回来也做了几道题一直没发题解。我们首先求出前缀和,然后枚举左端点ll,右端点的所在范围就是[l+L−1,l+R−1][l+L-1,l+R-1],然后我们要求出这段区间内的最大值,然后加入堆里。每次取出堆顶元素,假设为区间[l..x][l..x],然后再把区间[l+L−1,x−1],[x+1,l+R−1][l+L-1,x-1],[x+1,l+R-1]的最大值分别加入堆里。然后

2016-04-11 08:22:11 707

原创 SDOI2016 Round1 滚粗记

(现在是day1下午,在宾馆不想做题实在无聊就写游(guncu)记吧。Day0从HN集训回来后基本就一直在颓…blog从3.24去HN后就再也没更新过(咦好像没写HN集训的游记,不过好久了都快忘干净了还是坑着吧,其实总结一下就是被虐总rank13,orz yzy rank2,orz lct1999 五场虐六场rank5)。今天终于要去济南了,想想还有点小激(jin)动(zhang)呢,不虚不虚。

2016-04-09 16:55:00 2912 6

原创 SDOI 2016 Round1 Bless All

嘛..明天就要去济南了..然后周六周日就是省选一轮了不要犯sb错误 不要写错暴力 不要钻牛角尖 不要纠结于一道题目太久 不要方希望不要出一些奇怪(我不会)的东西如果这是最后一篇博客..就证明我退役回家种仙人掌了.. ~~考前还是不要乱立flag比较好~~

2016-04-07 16:17:25 830 5

空空如也

空空如也

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

TA关注的人

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