自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Oxer的专栏

新博客 -> https://oxer11.github.io/

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

原创 【bzoj3930】[CQOI2015]选数 莫比乌斯反演

首先问题是从l~r中选n个数,最大公约数为k的方案数再转化一下,l/k~r/k中选n个数,最大公约数为1的方案数n=2时很容易,我们看一下n=3的情况那么,其实选n个数也是同理分块,枚举r/kd和l-1/kd的取值,然后快速幂计算就可以了,问题在于如何处理出μ函数的前缀和?还是参考PoPoQQQ大爷的吧:http://blog.csdn.net/popoqqq/

2016-03-31 14:51:13 1374

原创 【bzoj3529】[Sdoi2014]数表 线性筛法+树状数组+莫比乌斯反演+数论分块

后面那一块暴力做出来就可以了,复杂度是O(n log n)的考虑a的限制,因为f(i)因为本题一共只有100000个左右的f(i),所以可以这么做。#include#include#include#include#include#include#define maxn 100010 using namespace std;struct yts{ int

2016-03-31 10:55:25 468

原创 【bzoj2820】YY的GCD 线性筛法+莫比乌斯反演+数论分块

枚举每个质数,然后暴力算,TLE换一种思路,改变枚举顺序#include#include#include#include#include#include#define maxn 10000010using namespace std;int T,tot;long long n,m;int prime[maxn],mu[maxn],f[maxn];long long s

2016-03-30 19:10:00 986

原创 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演+线性筛法+数论分块

首先可以容斥一下,问题变为1~n和1~m中有多少对数最大公约数为k,再转换一下就是1~n/k和1~m/k中有多少对互质的数,这个问题的答案就是最后那个式子。这个东西是可以分块做的,枚举n/kd的取值,预处理出μ(d)的前缀和即可。#include#include#include#include#include#include#define maxn 50010using nam

2016-03-30 14:42:09 590

原创 【bzoj2956】模积和 数论分块

额,终于把图片搞出来了。这个式子处理起来是O(n)的,但是我们发现n/i只用O(√n)个取值,我们枚举这O(√n)个取值。假如枚举的取值为k,则把所有n/i=k的i求和即可(k+1)*i>n>=k*i所以i的取值区间为[n/(k+1)+1,n/k]但是我们循环的时候枚举的是i,而不是k,每一次把i变成上一次的取值+1就可以了。最后的那个式子也不难,就是一共有O(√n+√m)

2016-03-30 08:31:21 1928 1

原创 【bzoj1409】Password 线性筛法+矩阵乘法

E[i]=p^f[i]f[i]表示斐波那契数列的第i项E[i]%q=p^f[i]%q因为q所以p^phi(q)%q=1,注意q不一定是质数先求f[i]%phi(q)的值,再用快速幂求值即可按理说,用O(√n)的做法求phi,但是貌似卡不过去,那么直接枚举素数分解质因数就好了#include#include#include#include#include

2016-03-29 17:40:32 690

原创 【bzoj2813】奇妙的Fibonacci 线性筛法

斐波那契数列有个性质f[gcd(i,j)]=gcd(f[i],f[j])f[j]|f[i]=>gcd(f[j],f[i])=f[j]=>f[j]=f[gcd(i,j)]当j=gcd(i,j)时所以ai表示qi的约数个数bi表示qi的约数的平方和设i=πpi^ki,则ai=π(ki+1)因为i只会被i/p1筛一次,p1表示i最小的质因数所以我们考虑怎样从i/p1转移到

2016-03-29 10:11:46 660

原创 【bzoj3288】Mato矩阵 线性筛法

然而是结论题,高斯消元后对角线上的数是phi#include#include#include#include#include#include#define maxn 1000010 #define mod 1000000007using namespace std;int f[maxn];int prime[maxn],phi[maxn];bool vis[m

2016-03-29 08:13:42 597

原创 【bzoj3122】[Sdoi2013]随机数生成器 BSGS

xi=axi+b特判x1是否等于t当a=0时,xi=b,直接判断t是否等于b当a=1时,xi=x1+(i-1)*b=t,特判b是否等于0,i=(t-x1)*b^(-1)+1当b=0时,xi=x1*a^(i-1)=t,如果x1或a=0,则判断t是否等于0,否则,BSGS否则,xi=axi-1+bxi+b/(a-1)=axi-1+ab/(a-1)xi+b/(a-1)=a

2016-03-29 07:55:34 605

原创 【bzoj2818】Gcd 线性筛法

gcd(x,y)=pgcd(x/p,y/p)=1枚举每个素数p,计算1~n/p中有多少对互质的数f[i]表示1~i中有多少个与i互质的数,即phi(i)g[i]表示f[i]的前缀和ans=2*∑g[n/p]-cntcnt是n以内素数的个数为什么?因为不能选p和p这种情况#include#include#include#include#include#i

2016-03-28 21:54:13 496

原创 【bzoj2242】[SDOI2011]计算器 快速幂+BSGS

第一问,快速幂第二问,exgcd或p是质数,所以y一定有逆元x=y^(-1)*z其中y^(-1)=y^(P-2)因为0没有逆元,所以只有y=0时无解第三问,BSGS设x=bk+c其中k=sqrt(P),b和c都小于sqrt(P)Y^(bk+c)=ZY^(bk)=Z*Y^(-c)用map记录一下Z*Y^(-c),一共sqrt(P)个数枚举b,查询有没有

2016-03-28 10:17:26 1233

原创 SDOI知识点大复习

马上就要考一轮了,也该复习一下模板了,把以前的题整理一下,再做一些经典题吧。

2016-03-26 13:09:52 1090

原创 【bzoj3771】Triple FFT

a表示一个的方案数b表示取两个相同的c表示取三个相同的最终,取一个的是a取两个的是(a*a-b)/2取三个的是(a*a*a-3*a*b+2*z)/6a*a*a用FFT算就可以了乘法是序列的卷积#include#include#include#include#include#include#define maxn 200100 #define

2016-03-25 08:05:31 743

原创 【bzoj3160】万径人踪灭 FFT+manacher

首先把字符串用#间隔开总数-连续的字符串连续的用manacher求总数如何求?f[i]表示以i为中心有多少对对称的字符(不包含#,但包含本身)ans=∑2^f[i]-n原字符串的位置i对应新字符串的位置2*if[i]=∑str[j]*str[i-j]第一次a=1,b=0第二次a=0,b=1这样算出来是对称的个数,(f[i]+1)/2是对数最后直接计算

2016-03-24 20:03:07 429

原创 【bzoj2194】快速傅立叶之二 FFT

原题不是卷积的形式我们把b数组翻转,i-->-ic[i+j]+=a[i]*b[j]为了防止下标为负,然后把b向右平移n-1个单位最后的答案就是c[n-1]到c[2*n-1]#include#include#include#include#include#include#define maxn 500010#define pi acos(-1)usi

2016-03-24 12:25:02 763

原创 【bzoj2179】FFT快速傅立叶 FFT

卷积求法1、DFT2、点值相乘3、逆DFTDFT快速求法——FFT1、按照下标分成奇数和偶数两个子序列2、求出两个子序列的DFT3、合并成本序列的DFT#include#include#include#include#include#include#define pi acos(-1)#define maxn 200100 usin

2016-03-24 10:33:21 648

原创 【bzoj4443】[Scoi2015]小凸玩矩阵 二分+二分图匹配

二分答案判断是否能取出N-K+1个小于等于ans的数但是能取出N-K+1个小于等于ans的数,不代表能取出K个大于等于ans的数呀注意,最后得到的ans是最小的存在N-K个比它小的数的数如果连最小的ans都取不到,那么更大的ans也取不到呀#include#include#include#include#include#include#define ma

2016-03-23 16:41:20 1811

原创 【bzoj3675】[Apio2014]序列分割 单调队列+斜率优化

f[i][k]表示前i个元素分成k块的最大分数f[i][k]=max{f[j][k-1]+(sum[i]-sum[j])*sum[j]} (1考虑最终的答案得到的方式每次分裂之后,得到两边的和的乘积那么,其实第k个块的贡献就是这个块与前面k-1个块的乘积f[i][1]=0f[i][k]以下简称f[i]f[i]=f[j]+(sum[i]-sum[j])*sum[j]f

2016-03-23 14:50:57 461

原创 【bzoj3672】[Noi2014]购票 斜率优化+树链剖分+线段树+凸包+三分

f[i]表示从根到点i的最少票价f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i] } (dep[i]-dep[j]=f[j]-dep[j]*p[i]+dep[i]*p[i]+q[i]f[j]=dep[j]*p[i]+f[i]-dep[i]*p[i]-q[i]f[i]-dep[i]*p[i]-q[i]表示过点(dep[j],f[j])的斜率为p[i]的直

2016-03-23 10:50:29 754

原创 【bzoj4311】向量 线段树按时间分治+凸包+三分

好像没什么好说的,记录每个点进出的时刻,每个点对应线段树上的O(logn)个节点,然后按时间分治就可以了。#include#include#include#include#include#include#include#define maxn 200010 using namespace std;struct yts1{ long long x,y;}p[m

2016-03-22 19:55:34 950

原创 【bzoj3533】[Sdoi2014]向量集 三分+线段树+凸包

考虑一个查询操作xz+yw=answ+x/y*z=ans/yw=-x/y*z+ans/yans/y表示过点(z,w)的斜率为-x/y的直线在y轴上的截距当y>0时,截距越大,ans越大,在上凸壳上找答案当y答案可以三分,也可以直接set维护斜率找斜率最接近的那个点问题来了,如何维护区间[L,R]的凸包线段树的每个节点建凸包是O(size log n)的

2016-03-22 18:33:05 887

原创 【bzoj1758】[Wc2010]重建计划 二分答案+单调队列+点分治

首先二分答案ans,每条边权值减去ans,问题转化成整棵树中长度在[L,U]之间,权值和最大的路径是否大于0.点分治考虑如何求出经过根的所有路径对答案的影响,枚举根的每个儿子,g[i]表示当前子树中深度为i的节点的最大权值和f[i]表示之前的子树中深度为i的节点的最大权值和枚举i,查询f[L-i]~f[U-i]之间的最大值,这个可以用线段树来做,复杂度是O(∑size lo

2016-03-22 07:58:17 796 2

原创 【bzoj2599】[IOI2011]Race 点分治

点分治1、求树的重心2、计算以当前重心为根的子树的答案3、去掉以当前重心儿子为根的子树的答案4、枚举每个儿子,分治考虑计算过程如何实现我们不妨记一个ans数组,ans[i]表示使用i条边权值为k的有多少对每次实现2的时候,权值设为+1每次实现3的时候,权值设为-1把子树内所有的dis排序,计算有多少对权值和为k的,两个指针扫一遍就可以了。#i

2016-03-18 09:04:34 2357 2

原创 【bzoj3365】[Usaco2004 Feb]Distance Statistics 路程统计 点分治

点分治过程1、求出树的重心2、计算以当前根为根的对数3、计算以当前根的儿子为根的对数4、枚举每个儿子,分治每次递归每个儿子的时候,要把重心到儿子的边断掉,把儿子视为一颗新的树来做,于是就要重新构树。其实点分治题目的差别,主要在于calc函数是怎么写的,其他部分其实都是一样的难点在于要想办法把问题转化成支持减法的#include#include#i

2016-03-17 19:50:44 481

原创 【bzoj1492】[NOI2007]货币兑换Cash 斜率优化+set+凸包

斜率优化boss题?首先这道题有一个性质,一定是在一天买进一天卖出,而且全都是倾巢买入卖出先写方程f[i]表示到前i天最多获得多少元f[i]=max{f[j]/(a[j]*rate[j]+b[j])*rate[j]*a[i]+f[j]/(a[j]*rate[j]+b[j])*b[i]}(1f[i]=max{x[j]*a[i]+y[j]*b[i]}=(x[j]*a[i]/

2016-03-16 15:10:50 764

原创 【bzoj4071】[Apio2015]巴邻旁之桥 三分套三分

三分一下第一座桥,三分一下第二座桥,貌似就解决了。UOJ跑的死慢,bz也T掉了。#include#include#include#include#include#include#define maxn 100010 #define inf 1000000000000000using namespace std;struct yts{ int op1,x1,

2016-03-15 08:03:59 765

原创 【bzoj3203】[Sdoi2013]保护出题人 凸包+三分法

非常好的题目山东二轮前几年还是不错的嘛题解:http://www.cnblogs.com/iwtwiioi/p/4007263.html前i个僵尸的血量和为sum[i]那么第i关的攻击力就是max{(sum[i]-sum[j-1])/(x[i]+i*d-j*d)}(1考虑一下为什么?对于第i只僵尸,可以把前面i-1只僵尸的血量合到第i只上,取最大值已经保证了前i-1只僵

2016-03-14 15:01:42 798

原创 【bzoj1857】[Scoi2010]传送带 三分法

三分法这个问题看上去像是单峰的,于是可以三分求答案大致思路是当前区间为[l,r]mid=(l+r)/2,midmid=(mid+r)/2如果mid比较靠近极值点,则r=midmid如果midmid比较靠近极值点,则l=mid首先三分出AB上的点E,表示先从A走到点E然后三分出CD上的点F,表示从点E走到点F,再走到点D三分套三分#includ

2016-03-14 13:51:21 807

原创 【bzoj3444】最后的晚餐 乱搞

不在一个联通块里的肯定不影响,最后组合数算一下就可以问题在于同一个联通块里有多少种排法这道题表面上是有向边,实际上是无向边,因为要强制坐在一起一个点的度数最多为2,且如果出现长度大于2的环则无解那么就是说没有环喽,也就是每个点都在一条链上现在问题就是一条链有多少种排法,这个问题很明显吧,就是等于2呀ans=(cnt+cnt')!*(2^cnt)cnt表示链的数量,cnt

2016-03-11 08:32:28 933

原创 【bzoj2300】[HAOI2011]防线修建 凸包+set

离线,将删除操作变成插入操作每次插入一个点,要求动态维护凸包set维护,学着用指针迭代器吧插入一个点,依次把两边不符合要求的点删除,用迭代器直接++和--就可以了#include#include#include#include#include#include#include#define maxn 100010using namespace std;

2016-03-10 21:22:11 741

原创 【bzoj1069】[SCOI2007]最大土地面积 凸包+旋转卡壳

旋转卡壳是利用一种奇妙的单调性,比较有意思。枚举一下对角线,旋转卡壳在两边分别找面积最大的三角形。#include#include#include#include#include#include#define maxn 4010 using namespace std;struct yts{ double x,y;}a[maxn],s[maxn];in

2016-03-10 16:28:13 547

原创 【bzoj1670】[Usaco2006 Oct]Building the Moat护城河的挖掘 凸包

裸的凸包啦,第一次写。#include#include#include#include#include#include#define maxn 5010 using namespace std;struct yts{ long long x,y;}a[maxn],s[maxn];long long operator*(yts x,yts y){ ret

2016-03-09 14:48:23 491

原创 【bzoj3997】[TJOI2015]组合数学 dp

非常奇怪的题第一想法是最小流,显然不可行用到一个性质:如果(i,j)与(i',j'),仅当(i',j')在(i,j)的左下方时,(i,j)无法到达(i',j')那么把矩阵左右翻转,条件变成了在i和j的右下方时才可以选那就可以dp了dp[i][j]表示(1,1)~(i,j)这个矩阵中的答案dp[i][j]=max(dp[i-1][j-1]+a[i][j],max(dp[i-1

2016-03-08 21:28:16 612

原创 【bzoj1914】[Usaco2010 OPen]Triangle Counting 数三角形 计算几何

补集转化总数-不能过原点的三角形我们发现先按照极角排序,然后枚举每个点,这个点与原点连线的一侧任选两个点与这个点围成的三角形都不能过原点那么怎么计算呢?其实按顺序枚举每个点,每个点只计算一遍,则正好不重不漏的计算了每一种情况我们发现只要顺序枚举就可以了,按极角序枚举时,每次向后移一个点,会在原来的点的个数上-1假如枚举到点i,记一个右端点r,在当前节点与原点所在的直线右侧的

2016-03-08 21:04:55 784

原创 【bzoj1132】[POI2008]Tro 计算几何

按照横坐标为第一关键字,纵坐标为第二关键字排序,枚举每个点作为原点把再它后面的点拿出来,求每一对点与原点构成的三角形的面积abs(a[i].x*a[j].y-a[i].y*a[j].x)如果能去掉绝对值,就可以用乘法分配律来做了考虑按极角排序从下向上枚举每一个点,那么当前点与每一个前面的点的叉积小于0,与后面的点叉积大于0那么我们边枚举边,记录一个前缀和,每次ans+=

2016-03-08 14:16:14 582

原创 【bzoj1610】[Usaco2008 Feb]Line连线游戏 计算几何基础

乱搞,其实开始想用set的#include#include#include#include#include#include#define inf 1e20 using namespace std;double a[100010];double x[210],y[210];int n,m,ans,tot;int main(){ scanf("%d",&n)

2016-03-08 10:38:27 614

原创 【bzoj1711】[Usaco2007 Open]Dingin吃饭 最大流

源点S向吃的连一条容量为1的边吃的向牛连一条容量为1的边牛拆成两个点之间容量为1的边牛向喝的连一条容量为1的边喝的向汇点T连一条容量为1的边#include#include#include#include#include#include#define maxn 1010#define maxm 100010 #define inf 100000000

2016-03-08 10:00:07 497

原创 【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 二分答案+最大流

二分答案每个牛棚拆成两个点i和i'源点向每个牛棚i连一条容量为初始数量的边每个牛棚i向能走到(最短路小于二分的答案)的牛棚j'连一条容量为inf的边每个牛棚i'向汇点连一条容量为容量的边最大流#include#include#include#include#include#include#define maxn 210 #define maxm 1

2016-03-07 20:58:34 820

原创 【bzoj1004】[HNOI2008]Cards burnside引理+dp

首先,加入一个置换,每个数i对应自身计算方案数%Pans=∑D(i)/M (1D(i)表示在置换i下不变的染色数考虑如何求D(i)对于置换i,求出它的循环节,每个循环节必须染成同一个颜色,但是对总数有限制f[i][j][k]表示用i个红色,j个蓝色,k个绿色的方案数把每个循环节视为一个物品,权值为长度。f[i][j][k]=f[i-d[p]][j][k]+f[i][

2016-03-07 14:02:25 453

原创 【bzoj2085】[Poi2010]Hamsters hash+倍增

dis[i][j][k]表示从第i个串的结尾到第j个串的结尾走过2^k个串的最小长度dis[i][j][0]=len[j]-cal(i,j)cal(i,j)表示如果i的最长后缀等于j的最长前缀倍增floyd好了。#include#include#include#include#include#include#define inf 1000000000000000

2016-03-03 07:41:57 550

空空如也

空空如也

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

TA关注的人

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