自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 2185 Milking Grid 二维KMP

点击打开链接题意:R*C字符矩阵,R若为一维,则相当于用kmp求出最小循环节(只要求覆盖,len%(len-next[len])可以不为0)先对每行求最小循环节xi,子矩形的宽度最小为:xi(i=1~r)的最小公倍数lr.在对每列求最小循环节yi 子矩形的高度最小为:yi(i=1~c)的最小公倍数lc.以lr*lc子矩阵为单位显然能覆盖整个字符矩阵#include #

2017-05-30 03:43:40 404

原创 概率DP专题 (更新中)

点击打开链接题意:n设dp[i][j]第i个人赢j轮的概率 dp[i][j]+=dp[i][j-1]*dp[k][j-1]*p[i][k]  k范围? 利用位运算来推导:2^n个人对应一棵二叉树,从下数第j层代表轮数,若第i个人在第j层的左子树中 则j层的右子树结点都可以在第j轮作为i的对手找到规律 i>>(j-1)^1==k>>(j-1)  i,k表示第j层中的左右子树的中某

2017-05-28 20:42:41 371

原创 POJ 2112 Optimal Milking 二分+最大流

点击打开链接题意:c头牛 k台机器 每台机器可以装m只牛,知道任意的牛-机器,机器-机器,牛-牛的距离c建图:源点到牛:容量为1,费用为0.牛到机器容量为1,费用为最短距离.机器到汇点容量为m,费用为0.则把c头牛装到k台机器的最小花费为:流量为c的最小费用流 现在要求的是:最长路径最短,二分答案x,建图时忽略花费>x的路径,判断最大流是否能到达n即可. #includ

2017-05-28 00:29:37 349

原创 AGC 015C Nuske vs Phantom Thnook 思维+二维前缀和

点击打开链接题意:n*m矩阵,n,mq个询问,q同一个连通分量中任意两点只有一条路径,于是对相邻的每个1连接一条边,每一个连通分量显然都为一颗树若子矩形有k个联通分量,因为每个联通分量都为树,则子矩形中点数-边数等于k 利用二维前缀和求出子矩形1的个数(点)和相邻1(边)个数即可 复杂度O(mn+q)#include using namespace std;co

2017-05-27 23:07:52 554

原创 POJ 2135 Farm Tour 最小费用流

点击打开链接题意:n个点,m条边,n贪心:从1到n找最短路在把路径反向 在从n到1找最短路,非常容易举出反例(样例即可)该贪心是错误的.因为边为无向边 所以可以转换成求出两条1~n的路径 并且这两条路径无公共边 路径之和最短建图:每条边流量为1,费用为长度.上面问题就等价于,求从1~n流量为2的最小费用流 #include #include #include #i

2017-05-26 17:06:12 334

原创 POJ 2155 Matrix 二维树状数组

点击打开链接题意:n*n矩形 初始元素全部为0 有m个操作,操作1:把某个子矩形内元素反转.操作2:询问某个元素的值 n如果一维的n个元素 反转某个区间 可以直接用一维树状数组暴力修改 f(x,y,c)前x行中的前y列修改成c,修改子矩形等价于操作:f(x2,y2,1)+f(x2,y1-1,-1)+f(x1-1,y2,-1)+f(x1-1,y1-1,1)则利用二维的树状数组 更

2017-05-24 10:56:45 307

原创 Codeforecs 808E Selling Sovenirs 枚举+DP(超大背包)

点击打开链接题意:n件物品,背包容量为m,n,m超大背包,但每件wi若只枚举体积为3选了x个  则只要知道体积m-3x,只包含体积1,2的最大价值 用dp处理即可dp[i] 容量为i时,最大价值为val,体积为1,2的分别选了cnt1,cnt2个 决策为选体积1或者体积2或则不选#include using namespace std;typedef lon

2017-05-23 17:15:41 526

原创 POJ 2195 Going Home 最小费用最大流(模板题)

以下来自点击打开链接最小费用最大流    通过EK,Dinic,ISAP算法可以得到网络流图中的最大流,一个网络流图中最大流的流量max_flow是唯一的,但是达到最大流量max_flow时每条边上的流量分配f是不唯一的。     如果给网络流图中的每条边都设置一个费用cost,表示单位流量流经该边时会导致花费cost。那么在这些流量均为max_flow的流量分配f中,

2017-05-23 12:17:54 698

原创 ARC 074F Lotus Leaves 最大流最小割

点击打开链接题意:n*m地图 n,m先把图变为二分图,每行每列加上源点和汇点,两边点分别为1~n,1~m对叶子'o'(x,y):x-y连接一条边 表示第x行的叶子可以跳到第y列 流量为1:表示删除(x,y)这一个点 加上边 S->SX S-SY TX->T,TY->T 容量为inf 不能删除答案显然为最大流 否则s->t存在增广路径 现在只要求出从S->T的最大流即

2017-05-22 16:15:04 503

原创 POJ 1273 Drainage Dithches 最大流(EK,模板题)

点击打开链接题意:n点m条边,每条边有容量ci 问从s->t的最大流?f(u,v)f(u,v)=-f(v,u)=val 从u流val到v 等价于于 从v流-val到u (两者都使得v增加val,u减小val) ,或者说u->v流量的减小等价于v->u流量的增加关于f的残余网络Gf: 其容量c'(u,v)=c(u,v)-f(u,v)   表示该弧还可以增加的流量 

2017-05-22 11:44:17 286

原创 Codeforces 810C Do you want a date 枚举

点击打开链接题意:n个数,n//sort后 枚举最小值为i,则ans+=(a[j]-a[i])*2^(j-i-1) (j=i+1~n) //化解:一个数a[i]总共减了:a[i]*(2^0~2^(n-i-1)) 加了a[i]*(2^0+~2^(i-2)) #include using namespace std;typedef long long ll;con

2017-05-21 17:20:37 576

原创 ARC 074E RGB Sequence DP

点击打开链接题意:n件物品,m个要求,3种颜色,n,mdp[r][g][b] 前k个块中,k=max(r,g,b),最后一个上红色,绿色,蓝色的位置分别为r,g,b &&满足ri若当前状态合法,则枚举下一个位置的颜色,转移状态.非法的状态dp值设为0, #include using namespace std;typedef long long ll;typedef pa

2017-05-21 16:43:54 792

原创 POJ 2187 Beauty Contest 最远点对(旋转卡壳)

点击打开链接旋转卡壳题意:平面上n个点,n直接枚举Tle,显然距离最大的两点 肯定为 n个点集所构成的凸包的顶点.(凸包的顶点 相对于n减少很多 但最坏情况还是O(n^2))旋转卡壳: 凸包上A距离C最远,则A距离边BC或者边CD肯定也是最远的,则枚举凸包上每一条边 找到距离该边最远的点注意到当我们逆时针枚举边的时候,最远点的变化也是逆时针的,这样就可以不用从头计算最远

2017-05-20 16:58:53 343

原创 POJ 2186 Popular Cows 强连通分量(Kosaraju)

点击打开链接题意:n个点m条边的有向图,n,m直接暴力 从每个点出发 更新每个点的到达次数 最坏为O(NM) TLE如果A为合法 B也为合法 则A,B显然能互相到达 即A,B在同一个强联通分量中如果某个强连通分量中存在点A合法 则显然该强连通分量内所有的点也都合法.则分解出强联通分量 缩点后 变为DAG 显然只要判断所有点是否能到达,拓扑序中最后一个强联通分量上即可

2017-05-19 12:12:31 320

原创 HDU 4701 Game 递推+博弈

点击打开链接题意:n个物品,每个价值c[i],两人分别有A,B元,每次轮流购买>=1件物品,规则:购买第i(i>1)件时,i-1件必须被购买,不能购买算输n首先:如果Alice有x元就能必胜,则有y(y>x)元肯定也能获胜则设计状态d[i] 在买第i件物品前 必胜所需要的最小价钱sum[i] 为前i件物品之和 ,若第i件先手时有d[i]元,则对手的钱为y:A+B=y+d[i]+

2017-05-18 20:36:03 358

原创 Codeforces 103D Time to Raid Cowavans 分块思想

点击打开链接题意:n个数a[i],m次询问n,m直接模拟显然是TLE,由于当y很大时,例如y>=sqrt(n) 模拟一次最坏为O(sqrt(n)) 所以y>=sqrt(n) 直接暴力,这部分为O(nsqrt(n)) 当y  #include using namespace std;typedef long long ll;const ll mod=1e9+7;con

2017-05-18 18:42:49 363

原创 数位DP专题

专题链接链接有关数位统计问题,无法暴力求解 则在数位上进行递推 [n,m]=[0,m]-[0,n-1] 统计小于对于任意一个则可以从高位到低位枚举 第一次HDU 2089 不要62 (入门)题意:非法数字为含4或者62的数字,问[n,m]区间内有多少个合法数字,n,mdp[i][0/1] //当前为第i位,前一位是否为6 枚举每一位 合法转移状态即可

2017-05-18 10:46:34 351

原创 Codeforces 803F Coprime Subsequences DP+GCD

点击打开链接题意:n个数a[i],问有多少个子序列的gcd为1? (子序列下标不同就算不同) n,a[i]令dp[i]:gcd为i的子序列个数 i的倍数的子序列有2^c[i]-1个,这些子序列的gcd可能为(i,2i,3i...) 则gcd为i的子序列个数:dp[i]=2^(c[i])-dp[2i]-dp[3i]...#include using namespace st

2017-05-16 18:05:18 378

原创 Atcoder ABC 061D Score Attack 最长路+判环

点击打开链接题意:n点,m边的有向带权图,问从1出发到n的最大值为?,若可以无穷大 则输出infn,m求最长路-> 把带权的边变号,等价于求出最短路并判断是否有负环即可注意该图为有向图,n不一定在负环上,所以用bellmanford求出环上的点  或者 暴力:如果第n-1次的d[n] 不等于 第2*n次的d[n]则一定存在环 #include using namespace st

2017-05-16 14:38:18 464

原创 Codeforces 794C Naming Company 贪心

点击打开链接题意:两个人A,B都有string,长度为n,从A开始,每次轮流从中取出一个,A想让字典序小,B想让字典序尽量大,问最后组成长度为n的string?n/2轮,A肯定从前n/2小选,B肯定从前n/2大选情况1:如果a最小比b最大还小,则a肯定先用最小的占高位情况2:如果a最小比b最大还大,则a用最大的占领最低位,让前面尽量小#include using namesp

2017-05-13 20:03:49 597

原创 Codeforces 799D Field expansion 暴力

点击打开链接题意:给出长宽A:(a,b),B:(h,w)和n个数a[i] 所有数a,b由于选a[i]肯定是从大到小考虑 如果最后只剩下2,则直接分配2的个数即可,该操作复杂度为线性.则最坏情况变为log(3,1e5)=11,O(2^22)=4e6 暴力即可 #include using namespace std;typedef long long ll;cons

2017-05-13 16:34:31 511

原创 Codeforces 799C Fountains 枚举+二分

点击打开链接题意:n件物品,有金币C和砖石D n,c,d两件物品为CC,按花费排序,防止重复,则枚举两件中花费高的那一件p[x],于是剩下一件的选择范围限定在前[i-1]件内,剩下的钱c-p[x]递减,用一个游标pos(或者二分)记录最后一个小于c-p[x],并维护前缀min[i-1,pos]内最大能取到的价值即可#include using namespace std;t

2017-05-12 11:03:46 799 2

原创 Codeforces 797F Mice And Holes DP(单调队列优化)

点击打开链接题意:n个老鼠,m个洞,n,mj花费:|xi-pj|,问n只老鼠都跑到洞里的最小花费? 定义状态d[i][j]:前i个洞,装前j只老鼠的最小花费 ,sum[i][j]表示前j只老鼠进第i洞话费 首先排序后,最优的情况为:进一个洞的老鼠一定是连续的一批(不会出现a,c进洞i,b进洞i-1)->(明显a进洞i-1,b,c进洞i更优) 容易得到:靠右边的洞肯定让前j只中靠右边

2017-05-11 16:10:34 478

原创 Codeforces 807E Prairie Partition 贪心思维+二分

点击打开链接题意:给出n个数,n每条链为1...2^k-1 最多加上一个r,则m最大为1的出现次数 假设能分成m条链 && m判定当链数为x,即加r次数贪心:t从i=0开始,当2^i个数>x,则肯定要多出power[i]-x个R当2^i个数更新最大添加数(当前可添加R的链数x)x=power[i]即可 #include using name

2017-05-10 13:21:33 586

原创 SPOJ HighWays 生成树计数 模板题(Matrix-Treed定理)

点击打开链接参考链接参考链接题意:给出n个点,m条边的无向图 n对于一个无向图G 它的生成树个数等于其Kirchhoff矩阵任何一个n-1阶主子式的行列式的绝对值Kirchhoff矩阵=度数矩阵-邻接矩阵 #include using namespace std;typedef long long ll;const int N=2e3+20;ll deg

2017-05-08 15:25:18 355

原创 Codeforces 768E Game of Stones 博弈SG(打表)

点击打开链接题意:n堆stone,每堆s[i]个 s[i]找到i个石头的SG值,同样i个,取的石头可能有不同的限制.设dp[i][j] i表示石子数量 j表示能取的状态的SG值 O(n*2^n*logn) 最终游戏要求的异或和为:dp[i][2^i-1](i=1~n)  打表找到dp[i](2^i-1)规律即可#include using namespace std;t

2017-05-08 11:45:15 403

原创 Codeforces 807C Success Rate 二分

点击打开链接题意:把分数x/y->p/q的最少操作次数,每次可以使y++,x++或者y++ x最后若可行肯定是kp/kq=p/q  如果k可行,则说明操作了k*q-y次判定:x的增加次数不能超过y  k*p-x y-x#include using namespace std;typedef long long ll;const int N=2e5+20;ll

2017-05-08 10:17:18 326

原创 Codeforces 805D Minimum number of stpes 规律

点击打开链接题意:给出string 只包含字符'a','b',长度简单观察  若有abbb ->bbabb bbbbbba a后面有多少个b该'ab'就变化多少次,并且b的个数增加为原先两倍.从后往前 碰到b累加,碰到a更新答案并把b的数量翻倍 #include using namespace std;typedef long long ll;const int N=

2017-05-05 08:35:24 428

原创 (ECPC 16) (6/11)

problem D(10) Popcorn n个物品取m个方法数C(n,m)#include using namespace std;typedef long long ll;const int N=2e3+20;int main(){ //freopen("popcorn.in","r",stdin); int t; cin>>t; while(t--) { in

2017-05-04 22:23:08 437

原创 Codeforces 746E Numbers Exchange 模拟

点击打开链接题意:n个数a[i],m个数1~m 问最少要多少次交换,使得数组a中odd个数等于even个数 && 所有数都不同,无解输出-1  记录odd个数,先去掉重复的元素 ans>=该步交换次数odd>n/2 找到m中下一个能交换的偶数   odd==n/2 则交换相同奇偶性即可odd此时,a中无重复元素  若oddn/2也一样 ,最后判断odd是否等于n/2即可 a

2017-05-02 20:04:48 404

原创 Codeforces 404C Restore Graph 构造

点击打开链接题意:给出n个点的最短距离数组d[i],每个顶点的度数先将距离d[i]排序,从小到大构造边 保存最短距离为x-1的点pre,把距离为x的连接到x-1上,每个pre[i]最多连接k次,更新pre即可 复杂度O(M)==1e6#include using namespace std;typedef pair ii;const int N=2e5+20;struct no

2017-05-02 17:59:37 386

原创 Codeforces 682D Alyona and Strings DP

点击打开链接题意:长度为n,m的string s,t 找到k个s,t的不相交公共子串 [p1~pk] 使得s=a1p1a2p2..akpkak+1 t=b1p1b2p2.bkpkbk+1,a,b为任意串.n,md[i][j][k]:长度为i,j的string k个sub长度之和的最大值,f[i][j]  以si,tj结尾的最长公共子串 类似LCS 对pk的最后一个字符进行讨论

2017-05-02 14:26:16 268

原创 Hackerrank Medium(50) Permutation Happiness 递推

点击打开链接题意:若有一个数它前面或者后面一个数比它大 则该数为happy,给出n,kdp[n][k] 排列1~n中 不开心的数有k个一个不开心的数两边都是开心的数,所以不会出现连续两个uphappy,1~n排列:1~n-1的排列中插入n,n是最大的 所以肯定unhappy 1~n-1排列总共有n位置插入,把n插入到unhappy 左边或者右边 unhappy个数不变(少了被插

2017-05-02 12:57:53 242

原创 HackerRank Medium(30) Maximal AND Subsequences 贪心+计数

点击打开链接题意:n选出k个并之和最大,贪心:从二进制高位开始考虑,当前位为i若n个数中第i位为1的数>=k,则最大值的第i位肯定为1,把第k位为0的数淘汰掉,使得剩下元素任选k个都能得到最大值 若n个数中第i位为1的数最后剩下n'个数,则从中任意选k个都可以得到最大值 方案为C(n',k) #include using namespace std;typedef lo

2017-05-01 17:01:02 306

原创 Codeforces 777E Hanoi Factory 贪心+DP

点击打开链接题意:naj,问能叠成的最大高度先按照b排序 设dp[i]为i在最上方时的最大高度,则只可能放在j(jn因为i>j>k 若i能放在j,k上 b[i]>a[j],b[i]>a[k]  b[j]>b[i]>a[k],j也一定能放在k上   若不考虑内径a这个条件,则dp[i]为前i个叠在一起,此时考虑内径a,最大方案为把(jb[i]的去掉 只要满足b[i]>a[j],剩

2017-05-01 11:35:31 412

空空如也

空空如也

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

TA关注的人

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