自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [BZOJ 1061][Noi2008]志愿者招募:费用流|单纯型

点击这里查看原题学习费用流的好题,最开始用了zkw本人的zkw费用流模板,然后过不了样例,被坑一早上;果断换hzw的zkw费用流模板,顺利通过;此外还尝试了下SPFA版费用流,悲惨TLE。(还是黄学长对我们最好)简单说下这个的思路:从汇点出发,倒着做SPFA,每次增广只走是最短路的路径。具体的还是建议去看http://www.cnblogs.com/acha/p/6735037.html这个题的建图

2017-05-26 14:40:06 395

原创 [BZOJ 2142]礼物:扩展Lucas定理

点击这里查看原题扩展Lucas定理教程 此题即为C(n,w1) * C(n-w1,w2) * …%mod/*User:SmallLanguage:C++Problem No.:2142*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;ll mod,n,m,w[

2017-05-24 20:56:14 518

原创 [POJ 2891]Strange Way to Express Integers:扩展中国剩余定理

点击这里查看原题这里是教程/*User:SmallLanguage:C++Problem No.:2891*/#include<stdio.h>#include<iostream>#include<iomanip>#include<string.h>#include<algorithm>#include<queue>#include<stack>#include<math.h

2017-05-24 14:49:03 371

原创 [BZOJ 1467]Pku3243 clever Y:扩展BSGS

点击这里查看原题点击这里查看扩展BSGS教程 扩展BSGS也可以拿来做普通BSGS哦/*User:SmallLanguage:C++Problem No.:1467*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;ll a,b,c;map<ll,ll> mp

2017-05-24 09:21:12 346

原创 [POJ 2417]Discrete Logging:BSGS

点击这里查看原题模板题,这里贴BSGS教程/*User:SmallLanguage:C++Problem No.:2417*/#include<stdio.h>#include<iostream>#include<iomanip>#include<string.h>#include<algorithm>#include<queue>#include<stack>#includ

2017-05-23 20:45:43 316

原创 [BZOJ 4129]Haruna’s Breakfast:树上带修改莫队+分块

点击这里查看原题依然好题,不过这题时限比糖果公园短很多,坑点是查询mex值的时候不能O(n)去查,会超时,因此需要sqrt(n)分块,记录每个块内是否每个值都有至少一个。/*User:SmallLanguage:C++Problem No.:4129*/#include<bits/stdc++.h>#define ll long long#define inf 999999999us

2017-05-23 20:16:53 438

原创 [BZOJ 3052][wc2013]糖果公园:树上带修改莫队

点击这里查看原题此题乃莫队系列问题的集大成者,既需要树上莫队,又需要修改,注意以下问题:因为带修改,块大小为n^(2/3)修改时必须严格按时间顺序,对于当前时间大于询问时间的,时间必须倒着遍历;小于的,时间必须正着遍历(没注意到这个问题所以WA了好几次)/*User:SmallLanguage:C++Problem No.:3052*/#include<bits/stdc++.h>

2017-05-23 17:54:51 625

原创 [BZOJ 3757]苹果树:树上莫队

点击这里查看原题建议先看这里的讲解 树上莫队大体思路就是把树分成块,区间与区间之间实现O(sqrt(n))的转换,然后当成莫队去做。/*User:SmallLanguage:C++Problem No.:BZOJ 3757*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace

2017-05-23 11:43:28 364

原创 [POJ 2187]Beauty Contest:旋转卡壳

点击这里查看原题旋转卡壳模板题,建议看这里的讲解旋转卡壳的代码只比凸包多几行,非常好写。/*User:SmallLanguage:C++Problem No.:2187*/#include<stdio.h>#include<iostream>#include<iomanip>#include<string.h>#include<algorithm>#include<queue>

2017-05-17 14:35:15 306

原创 [POJ 1279]Art Gallery:半平面交

点击这里查看原题半平面交模板题,这个讲解挺好的,http://blog.csdn.net/accry/article/details/6070621/*User:SmallLanguage:C++Problem No.:1279*/#include<stdio.h>#include<iostream>#include<iomanip>#include<string.h>#inclu

2017-05-17 14:28:07 389

原创 [BZOJ 1336/1337][Balkan2002]Alien最小圆覆盖:随机增量法

点击这里查看原题随机增量法的思路: A:如果遇到某个点i在圆外,那么扩圆后这个点一定在圆上。 B:进行扩圆,如果有之前的点j在当前的圆外,那么i,j一定都在圆上,以i,j两点的连线作为圆的直径。 C:继续检查,如果有j之前的点k在圆外,那么i,j,k三个点一定都在圆上,于是做出三角形ijk的最小覆盖圆/*User:SmallLanguage:C++Problem No.:1336*/

2017-05-10 15:17:30 352

原创 [BZOJ 4584][Apio2016]赛艇:DP+组合数

点击这里查看原题f[i][j]表示前i个学校中,第i个学校出j个船的方案数,于是f[i][j]=sigma{f[i’][j’]}(i’ < i , j’ < j ) 但是这样会时间空间双LE,因此需要优化。 考虑到n只有500,因此可以对区间进行离散化,把左闭右闭区间换成左闭右开区间,然后f[i][j]表示第i个学校出的船的数量在区间j的方案数。 此时,状态转移分为两个部分: 小于区间j的,

2017-05-09 17:52:52 395

原创 [BZOJ 2002][Hnoi2010]Bounce 弹飞绵羊:分块|LCT

点击这里查看原题分块思路:记录在块内需要跳几次进入别的块以及进入别的块的位置。/*User:SmallLanguage:C++Problem No.:2002*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=2e5+5;int n,m,

2017-05-09 14:58:49 330

原创 [BZOJ 3624][Apio2008]免费道路:最小生成树

点击这里查看原题由题目要求可知,最终得到的图是一棵树。因为要求类型为0的边恰好有k条,所以先对类型为1的边做生成树,再对类型为0的边做,得到必须有的0边。将这些0边加入,然后优先做类型为0的边,再做类型为1的边即可/*User:SmallLanguage:C++Problem No.:3624*/#include<bits/stdc++.h>#define ll long long#d

2017-05-08 14:11:26 382

原创 [BZOJ 4883][Lydsy2017年5月月赛]棋盘上的守卫:最小生成树

点击这里查看原题对于每个点,可以选择守横向或者守纵向。每行为一个点,每列为一个点,于是对于w[i][j],在i与j+n之间连一条权值为w[i][j]的边,然后去求带一个环的最小生成树,这样刚好有n+m条边,而且每条边都连了一个横行和一个纵行,也就是每条边代表了一个守卫。/*User:SmallLanguage:C++Problem No.:4883*/#include<bits/stdc+

2017-05-06 14:24:28 1046

原创 [BZOJ 4879][Lydsy2017年5月月赛]失控的数位板:模拟

点击这里查看原题其实思路不难,对于每个点分三种情况。没走过这个点,但却有颜色,无解走过这个点,有颜色,那么最早时刻在最后一次经过该点之后走过这个点,没有颜色,那么最晚时刻在最后一次经过该点之前于是,将所有点加入set,倒序模拟一遍,依次删除所有走过的点,同时更新答案即可/*User:SmallLanguage:C++Problem No.:4879*/#include<bits/s

2017-05-06 09:36:29 937

原创 [BZOJ 2811][Apio2012]Guard:贪心+二分

点击这里查看原题思路比较复杂,细节也很多,具体的讲解写在代码的注释里好了/*User:SmallLanguage:C++Problem No.:2811*/#include<bits/stdc++.h>#define ll long long#define inf 999999999#define pii pair<int,int>#define mp make_pairusin

2017-05-05 08:31:56 444 1

原创 [BZOJ 2809][Apio2012]dispatching:可持久化线段树|可并堆

点击这里查看原题对于每个忍者被作为管理者的情况,我们需要知道这个忍者管理的忍者中最多能选多少忍者,而要使选的忍者尽可能多,就需要从薪水最低的忍者开始选。 于是可以建立一颗权值线段树,按DFS序将忍者的薪水依次加入,每次求总薪水小于等于k可以选多少忍者。 注意long long,因为这个WA了好几次/*User:SmallLanguage:C++Problem No.:2809*/#in

2017-05-04 14:33:08 397

原创 [BZOJ 2304][Apio2011]寻路:SPFA

点击这里查看原题首先可以想到这题求最短路,那肯定是SPFA(没有负权边,Dijkstra当然也可以啦),难点在于如何构图。 将坐标离散化,然后将矩形的边和顶点分别做不同的标记。从每个矩形的四个顶点出发,将到达的第一个有标记的点(也就是其他矩形上的点)标记为mark[i][j]=1。 将所有mark[i][j]=1或是矩形的四个顶点的点加入,在同一行或同一列的点之间连边,然后做SPFA即可。 因

2017-05-04 10:17:02 469

原创 [BZOJ 2303][Apio2011]方格染色:并查集

点击这里查看原题黄学长的题解没完全看懂,留坑待填 http://hzwer.com/6678.html/*User:SmallLanguage:C++Problem No.:2303*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e

2017-05-03 17:46:58 614

原创 [BZOJ 1913][Apio2010]signaling 信号覆盖:计算几何

点击这里查看原题思维好题,具体还是看http://blog.csdn.net/qpswwww/article/details/45334033的吧/*User:SmallLanguage:C++Problem No.:1913*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespac

2017-05-03 15:30:26 421

原创 [BZOJ 1912][Apio2010]patrol 巡逻:树的直径

点击这里查看原题这个题k只有两种情况,因此可以分类来考虑。 k=1时显然将树的直径两端连起来可以省下的路径最多。 k=2时,再建一条路一定会形成一个新的环,因为建的路必须走,所以环上每一条边都需要走一次。环上的是树的直径的边越多,则损失越大(因为重复走了),环上的不是树的直径的边越多,则节省的路径越多。因此需要将树的直径上的每一条边权变为-1,然后再做一次树的直径。/*User:SmallL

2017-05-03 13:52:49 553

原创 [HDU 5731]Solid Dominoes Tilings:状压DP+容斥原理

点击这里查看原题这题是POJ 2411的升级版。dp[i][j]表示长为i宽为j的方案数,打个表预处理一下。然后枚举列的切割方案,因为一共有m-1条竖线,因此有2^(m-1)种情况。cnt[i]表示按当前的列分割方案,宽为i的矩形的方案数,f[i]表示在当前列分割情况下,前i行的情况数,f[i]=cnt[i]-sigma{f[j]*cnt[i-j]}(0/*User:SmallLanguage:

2017-05-03 08:28:00 476

原创 [XDU 1203]Happy to Eliminate:状压DP

点击这里查看原题当时校赛的时候没做出来,现在才知道状压DP可以按格点转移。 按格点转移的状压DP可以先参考POJ 2411,这个题不同的地方是按2k进制压位,因为矩形的短边不会超过6,所以最大状态数为8^6,即2^18。对于每一位,如果值小于k,表示在这一列连续出现了1次,如果大于等于k,则表示在这一列连续出现了两次,放置的时候既要考虑横行也要考虑纵行。/*User:SmallLanguage

2017-05-02 20:38:09 477

原创 [BZOJ 1178][Apio2009]CONVENTION会议中心:贪心+倍增

点击这里查看原题第一问简单,贪心即可,难在第二问如何求字典序最小的。可以考虑,按字典序尝试所有区间,若加入该区间后总的区间数不变,则一定加入该区间,因此需要实现的就是logn查询区间内的区间数。 我们用getans函数来求区间内的区间数,如果要加入一个[l0,r0]的区间,那么需要满足getans(l,r)=getans(l,l0-1)+getans(r0+1,r)+1,其中l为之前加入的区间中小

2017-05-02 20:14:14 1222

原创 [HDU 2167]Pebbles:状压DP

点击这里查看原题比HDU1565更复杂的一道状压DP,需要多记录一位左上角的情况。每次换行的时候不需要考虑左上角,但是需要将每一位左移一位图转自http://blog.csdn.net/sf____/article/details/15026397 /*User:SmallLanguage:C++Problem No.:2167*/#include<bits/stdc++.h>#def

2017-05-02 14:58:27 437

原创 [HDU 1565]方格取数(1):状压DP

点击这里查看原题格点转移/*User:SmallLanguage:C++Problem No.:1565*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;int n,p,q,a[20][20];ll f[2][1<<20],ans;void solve(){

2017-05-02 11:13:48 566

原创 [POJ 2411]Mondriaan's Dream:状压DP

点击这里查看原题以往的做法是按行进行转移,需要预处理出各种状态间的转移。一种更快的做法是按格点进行转移,状态表示的是每个已被处理过的格点的下一行的状态。具体可以参考http://blog.csdn.net/sf____/article/details/15026397 /*User:SmallLanguage:C++Problem No.:2411*///#include<bits/st

2017-05-02 10:51:49 532

原创 [BZOJ 4606][Apio2008]DNA:数位DP

点击这里查看原题数位DP,最后一位一位输出即可/*User:SmallLanguage:C++Problem No.:4606*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=5e4+5;int n,m,a[M];ll f[M][5]

2017-05-02 08:15:18 426

原创 [BZOJ 1179][Apio2009]Atm:Tarjan+SPFA

点击这里查看原题先缩点,然后把负的点权当做边权,用SPFA求最短路(取反即为最长路),在所有有酒吧的点中取dis最大的点即为答案/*User:SmallLanguage:C++Problem No.:1179*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;co

2017-05-01 17:53:19 360

原创 [BZOJ 1177][Apio2009]Oil:DP

点击这里查看原题s[i][j]表示以(i,j)为右下角的正方形的面积 因为用两条直线可以把矩形分为三个部分且使三个正方形分别在三个矩形内,所以枚举每种分割情况,用分割后每块内的面积最大的正方形的值更新答案 具体分割情况如图: 1.可以通过两条互相垂直的线分成三块,如下图 2.可以通过两条平行的平行的线分成三块,如下图 /*User:SmallLanguage:C++Problem No

2017-05-01 16:36:25 448

原创 [BZOJ 1415][Noi2005]聪聪和可可:期望

点击这里查看原题点数为1000,因此可以使用n^2算法。p[i][j]表示聪聪在i,可可在j,聪聪下一步走的点。先从每个点出发做一次BFS,预处理出p数组。然后记忆化搜索,f[i][j]表示聪聪在i,可可在j,聪聪追上可可的期望步数,于是f[i][j]=sigma{f[i往j走两步到达的点][j或j临近的点]}/(reg[j]+1)+1/*User:SmallLanguage:C++Probl

2017-04-20 09:51:21 324

转载 [BZOJ 2318]Spoj4060 game with probability Problem:概率

点击这里查看原题还是看别人的题解吧,很简单易懂/*User:SmallLanguage:C++Problem No.:2318*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;int n;double p,q,f[1005],g[1005];void sol

2017-04-20 09:01:47 348

原创 [COGS 1489]玩纸牌:期望

点击这里查看原题f[i][j]表示玩i局赢j局的概率,则f[i][j]=f[i-1][j] * (1-p)+f[i-1][j-1] * p,于是对于每天而言,失败的概率q为f[n][i] (0<=i<=a*n/b)。 可以得到,第一天失败的概率为q,第二天失败的概率为(1-q) * q,第三天失败的概率为(1-q)^2 * q…… 因此,总的期望ex=q * 1+ (1-q) * q * 2+(

2017-04-19 19:25:13 442

原创 [COGS 1487]麻球繁衍:概率

点击这里查看原题f[i]表示一只毛球及其后代在前i天全死掉的概率,则f[i]=p[0]+p[1] * f[i-1]+p[2] * f[i-1]^2+p[3] * f[i-1]^3+…… 因为各个毛球间的生存概率相互独立,所以答案为f[m]^k。/*User:SmallLanguage:C++Problem No.:11021*/#include<bits/stdc++.h>#defin

2017-04-19 17:21:29 379

原创 [BZOJ 1426]收集邮票:期望DP

点击这里查看原题挺神奇的一道题,我自己没完全看懂题解,还是放别人的链接吧。这里/*User:SmallLanguage:C++Problem No.:1426*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;double f[10005],g[10005];i

2017-04-19 14:18:14 628

原创 [BZOJ 3450]Tyvj1952 Easy:期望DP

点击这里查看原题设l为当前期望长度,分为三种情况:当前位为‘x’,l清零当前位为‘o’,ans+=(l+1)^2-l^2,l++当前位为‘?’,那么l可能变成l+1,也可能变成0,因此l的期望变为(l+1)/2,ans+=(2l+1)/2。/*User:SmallLanguage:C++Problem No.:3450*/#include<bits/stdc++.h>#defin

2017-04-19 11:22:03 378

原创 [CF 417D]Cunning Gena:状压DP

点击这里查看原题先把每个人按k升序排序, f [ i ] 表示完成状态i的最小花费,计算出显示器数量分别为 k [ j ] 时 f [ ( 1 < < m ) - 1 ] 的最小值,ans = min { f [ ( 1 < < m ) - 1 ] + k [ j ] * b }。/*User:SmallLanguage:C++Problem No.:417D */#include<bit

2017-04-19 10:22:22 457

原创 [BZOJ 1231][Usaco2008 Nov]mixup2 混乱的奶牛:状压DP

点击这里查看原题f[i][j]表示状态为i,以奶牛j结尾的情况数/*User:SmallLanguage:C++Problem No.:1231*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=(1<<16)+5;int a[20],n

2017-04-19 09:06:44 366

原创 [BZOJ 2276][Poi2011]Temperature:单调队列

点击这里查看原题因为每加入一天都要确保该天的r值大于等于已选中天的l的最大值,因此维护l值的递减队列。/*User:SmallLanguage:C++Problem No.:2096*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e6

2017-04-18 19:28:27 602

空空如也

空空如也

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

TA关注的人

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