09 2019 档案

AC自动机处理多串匹配——cf1202E
摘要:si+sj中间有一个切割点,我们在t上枚举这个切割点i,即以t[i]作为最后一个字符时求有多少si可以匹配,以t[i+1]作为第一个字符时有多少sj可以匹配 那么对s串正着建一个ac自动机,反着建一个自动机,然后t正反各匹配一次,用sum[]数组记录t[i]作为最后一个字符可以匹配的串数量 注意:求 阅读全文

posted @ 2019-09-14 11:20 zsben 阅读(253) 评论(0) 推荐(0) 编辑

二维差分前缀和——cf1202D(好题)
摘要:直接枚举每个点作为左上角是可以做的,但是写起来较麻烦 有一种较为简单的做法是对一列或一行统计贡献 比如某一行的B存在的区间是L,R那么就有三种情况 1.没有这样的区间,即一行都是W,此时这行对答案的贡献一直是1 2.R-L+1<=k,那么这一段必须要找一个点代表的矩形来覆盖,可以求出这样的点的存在区 阅读全文

posted @ 2019-09-13 23:52 zsben 阅读(253) 评论(0) 推荐(0) 编辑

序列递推——cf1204E(好题)
摘要:/* 显然用dp[i][j]来表示i个1,j个-1的结果 dp[i][j]由dp[i-1][j]和dp[i][j-1]转移而来 即dp[i][j]对应的所有序列,都可以由dp[i-1][j]在前面加一个1或dp[i][j-1]在前面加一个-1得到, 这里加在前面是因为更容易统计 考虑1加在前面,那么对于任意一种(i-1,j)的排列,贡献都+1,C(i-1+j,j) 考虑-1加在前面,那么对于某些( 阅读全文

posted @ 2019-09-13 18:44 zsben 阅读(197) 评论(0) 推荐(0) 编辑

建模+线性dp——cf1201D
摘要:这类题目要首先把模型建立起来,挑选一个好的状态能让dp方程简化很多 阅读全文

posted @ 2019-09-13 14:50 zsben 阅读(272) 评论(0) 推荐(0) 编辑

暴力——cf1202C
摘要:直接去考虑细节很多,不如暴力做 即在四个方向到达最远前向反方向走一步,答案肯定是从这四种情况+不多走里出的 阅读全文

posted @ 2019-09-13 00:22 zsben 阅读(190) 评论(0) 推荐(0) 编辑

经典排序背包——cf1203F
摘要:先把收益为正数的处理掉:策略是挨个扫,扫n遍,碰到能买的就买,然后可以得到一个更新后的r 剩下的就看做是一个背包模型:物品(a,b)表示当背包体积>a时才能装下体积为b的该物品,问最多装几个 无序枚举所有物品显然错误,要选择先买哪个更优 对于两个物品(ai,bi),(aj,bj),有两种顺序 先买i 阅读全文

posted @ 2019-09-12 21:49 zsben 阅读(362) 评论(0) 推荐(0) 编辑

思维+贪心——cf1042D
摘要:/* 首先考虑从后往前计算lis,显然0的在很多情况下的贡献要大于1 如果遇上0,那么lis++,如果遇上1,那么cnt1++,并且用cnt1更新lis 这样的贪心保证正确,因为从[i,j]这一段的lis必定是前一段0,后一段1这样的构成,当前面多了个0时,显然lis+1 当前面多了个1时当且仅当区间1的个数大于lis,才能让lis+1, 因此当且仅当后缀[i,n]中1的个数大于lis时,对于所有 阅读全文

posted @ 2019-09-12 17:18 zsben 阅读(176) 评论(0) 推荐(0) 编辑

分块——cf1207F
摘要:这么傻逼的题当时想了那么久 用a数组维护原序列,b[i][j]表示 pos%i=j 的 a[pos]之和 对于每个修改1 x y,先直接修改a[x],然后枚举i=1..700,修改b[i][x%i] 对于每个查询2 x y,如果x>700,那么我们直接去a数组里枚举i=kx+y, 如果x<700,b 阅读全文

posted @ 2019-09-12 13:41 zsben 阅读(164) 评论(0) 推荐(0) 编辑

线段树双tag+差分数组——cf1208E
摘要:写了一上午 阅读全文

posted @ 2019-09-12 11:58 zsben 阅读(211) 评论(0) 推荐(0) 编辑

构造——cf1213E
摘要:分情况讨论,构造很简单 阅读全文

posted @ 2019-09-12 00:18 zsben 阅读(181) 评论(0) 推荐(0) 编辑

排序+并查集——cf1213F
摘要:/* 有向边(pi,pi+1),形成链后进行dfs,求出dfs序 一个联通块内的元素必须是同一个字符,如果最后的联通块个数 using namespace std; #define N 200005 int n,k,p[N],q[N]; int rk1[N],rk2[N]; struct Node{int id,rk;}a[N],b[N]; int cmp1(Node a,Node b){... 阅读全文

posted @ 2019-09-11 21:23 zsben 阅读(235) 评论(0) 推荐(0) 编辑

离线+生成树+并查集——cf1213G
摘要:#include using namespace std; #define N 200005 #define ll long long struct Edge{int u,v,w;}e[N]; struct Query{int id,qq;}qq[N]; int n,q; ll ans[N],sum; bool operator>n>>q; for(int i=1;i=e[p].w &... 阅读全文

posted @ 2019-09-11 18:32 zsben 阅读(181) 评论(0) 推荐(0) 编辑

分治维护dp——19南昌网络赛C/cf750E
摘要:南昌网络赛,是cf的原题 第一次做到这种题,所以认真想了下,每次给一个询问[L,R],要求出这个区间里有2017子序列,但是不能有2016子序列需要删掉的最少元素个数 首先如果我们之询问一小段区间[L,R]那么显然有一个简单的三维dp可以做,状态0|1|2|3|4表示关键字一个也没有,有2,有21, 阅读全文

posted @ 2019-09-08 23:05 zsben 阅读(236) 评论(0) 推荐(0) 编辑

线段树区间合并——cf1217E
摘要:/* 定义:多重集s的元素和是sum,对于sum的第i位为x,如果s里找不到第i位也是x的元素,那么称这个多重集为bad, 现在给定一个 序列a 两种操作 1 i x:将序列第i个元素改为x 2 l r: a[l..r]组成的多重集中,找一个和最小的bad子集,如果没有这样的子集,输出-1 如果集合中有两个数A,B在某一位都不为0,那么这个集合必定为bad,那么在区间[l..r]里找一个最小的ba 阅读全文

posted @ 2019-09-06 16:05 zsben 阅读(168) 评论(0) 推荐(0) 编辑

构造——cf1214E
摘要:首先定义三元组(2*i-1,2*i,d),将n个三元组按d降序排列,然后取每个三元组的2*i-1连在一起,构成一条长为n-1的链 然后降序枚举每个三元组,把对应的2*i在链上合法的位置接上, 能保证一定有解 阅读全文

posted @ 2019-09-05 18:40 zsben 阅读(249) 评论(0) 推荐(0) 编辑

网格图必经点+dfs——cf1214D
摘要:先正着走一次把所有可行路径标记出来,然后倒着走两条路径,一条是能向下就向下的路径,另一条能向右就向右。 如果这两条路径相交,那么(1,1)-(n,m)路径上比有个必经点,把这个必经点封上,答案是1,如果没有必经点答案是2,如果(1,1)-(n,m)不连通,答案是0 直接用递归dfs会爆栈。所以要用栈 阅读全文

posted @ 2019-09-04 23:22 zsben 阅读(270) 评论(0) 推荐(0) 编辑

cf期望概率专题
摘要:cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和 E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i-1)*ai,E[1-n]是可以递推的 #include<bits/stdc++.h> using 阅读全文

posted @ 2019-09-02 14:51 zsben 阅读(472) 评论(0) 推荐(0) 编辑

中位数+暴力——cf433C
摘要:/* 中位数到所有数的距离之和最小 因为只能改一个数,所以我们找一个数,将其改为和其相邻的数的中位数,使答案最小 先求一次原答案 把每个数相邻的数用vector存下来,然后排序找中位数,计算减小的量 */ #include<bits/stdc++.h> #include<vector> using namespace std; #define ll long long #define N 2000 阅读全文

posted @ 2019-09-02 00:02 zsben 阅读(247) 评论(0) 推荐(0) 编辑

前缀和+排序——cf1043E
摘要:先不考虑第二个条件 要求i和所有其他人的分数和最小,选择x还是y,可以推出一个公式,即差xi-yi小的j都选y,反之都选x 那么按照xi-yi排序即可 然后再考虑第二个条件,做减法就行 阅读全文

posted @ 2019-09-01 10:49 zsben 阅读(278) 评论(0) 推荐(0) 编辑

导航

统计

点击右上角即可分享
微信分享提示