自定义博客皮肤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 2096][Poi2010]Pilots:单调队列

点击这里查看原题维护两个单调队列,一个递增,一个递减。/* User:Small Language:C++ Problem No.:2096 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=3e6+5; int lx,rx,mx[M],mn[M

2017-04-18 17:34:52 394

原创 [BZOJ 4008][HNOI2015]亚瑟王:期望DP

点击这里查看原题f[i][j]表示第i张卡在第j回合被轮到(但不一定发动)的概率。 f[i][j]= f[i-1][j] * ( 1-p[i-1] ) ^ j + f[i-1][j+1] * ( 1- ( 1-p[i-1] ) ^ ( j+1 ) ) ,ans+=f[i][j] * ( 1 - ( 1 - p[i] ) ^ j ) * d[i]。/* User:Small Language:C++

2017-04-18 16:21:05 380

原创 [BZOJ 3036]绿豆蛙的归宿:期望DP

点击这里查看原题f[i]表示从i到N的期望,因此f[i]为i能到的各个点的期望+边权的和除k。/* User:Small Language:C++ Problem No.:3036 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=1e5+5;

2017-04-18 15:43:18 356

原创 [BZOJ 3029]守卫者的挑战:期望DP

点击这里查看原题f[i][j][k]表示前i个挑战中挑战成功j次,目前背包容量-碎片数为k的概率。 直接开这么大的数组会MLE,因此需要使用滚动数组。/* User:Small Language:C++ Problem No.:3029 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using names

2017-04-18 14:27:04 385

原创 [BZOJ 1951][Sdoi2010]古代猪文:Lucas定理|中国剩余定理|费马小定理|扩展欧几里得

点击这里查看原题一道综合了各种数论的神题。其实不难,主要是需要组合在一起运用。 1.费马小定理:求G^P时使用,因为G^(mod-1)%mod=1,所以需要P%=mod-1 2.Lucas定理&中国剩余定理:计算组合数取模时使用,但是本题中mod-1不为素数,因此需要结合中国剩余定理使用(即扩展Lucas定理) 3.扩展欧几里得:中国剩余定理要求逆元/* User:Small Language

2017-04-18 10:29:50 402

原创 [BZOJ 4403]序列统计:Lucas定理

点击这里查看原题统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。 设M=R−L+1 长度为i,元素大小在1…M之间的单调不降序列的数量有C ( M−1 , i+M−1 ) 个 ,于是长度在1~N之间的数量有C ( M , N+M ) -1 个。 点击这里查看公式推导/* User:Small Language:C++ Problem No.:BZOJ 4403 */ #inc

2017-04-18 09:21:17 342

原创 [BZOJ 1207][HNOI2004]打鼹鼠:DP

点击这里查看原题类似于最长上升子序列,但是只有m^2做法,不过可以使用一个优化,用mx[i]表示前i项中最大的f[i]值,一旦mx[j]+1<=f[i]就break,实测优化前1920ms,优化后60ms。/* User:Small Language:C++ Problem No.:1207 */ #include<bits/stdc++.h> #define ll long long #defin

2017-04-17 21:51:56 323

原创 [BZOJ 1725][Usaco2006 Nov]Corn Fields牧场的安排:状压DP

点击这里查看原题用二进制串表示每一行的摆放情况,预处理出各个状态间的转移关系即可。 f[i][j]表示第i行按状态j摆放的方案数。/* User:Small Language:C++ Problem No.:1725 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std;

2017-04-17 21:18:07 375

原创 [BZOJ 2064]分裂:状压DP

点击这里查看原题状压DP,sum[i]表示状态i时的面积和,f[i]表示状态i时可以少操作的次数。 因为可以把所有块合成一大块然后分裂,所以操作最多不超过n+m-2次,而如果有某个子集中的块面积和为0,则可以少操作2次,因此最终答案为n+m-f[1<<(n+m)-1]。/* User:Small Language:C++ Problem No.:2064 */ #include<bits/stdc

2017-04-17 20:44:40 336

原创 [BZOJ 1076][SCOI2008]奖励关:状压DP

点击这里查看原题f[i][j]表示到第i次,吃完后状态为j的期望,则f[i][j]=上一步的期望+这一步的得分/n。 为了方便整理答案,使用倒推,答案即为f[1][0]。/* User:Small Language:C++ Problem No.:1076 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 u

2017-04-17 19:59:47 418

原创 [BZOJ 1087][SCOI2005]互不侵犯King:状态压缩DP

点击这里查看原题f[i][j][k]表示到第i行,摆放了j个国王且第i行摆法为k的方法数。 先预处理出所有摆法和摆法之间的转移关系,然后DP/* User:Small Language:C++ Problem No.:1087 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace

2017-04-17 17:54:27 327

原创 [BZOJ 2442][Usaco2011 Open]修剪草坪:单调队列

点击这里查看原题f[i]表示不选i且前面的都合法的最小损失,f[i]=min{f[j]+e[i]}(i-j<=k)/* User:Small Language:C++ Problem No.:2442 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int

2017-04-17 15:54:31 385

原创 [BZOJ 1233][Usaco2009Open]干草堆tower:单调队列

点击这里查看原题f[i]表示i~n堆叠成的最底层边的最小值,f[i]=min { sum[j-1]-sum[i-1] } ( i < j 且 sum[j-1]-sum[i-1]>=f[j] ) 对于i < j < k,j一定比k更优,如果只能选k,则说明j不满足条件,k满足条件。即,f[j] - sum[j-1]>f[k] - sum[k-1] /* User:Small Language:C+

2017-04-17 15:18:24 480

原创 [BZOJ 1293][SCOI2009]生日礼物:单调队列

点击这里查看原题把所有珠子读进来,按位置排序,做单调队列。 讨论区有人说inf要设成2^31-1,于是就把ans设为了0x7fffffff。/* User:Small Language:C++ Problem No.:1293 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace

2017-04-17 14:24:37 470

原创 [BZOJ 1657][Usaco2006 Mar]Mooo 奶牛的歌声:单调栈

点击这里查看原题做两次单调栈,栈里存序号/* User:Small Language:C++ Problem No.:1657 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=5e4+5; int n,h[M],c[M],ans,sum[M],

2017-04-17 11:10:58 500

原创 [BZOJ 1660][Usaco2006 Nov]Bad Hair Day 乱发节:单调栈

点击这里查看原题水题/* User:Small Language:C++ Problem No.:1660 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=8e4+5; int n,c[M],s[M],tp; ll ans; int main(

2017-04-17 10:55:09 573

原创 [BZOJ 1113][Poi2008]海报PLA:单调栈

点击这里查看原题/* User:Small Language:C++ Problem No.:1113 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=25e4+5; int t,x,ans,n,tp,s[M]; int main(){

2017-04-17 10:11:59 311

原创 [BZOJ 1345][Baltic2007]序列问题Sequence:单调栈

点击这里查看原题维护一个单调递减的栈,如果要加入的元素x大于栈顶元素s[top],分两种情况: 如果s[top-1]>x,ans+=x; 如果s[top-1]<=x,ans+=s[top-1]。/* User:Small Language:C++ Problem No.:1345 */ #include<bits/stdc++.h> #define ll long long #define in

2017-04-17 10:00:24 330

原创 [BZOJ 3039]玉蟾宫:单调栈

点击这里查看原题单调栈模板题,注意答案要乘3。/* User:Small Language:C++ Problem No.:3039 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=1e3+5; int a[M][M],s[M],l[M],tp

2017-04-17 09:39:27 406

原创 [BZOJ 1007][HNOI2008]水平可见直线:单调栈

点击这里查看原题最终得到的一定是一个下凸壳,因此把所有直线以k升序为第一关键字,b降序为第二关键字进行排序。若当前直线能完全覆盖栈顶直线,即i与s[top]的交点在s[top]与s[top-1]的交点左侧,则将栈顶元素弹出。/* User:Small Language:C++ Problem No.:1007 */ #include<bits/stdc++.h> #define ll long lo

2017-04-17 08:09:15 313

原创 [BZOJ 4813][Cqoi2017]小Q的棋盘:TreeDP

点击这里查看原题简单的TreeDP。f[i][j][0]表示从i点出发走j步不需要回到起点的最大点数,f[i][j][1]表示需要回到起点的最大点数。/* User:Small Language:C++ Problem No.:4813 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namesp

2017-04-15 11:41:49 677 2

原创 [BZOJ 2875][Noi2012]随机数生成器:矩阵乘法+快速乘

点击这里查看原题其实是个水题,坑点在于两个long long直接相乘会爆。long long的上限大概是2*1e18,而题目所给的数据不会超过1e18,因此可以使用快速乘。/* User:Small Language:C++ Problem No.:2875 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 u

2017-04-15 09:34:43 384

原创 [BZOJ 2818]Gcd:莫比乌斯反演

点击这里查看原题先跑一遍线性素数筛,然后枚举每个小于n的素数,求gcd(x,y)为素数的对数即为求gcd(x/prime[i],y/prime[i])=1的对数,因此对于用n去除得到的每个素数。 剩下的部分类似于HDU 2841/* User:Small Language:C++ Problem No.:2818 */ #include<bits/stdc++.h> #define ll long

2017-04-15 08:29:37 716

原创 [BZOJ 2729][HNOI2012]排队:高精度+组合数

点击这里查看原题组合数问题,需要用到高精度。 把男生和老师混在一起,中间插入女生。两个老师刚好连在一起的情况为 A ( n+1 , n+1 ) * A ( 2 , 2 ) 这种情况下两个老师间必须插入女生,于是将两个老师和一个女生捆绑在一起,情况为 m * A ( n+1 , n+1 ) * A ( 2 , 2 ) 然后将剩余女生插入,情况为 A ( n+2 , m-1 ) 两个

2017-04-14 20:14:56 597

原创 [BZOJ 3669][Noi2014]魔法森林:SPFA

点击这里查看原题把所有边以a为第一关键字,b为第二关键字进行排序,依次加边,每加一条边做一次SPFA,看能否缩小答案。/* User:Small Language:C++ Problem No.:3669 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const i

2017-04-14 10:57:31 426

原创 [BZOJ 4197][Noi2015]寿司晚宴:状压DP

点击这里查看原题因为小于sqrt(500)的素数只有8个,而一个数大于sqrt(500)的素因子最多只有一个,因此可以将所有数分类,用一个二进制的8位数表示出现了哪些素因子,kind表示这个数的大于sqrt(500)的素因子,若不存在,则kind=1。将所有数按kind排序。 进行状压DP,f[i][j]表示1采用i方案,2采用j方案的方法数;p[i][j][k]表示该第i个人操作,1采用i方案,

2017-04-13 16:14:59 292

原创 [BZOJ 3240][Noi2013]矩阵游戏:逆元+递推

点击这里查看原题这个题需要一步一步推算: f[1][1]=1 f[1][m]=a ^ (m-1) * f[1][1]+b * (a ^ (n-1)-1) / (a-1) f[2][1]=f[1][m] * c+d=c * a^(m-1) * f[1][1]+b * c * (a ^ (n-1)-1) / (a-1) + d 设e=a ^ (m-1) * c,g=b * c * (a

2017-04-13 15:02:51 369

原创 [BZOJ 3671][Noi2014]随机数生成器:贪心

点击这里查看原题很显然,贪心的去想,要使字典序最小,那么每次应从可以取的数中取最小的数,然后取完对左下和右上的部分标记,因为每个点只会被标记一次(遇到标记过的点就break),所以复杂度O(nm)/* User:Small Language:C++ Problem No.:6 */ #include<bits/stdc++.h> #define ll long long #define inf 99

2017-04-13 10:27:43 428

原创 [HDU 1226]超级密码:BFS

点击这里查看原题n只有5000,设vis[i]表示模n为i的最小的c进制数(在代码里,vis[i]表示模n为i的数是否已出现),可以用BFS来求解,若位数大于500或该余数已出现过,则不再加入队列,找出最小的模n为0的数即为答案。/* User:Small Language:C++ Problem No.:1226 */ #include<bits/stdc++.h> #define ll long

2017-04-12 21:54:49 298

原创 [HDU 5371]Hotaru's problem:Manacher

点击这里查看原题先做一遍Manacher求出每个位置的回文串长度,然后暴力枚举第二个串的位置,为了优化,只找比答案更优的。/* User:Small Language:C++ Problem No.:5371 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const

2017-04-12 20:57:17 371

原创 [HDU 4739]Zhuge Liang's Mines:状压DP

点击这里查看原题题目中只有20个点,因此可以枚举每种选点方案,然后进行状态压缩DP。f[i]=max(f[i],f[i^t]+4) (我因为判断函数写错,WA了好几次)/* User:Small Language:C++ Problem No.:4739 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 us

2017-04-12 20:00:29 409

原创 [HDU 5950]Recursive sequence:矩阵乘法

点击这里查看原题问题实际上为求f(n) = f(n−1)+2f∗(n−2)+n^4,其中 f(1)=a,f(2)=b。那么 (n+1)^4 = n^4+4n^3+6n^2+4n+1 所以光 (n+1)^4 这个矩阵就能构造出 5∗5 的一个矩阵来, 然后 f(n) = f(n−1)+2∗f(n−2) 这个是 2∗2 的矩阵,所以构造出来就应该是 7∗7 的转移矩阵 A : {f[i-1],f[i-

2017-04-12 17:58:32 326

原创 [HDU 2841]Visible Trees:容斥原理

点击这里查看原题一个点能被看见的条件是gcd(x,y)=1,因此,问题转化为n,m范围内有多少数对的gcd为1。 可以运用容斥原理,先求一个莫比乌斯函数,然后计算每一行的合法的数目。/* User:Small Language:C++ Problem No.:5475 */ #include<bits/stdc++.h> #define ll long long #define inf 99999

2017-04-12 16:57:50 460

原创 [HDU 5441]Travel:并查集

点击这里查看原题离线处理,将所有边和询问读入后按x排序,从小到大加边,若不在同一个联通块内则ans加上两个联通块合并后的答案,减去原来的两个块的答案。/* User:Small Language:C++ Problem No.:5441 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namesp

2017-04-12 14:43:50 295

原创 [HDU 4864]Task:贪心

点击这里查看原题将所有机器和任务按x由大到小排序,若x相同则按y由大到小排序。 对每个任务,从所有时间大于等于它的机器中选择能力最小的去执行这个任务。/* User:Small Language:C++ Problem No.:4864 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using names

2017-04-12 11:53:27 260

原创 [HDU 5923]Prediction:并查集

点击这里查看原题考虑到n很小,对于树上每个点,选择它便会同时选择它的所有祖先,因此可以对每个点维护一个并查集,询问时做并查集合并即可。 复杂度O(nm+nk)。 不知道为何,我的get函数不加inline就会TLE,加上立马就过了,因为这个问题调了好几个小时。/* User:Small Language:C++ Problem No.:5923 */ #include<bits/stdc++.h

2017-04-12 10:46:22 425

原创 [HDU 5710]Digit-Sum:其他

点击这里查看原题可以从*2后各位数和的变化来考虑,如果某一位≥5,那么 *2后必然会进位,于是本位-10,前一位+1,总共减少9,因此我们只需要考虑两个问题: 数字总和应该是多少? 应该有多少位>4? 其实这两个问题可以同时解决,设S(n)=x,则S(2n)=2x-9k,k为正整数,那么,(2b-a)/9b*x一定为正整数,因此,可以设c=2b-a,d=9b,求gcd(c,d),则S(n)=d/gc

2017-04-12 09:49:15 602

原创 [HDU 1796]How many integers can you find:容斥原理

点击这里查看原题典型的容斥原理,枚举所有取数情况求最小公倍数 有几个坑需要注意: 输入的数可能有0 所有数的最小公倍数可能会爆int /* User:Small Language:C++ Problem No.:1796 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std

2017-04-11 19:32:00 270

原创 [HDU 4135]Co-prime:容斥原理

点击这里查看原题问题可以转化成求[1,x]中与n互质的数的个数,则答案为cal(1,b)-cal(1,a-1),现在的问题就是如何去求cal(1,x) 这个需要用到容斥原理,对n进行质因数分解,然后减去[1,x]中有含有一个质因数的数的个数,加上含有两个质因数的数的个数,减去三个……,以此类推,得到答案/* User:Small Language:C++ Problem No.:4135 */ #

2017-04-11 19:12:31 416

原创 [HDU 5213]Lucky:莫队+容斥原理

点击这里查看原题莫队好题,用F(l1,r1,l2,r2)表示答案,则根据容斥原理,减去两个数均在[r1+1,r2]内的情况,减去两个数均在[l1,l2-1]内的情况,再加上两个数均在[r1+1,l2-1]内的情况即为答案: F(l1,r1,l2,r2)=f(l1,r2)-f(r1+1,r2)-f(l1,l2-1)+f(r1+1,l2-1) 于是把每个询问分成4个区间进行莫队/* User:Sma

2017-04-11 17:26:38 304

空空如也

空空如也

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

TA关注的人

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