- 博客(18)
- 收藏
- 关注
原创 bzoj4403 序列统计 组合
假设序列长度为n,区间为[l,r],首先求出这一段的答案。 对于任意一个序列,将第i个数+i,那么原来的问题就转化为了n个在[l+1,r+n]区间以内的单调递增的序列的个数。后者又相当于在[l+1...r+n]这r-l+n个数中取n个的方案数,即为C(r-l+n,n)=C(r-l+n,r-l) 所以,答案就相当于C(r-l+1,r-l)+C(r-l+2,r-l)+.
2016-01-31 23:15:30 1983
原创 bzoj4402 claris的剑 数论
这道题目看起来好华丽啊。。我一开始还以为是递推找规律,然而看到了本质不同以后就。。。。 实际上,任意一种可行的方案的序列都可以转化为本质相同的下述序列: 先是若干个(1,2),然后是若干个(3,2),然后是若干个(3,4)……以此类推,当然如果长度为奇数就在最后面加上一个数,举个例子: {1,2,3,2,3,2,3,2,3,4,5,4,5,4,5,4
2016-01-30 11:18:39 1823
原创 bzoj2208 连通数 tarjan缩点&状压常数优化
这道题目还想并没有比O(N^3)更快的算法了。。除非从树的分治入手? 首先tarjan缩点(显然),然后就是个DAG。然后给缩成的强连通分量一个权值为它所含的点的个数,然后对于一个强连通分量该处的答案就是为该强连通分量的权值乘上这个强连通分量所能到达的点的个数(包括自身)。假设用f[i]表示强连通分量i能到达的点的集合,显然f[i]|={f[j]}当且仅当存在边(u,v)使u在强连
2016-01-27 21:41:05 927
原创 bzoj1911 特别行动队 动态规划斜率优化
一道比较复杂的斜率优化,如果对于j f[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c sum[i]>(f[j]+a*sum[j]^2-b*sum[j]-(f[k]+a*sum[k]^2-b*sum[k]))/(2*a*(sum[j]-sum[k]))。 将右边作为斜率k(j,k)则k为下凸函数(就是后一项比前一
2016-01-24 21:59:06 1107
原创 bzoj2039 人员雇佣 最小割
这道题目描述真是醉了。。题意,雇佣每一个经理有一个花费,同时雇佣两个经理可以的到2*E[i,j]的利润,如果一个经理雇佣另一个经理不雇佣会造成E[i,j]的损失(注意是倒扣)。 这种题目的做法和最大闭全子图差不多是一个道理。。简单说一下吧(其实是怕自己忘记): 一般来说都是转化成最小割,割完以后和S相连的是要选取的(对应到本题就是要雇佣的),和T相连的是不选取的,然
2016-01-24 16:48:59 821
原创 bzoj2656 数列 高精度&递推
原来想hash的,后来发现没有这么复杂。 我们不妨考虑一对数(x,x+1),那么它的结果可以由(x/2,x/2+1)的结果得到,这里的/与c++里的一样表示整除,后面也是如此。有两种情况: 1.x=2u,x+1=2u+1,则Ax=Ax/2,A(x+1)=Ax/2+A(x/2+1); 2.x=2u+1,x+1=2u+2,则Ax=Ax/2+A(x/2+1
2016-01-23 21:55:19 930
原创 bzoj2038 小Z的袜子 莫队算法
学习了一下莫队算法。核心就是在可以通过当前状态(l,r)的结果,能够在O(1)时间内推出相邻状态(l-1,r)(l+1,r)(l,r-1)(l,r+1)的结果的前提下,通过安排询问的次序,使总时间复杂度在O(N^1.5)内。因此这实际上是一个离线算法。同时指出,在满足上述前提的情况下,任意两个状态(l1,r1)(l2,r2),在已知一个的情况下都可以在O(|l1-l2|+|r1-r2|)的时间复杂
2016-01-23 16:35:58 1239
原创 bzoj2007 海拔 最小割转最短路
这道题目居然可以转化为最小割。。实际上只要剥去题目中华(keng)丽(die)的外壳,就是一个裸的最小割。 首先,这道题目中的终点一定是最高点。不妨考虑所有比终点高的点,将这些点的海拔都变为1,那么答案显然变小,同理起点一定是最低点,因此所有点的海拔范围为[0,1]。 其次,需要剥去这道题目最大的一个外壳,也就是海拔为小数这个绚(keng)丽(die)的条件。实际上
2016-01-22 17:10:12 690
原创 bzoj3629 聪明的燕姿 质因数的和&dfs
首先,若n=a1^p1*a2^2...an^pn,那么n的约数和为(1+a1+a1^2+...+a1^p1)*(1+a2+a2^2+...+a2^p2)*...*(1+an+an^2+...+an^pn),记为m。 然后我们就可以通过m来得到n了。可以枚举ai,然后枚举对应的pi,看能否使1+ai+...+ai^pi被m整除。但是这样的话需要求出2*10^9范围内的质数。而如果pi
2016-01-10 21:18:39 1303 2
原创 bzoj2600 ricehub 二分
这么水的题居然没有一眼看出来怎么做。。。 首先二分答案x,那么对于段[l,r],其中r=l+x-1,必然是选择中间的作为米仓(偶数就是中间两个的任意一个)。然后就可以O(N)判断了。。。。。。AC代码如下(NOIP题还拿来水。。。真是没救了):#include#include#include#define ll long longusing namespace st
2016-01-10 20:21:02 624
原创 bzoj1858 序列操作 线段树打标记
一道比较繁琐的线段树lazy tag(我写了2.9k应该算比较短的了)。由于有取反操作的存在,事实上我们需要维护下列东西: 1.1的个数; 2.从头开始1的连续的个数; 3.从尾开始1的连续的个数(2、3两个是为了维护连续最大值而存在的); 4.最大的连续的1的个数;同理,还需要维护: 5.从头开始0的连续的个数;
2016-01-09 20:08:45 1577
原创 bzoj1597 土地购买 动态规划&斜率优化
最最基础的斜率优化(这么基础的斜率优化还WA这么多发,还好意思说)。 显然如果a[i]>=a[j]且b[i]>=b[j],j是没有什么卵用的,直接去掉,那么如果将a降序排序,可以发现b一定是升序的。从而显然有方程,f[i]=min{f[j]+a[j+1]*b[i]}。那么对于j=s(j,k)时k比j更优。那么当s(i,j)>s(j,k),且i P·S:然而我犯了sb
2016-01-09 13:33:09 1545
原创 hdu1198 Just a Hook 线段树区间赋值
继续补线段树>_AC代码如下:#include#include#include#define N 500005using namespace std;int n,m,c[N][2],sum[N],val[N];int read(){ int x=0; char ch=getchar(); while (ch'9') ch=getchar(); while (ch>='0
2016-01-09 11:21:14 961
原创 poj3468 A Simple Problem with Integers 基础线段树or树状数组
以前的博客提到过自己没怎么写过线段树。。现在要开始补起来了。AC代码如下(一开始没看见负数读入优化写渣WA了几发。。真是无语):#include#include#include#define N 500005#define ll long longint n,m,icr[N],c[N][2]; ll sum[N];int read(){ int x=0,tmp=1; cha
2016-01-08 21:53:20 526
原创 bzoj1855 股票交易 动态规划&单调队列
动态规划,设f[i][j]为第i天股票j的最大收益,有三种转移:1.不操作,f[i][j]=f[i-1][j];2.买入,f[i][j]=max{f[i-w-1][k]+(k-j)*api},其中,j-asi3.卖出,f[i][j]=max{f[i-w-1][k]+(k-j)*bpi},其中,j 后面两种都可以用单调队列维护f[i-w-1][k]+k*api(bpi)来
2016-01-05 22:01:08 1139
原创 bzoj1857 传送带 三分
很早看到的三分法,竟然在今天用到了(显然已我的智商是想不到的)。然而发现自己并不会证明o(╯□╰)o,但是除了最关键的一步其它还是会的>_ 首先,我们用三分法,最基本的是要证明那个人一定是沿着如下路径走的:从A沿着AB走一段,再穿越到CD上某一点,最后到终点。证明如下:不妨假设p>q>r,因为当r>max(p,q)时没什么好讨论的,而p,q的大小没什么关系。那么假设这人从AB上一点
2016-01-05 20:57:14 794
原创 bzoj1853 幸运数字 容斥原理&dfs
首先形如6,8,66,68,86,...这类数的个数是可以计算的,数量为2^10+2^9+2^8+...+2=2^11-2=2046个。在这些数中,有一些是没有用的,比如88,因为它是8的倍数。如果我们把能被其他数整除的这类数去掉,就只剩下943个数了。接下来就要用容斥原理了: 如果S中能被a、b、c整除的数集合为A、B、C,那么S中a或b或c的倍数的个数为A+B+C-A∩B-A∩
2016-01-03 19:57:38 927
原创 bzoj1856 字符串 组合数学
果然是神题。。。数形结合。。。 看到这道题,第一反应是把0看成-1,这样就变成前缀和>0了。其实也想到了把这个字符串转化成1条折线,即从(0,0)出发,经过n+m步,每一步不是向右上走一格就是向右下走一格,要求不能到x轴的下方,求到达点(n+m,n-m),但是接下来的就比较巧妙了,确实想不到。(也可以见=>http://www.cnblogs.com/jianglangcaijin
2016-01-03 18:58:15 732
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人