自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Icefox的博客

生活不止眼前的苟且,还有诗和远方。

  • 博客(126)
  • 资源 (3)
  • 收藏
  • 关注

原创 poj2262 Goldbach's Conjecture(线性素数筛+暴力枚举)

线性素数筛板子。原理就是保证每个合数一定是被自己最小的质因子筛掉的。核心就是:if(i%prime[j]==0) break;如果i有prime[j]这个质因子,则i=prime[j]*k, i*prime[j+1]=prime[j]*k *prime[j+1],完全可以在k *prime[j+1]时被筛掉。所以是O(n)O(n)的

2017-08-26 17:59:22 332

原创 luogu1218 [USACO1.5] Superprime Rib(搜索+素数判断)

#include <cstdio>#include <cstring>int n;bool isprime(int x){ if(x==1) return false; for(int i=2;i*i<=x;++i) if(x%i==0) return false; return true;}void dfs(int x,int cnt){

2017-08-26 17:44:07 283

原创 luogu1017【2000提高】进制转换(数学)

2000提高

2017-08-26 17:40:13 327

原创 luogu1003【2011提高】铺地毯(模拟)

这应该是我第一次写struct吧hh

2017-08-26 17:26:39 305

原创 luogu1149【2008提高】火柴棒等式(模拟)

2008提高

2017-08-26 17:20:50 253

原创 luogu1089【2004提高】津津的储蓄计划(模拟)

2004提高

2017-08-26 17:11:27 541

原创 bzoj3796 Mushroom追妹纸(SA+二分答案+kmp)

把s1和s2接在一起,求最长公共子串。二分答案就好了。。。此题就多一个判断,要求s3不能出现在公共子串里,那我们就预处理一下,用kmp求出s3在s2中出现的位置,处理成L数组,即可O(1)判断。

2017-08-26 16:58:07 556

原创 bzoj3676 [Apio2014]回文串(manacher+SA+二分+lcp)

manacher板子戳这里 我们用manacher枚举回文串,用SA求这个串的出现次数。(利用h数组二分求最大包含区间[l…r],则出现次数为r-l+1)类似这道题。不错的好题。。。

2017-08-26 15:58:09 325

原创 bzoj3277&&bzoj3473 串(SA+二分+lcp)

首先老套路,我们把所有串接在一起,用分隔符隔开,做SA,求出h数组,并用st表求lcp。然后分析题目,我们对于每个串分别统计答案。假定我们正在做第i个串,在总串中从sta开始,到ed结束。则我们要求的就是每个后缀a[sta…ed],a[sta+1…ed]…a[ed]对答案的贡献和。假设我们在求a[j…ed]这个后缀的贡献。则他的贡献就是有几个前缀出现在k个及以上不同串中,显然如果a[j..j+len

2017-08-26 14:22:20 563

原创 luogu3847 [TJOI2007]调整队形(dp求变回文的最小操作)

操作一共有四种,但是我们本着简化的原则可以发现 操作1,2 即往数列里加数可以等效的被一步操作3 即删掉 你想加数对应的那个数来代替,所以无非就两种操作:1.改变一个数。2.删掉一个数。求最少经过几步操作可以使原数列变为回文的 我们考虑dp[i][j]表示把i…j变成回文所需的最小步数,则如果 a[i]==a[j] 则dp[i][j]=dp[i+1][j-1] else dp[i][j]=

2017-08-25 22:41:12 353

原创 bzoj3238 [Ahoi2013]差异(SA+单调栈求所有区间最小值和)

我们很明显可以直接预处理出来T(i)+T(j)的总和,为n* (n-1)*(n+1)/2(推一下样例就可以了),然后主要问题是处理lcp的和。 这个地方我们可以直接在height数组上搞,我们可以发现,每一对(i,j)都对应了h数组上的一段区间、甚至是点!(当i,j两个子串rank相连的时候)那么同样的,每一个height数组上的一段区间(点)也对应我们要求的一个LCP。这样我们就不再关心是谁和谁

2017-08-24 21:59:47 848 2

原创 bzoj3172 [Tjoi2013]单词(SA+暴力,类似bzoj2754)

把所有单词连在一起,SA求出h数组,对于每一个单词看做一个询问,暴力往前往后扫,看有几个暴力统计即可。反正N才200

2017-08-24 20:33:03 363

原创 bzoj2946 [Poi2000]公共串(SA+二分答案 同poj3450)

求多个串的最长公共子串,一模一样,题解见这里

2017-08-24 19:52:07 466

原创 bzoj2754 [SCOI2012]喵星球上的点名(后缀数组+暴力)

把所有串接在一起,打上分割符。SA求出h数组。然后就暴力。。每一个询问串往后往前扫h大于询问串长度的。然后暴力统计答案。。。复杂度很玄学。 tips:这题数据范围太大。。注意越界问题的细节。。

2017-08-24 18:00:18 694

原创 bzoj2534 Uva10829L-gap字符串(SA+lcp同bzoj2119)

求形如ABA的子串个数,同bzoj2119,题解看这里 tips:没说全是小写字母你就别换成int了。。。无谓的WA三发#include

2017-08-24 17:00:16 418

原创 hdu1255 覆盖的面积(线段树+扫描线+离散化,求矩形面积并)

给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积。和周长并套路差不多。。甚至简单了些我觉得。重点是维护重复了两次以上的线段长度。分类讨论即可。 以coverlen[2]为例: 如果cover==0 则coverlen[2]利用子树的coverlen[2]来更新 如果cover==1 则coverlen[2]利用子树的coverlen[1]来更新 如果cover==2 则cover

2017-08-24 15:14:27 324

原创 poj1177[IOI1998]Picture (扫描线+离散化+线段树,求矩形周长并)

这人讲的很清楚了。我就再说一些细节。做了离散化之后时间和空间确实很优秀,但其实不做离散化也可以过。 扫描线这个算法,就是从左到右拿一根平行于y轴的线去扫描,遇到线段后进行处理,入边和出边。统计答案要注意。线段树负责维护的其实是一个线段覆盖的问题,我的每个节点表示的是一条线段,即a[l]a[r+1],所以我建树只建到m-1即可。复杂度应该是O(nlogn)O(nlogn)

2017-08-24 13:01:33 754

原创 CF840C On the Bench(dp+组合数学)

首先我们对n个数进行一个分组,把乘积为平方数的数分在一组(可以证明:同一组内的数两两乘积为平方数,不同组的两个数乘积一定不是平方数),记作一共分了nn组,则同组的数只要不相邻即可满足题意。即原问题转化为 n个物品,分成了nn组,要求同组物品不能相邻,问共有几种排列方案。我们dp解决这个问题,f[i][j]表示前i组,有j个相邻的同组的方案数。 我们现在考虑插入第i组,第i组的大小为size[i]

2017-08-22 20:46:19 969

原创 FNOI_TEST_1 c(二分)

首先我们要发现b[i]是随着i不降的。。。这就给我们优化提供了可能。正解也是枚举答案区间左端点,但是发现规律用二分查找分界点,优化为O(1)算出。复杂度为O(nlogn)

2017-08-20 15:19:04 351

原创 FNOI_TEST_1 b(高精度除法)

第二题就是个高精度除法。花15分钟写一下高精除低精就是70分啊。。。高精除高精,我们把除法变成多次减法来做。复杂度是O(10nm)O(10nm)的

2017-08-20 14:20:36 402

原创 FNOI_TEST_1 a(模拟)

连模拟都写不对了。。。太弱了。。。

2017-08-19 23:08:50 311

原创 luogu1006 【2008提高】传纸条(dp)

同方格取数,三维dp,注意一下边界就好了。详见方格取数博文。=

2017-08-19 22:10:40 395

原创 Codeforces Round #429

CF841A Generous Kefa(模拟)CF841B Godsend(博弈+数学)CF840A Leha and Function(贪心+组合数学)

2017-08-19 22:02:34 303

原创 bzoj3193 [JLOI2013]地形生成(dp+组合数学)

首先求标号序列的个数,就是所有合法排列的个数,求等高线序列个数,就是求本质不同的合法排列的个数。因为答案与顺序无关,所以我们不妨把数据按h从大到小排列,这样我们每次往里插入一个新的a[i],他一定比所有已经在序列里的数小,这样把a[i]插在第j个空挡(序列中每个数的左右两个位置称为空档),它前面比它大的就有j-1个。设a[i]的关键值为x,则a[i]可以插在前1~x个空档,根据乘法原理,ans=an

2017-08-18 22:26:02 485 2

原创 bzoj1334 [Baltic2008]Elect(贪心+背包dp)

首先根据他的描述,为了保证合法,我们往不到n/2个人的组合中加比这些党的最少人数都少的人进去超过了n/2则一定合法。即我们把n个党按人数从大到小排序,进行01背包,看最多能装多少。(注意只能从n/2及以下转移) tips:我一开始脑残的加了剪枝。。我也很迷。

2017-08-17 22:04:55 543

原创 luogu3856 [TJOI2008]公共子串(dp)

首先洛谷上数据范围是错误的。。。N<=100。。方案数可能超int。。。这题坑了好久。f[i][j][k]表示s1前i个字母,s2前j个字母,s3前k个字母所包含的本质不同的公共子串的个数。为了避免重复,我们每次做i,j,k时都重新统计所有的本质不同的公共子串。怎么统计呢?枚举公共子串的结尾为a…z,假设当前枚举a,找到目前为止的每一个串的最后一个a的位置,为了避免重复,我们把所有满足以a结尾的公共

2017-08-17 16:34:41 447

原创 bzoj4887 [Tjoi2017]可乐(dp+矩阵倍增)

f[0][i][t]表示第t秒到i的全部方案(含之前已经在i炸掉的)f[1][i][t]表示第t秒到i而且还在i没炸的方案数,则 f[0][i][t]=f[0][i][t-1]+f[1][j][t-1]+f[1][j][t-1]|i,j之间有边 f[1][i][t]=f[1][j][t-1]+f[1][i][t-1]|i,j之间有边 t=10^9,需要矩阵倍增加速。#include <cstd

2017-08-17 14:31:08 864

原创 hdu4843 [noi2000] 古城之谜 (Trie+dp)

做出这道题关键在于理解语法。其中名词短语和动词短语给出的都是递归定义,可以转化为更直观的, <名词短语> ::= {<辅词>} <名词>, <动词短语> ::= {<辅词>} <动词>, 也就是以一个名词或动词结尾,前面可以加上任意多个辅词。而句子就是要以名词短语开头,后面的名词短语和动词短语交替出现。分析出语法结构,就可以进行动态规划。定义词性 j={0,1,2,3}。 f[i][0][

2017-08-17 13:48:32 857

原创 bzoj1212 [HNOI2004]L语言(Trie+暴力)

建出字典树,每次暴力找单词。。更新最大前缀即可。

2017-08-16 22:40:14 287

原创 bzoj1831 [AHOI2008]逆序对(dp)

设f[i][j]表示第i个空缺填j,前i个空缺产生的逆序对个数的最小值,然而我们发现这样无法进行转移。。因为不知道前面几个空缺都填了什么。然后我们机智的猜想:让空缺填的数单调不降,两两空缺之间均不构成新的逆序对。我们来证明一下:对于两个空位a和b,分别填入数x和y,且x< y。 如果我们交换x和y,会有如下性质: 1.[1,a-1]和[b+1,n]中的数与x y构成的逆序对数不变。 2.[a+

2017-08-16 21:37:50 290

原创 bzoj1899 [Zjoi2004]Lunch 午餐(dp)

首先不难证明吃饭慢的人一定要先打饭。(吃饭快的排在他前面,那只会使最后所有人吃完饭的时间更长)因此,我们先以吃饭时间由大到小排序,这样就可以只用排队时间来表示状态了。f[i][j]表示前i个人在1号口打饭排队所花的时间为j时所有人吃完饭的最小时间,sum[i]为排队时间的前缀和,则在2号口打饭排队所花时间为sum[i]-j.对于第i个人,无非两种决策: 1.在1号口打饭,则f[i][j]=max{

2017-08-16 19:53:02 390

原创 FZU2129 子序列个数(dp求不同子序列个数)

dp[i]表示前i个数的不同子序列个数,对于a[i] 1.在之前没出现过,dp[i]=dp[i-1]+dp[i-1]+1 2.在之前出现过,最近的位置为x,dp[i]=dp[i-1]+dp[i-1]-dp[x-1]

2017-08-16 16:59:06 2554

原创 hdu5791 Two(dp求公共子序列个数)

求两个序列的公共子序列个数,dp[i][j]表示a序列前i个和b序列前j个公共子序列个数。由容斥原理dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]。特别的,如果a[i]==b[j],会创造更多的公共子序列,即dp[i][j]+=dp[i-1][j-1]+1.(不带a[i],b[j]的公共子序列都在加上a[i],b[j]构成新的公共子序列,再加上1个a[i],b

2017-08-16 16:36:46 461

原创 bzoj1925 [Sdoi2010]地精部落(dp)

程序5分钟,思维两小时hh。 问题就是求长度为n的排列满足抖动序列的个数。我们首先要发现答案是具有对称性的,即如果存在一个排列满足答案且第一个数为山峰,则一定还存在一个排列满足答案且第一个数为山谷(把原排列中的每个数x都换成n+1-x即可),推广一下:如果存在一个长度为i的序列满足要求且第一个数为山峰的话,则一定还存在一个长度为i的序列满足要求且第一个数为山谷(把这i个数从小到大排列,分别为a[1

2017-08-16 14:54:54 373

原创 poj1038 Bugs Integrated, Inc.(3进制状压dp)

黑书1.5.2例题10 Bugs公司 一看m和n差这么多,才10,很有可能是状压。我们这样看好别扭。。把他转一下,变成n*m的矩形,那要压缩一定是把一行压成一个状态。考虑到放的小矩形是3*2或2*3的,会影响(i,x)能否放矩形的只有(i-1,x),(i-2,x)。所以我们用pre[x]这样表示: pre[x]=0->(i-2,x),(i-1,x)均空闲 pre[x]=1->(i-2,x)被占

2017-08-16 11:55:38 349

原创 bzoj1725 [USACO2006NOV]Corn Fields牧场的安排(状压dp)

跟上一题很像啊。。这题n=12,每行的状态也不太一样,所以我们就不预处理了。dp[i][k]表示第i行的状态为k的合法方案,等于第i-1行状态为j且j,k可以为相邻行的方案数的和

2017-08-16 10:44:48 435

原创 bzoj1087 [SCOI2005]互不侵犯King(状压dp)

压缩每一行的状态,1表示放国王,0表示不放国王,则一行有2n2^n种状态,预处理每行的可能合法状态,即相邻的位置不能同为1,顺便记录cnt,表示此状态放了多少个国王(即状态i有多少个位为1)。然后再预处理相邻两行的合法状态(相同位置不同为1,左上右下相邻位置不同为1,左下右上相邻位置不同为1)。dp[i][j][k]表示前i行一共放了j个king,第i行状态为k的方案总数,则 dp[i][j][k

2017-08-16 10:11:29 288

原创 uoj149【2015提高】子串(dp)

f[i][j][k]表示 a前i个字符匹配了b的前j个字符 分了k段 的方案数,s[i][j][k]表示 a前i个字符匹配了b的前j个字符且a的第i个字符一定匹配了b的第j个字符 分了k段 的方案数。考虑转移到f[i][j][k]: 对于a[i]无非两种决策: 1.不匹配b[j],则方案数为f[i-1][j][k]。 2.匹配b[j],则方案数为s[i][j][k]。 s[i][j][k]如

2017-08-15 23:11:34 258

原创 bzoj2119 股市的预测(SA+lcp)

走势相同,要进行差分,数的范围太大,还要离散化,然后就是求有多少子串样子是ABA,且B的长度已给定。枚举A的长度x,统计所有A的长度为x的答案。 我们以x对原串进行分块,每一块的第一个点设为关键点,我们发现对于一个ABA,第一个A一定覆盖且只覆盖一个关键点,我们枚举关键点i,i和i+mm+x往左往右匹配长度l和r(r包括关键点),如果l+r>=L那么这个地方就有l+r-x+1个满足的子串。因为要避

2017-08-15 00:01:35 557

原创 uoj265【2016提高】愤怒的小鸟(状压dp)

首先每两个点可以确定一条抛物线,一条抛物线可能打掉很多猪。所以我们先O(n2)O(n^2)预处理一下第i个点和第j个点所确定的抛物线(算个公式就好了),如果a<0才合法,(注意精度问题,还有特判横坐标相等的,小心除0)然后对于这条抛物线,如果合法的话,我们O(n)O(n)扫一遍,看有没有其他的点也在这条抛物线上。用b数组记录一下(n<=18,我们显然可以用二进制压缩状态,共2n2^n种,把这条抛物线

2017-08-14 22:50:19 324

zjoi2015.zip

浙江省选 2015 zjoi 数据 题目zjoi2015.zip 2015浙江省省赛数据。

2018-02-23

国家集训队2004论文集

国家集训队 论文集 2004 OI。

2017-08-05

2013国家集训队清华集训

2013国家集训队清华集训资料。

2017-07-30

空空如也

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

TA关注的人

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