上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 109 下一页

2020年2月8日

细节模拟——cf1267L

摘要: 细节很多,改了好久。。 /* 按阶梯状贪心填入字符,当第k行被填满后,再去填其他空位 */ #include<bits/stdc++.h> using namespace std; #define N 2005 char s[N*N],t[N*N],ans[N][N]; int n,l,k,len; 阅读全文

posted @ 2020-02-08 19:03 zsben 阅读(178) 评论(0) 推荐(0)

构造,贪心,拓扑排序变形——cf1283F

摘要: /* 题意:一棵有根树,每个结点的权重为2^i,每条边的权重为其下子树结点的权重和 现在按边权降序排序,每条边记录高度大的那个点,得到一个长度为n-1的序列 根据这个序列构造出一棵合法的树 性质:(fa[fa[u]],fa[u])必排在(fa[u],u)前面 可以自底向上构造这棵树,先把叶子结点放进 阅读全文

posted @ 2020-02-08 17:24 zsben 阅读(225) 评论(0) 推荐(0)

2020年2月7日

01字典树逆应用+树上dp——cf1285D

摘要: 不知道为啥只开int会炸。。这题思维过程还是很有趣(痛苦)的 /* 01字典树求X异或最大值的策略就是X取反后去字典树里跑,跑到不能跑了就是答案 X在往01trie下搜时,如果碰到要去的地方是null,那么它只能朝另一个方向走, 同时最终异或起来的答案(即和X异或最大的那个值)损失了1<<(29-i 阅读全文

posted @ 2020-02-07 21:29 zsben 阅读(161) 评论(0) 推荐(0)

线段树维护区间合并——cf1285E

摘要: 感觉自己的解法又是歪的 代码写的很乱。。要先找出一开始有多少段,然后计算删掉每条线段的贡献,求个最大值就可以 删每条线段的贡献可以用线段树区间合并来做 ps:正解其实很简单。。扫描一下就可以了 /* 先把所有线段覆盖到线段树上 然后对每一个线段[L,R],查询区间[L,R]有多少值>1的段即可 */ 阅读全文

posted @ 2020-02-07 17:07 zsben 阅读(165) 评论(0) 推荐(0)

2020年2月6日

二分+暴力状压+桶——cf1288D

摘要: /* 二分bk,所有比bk大的数设置为1,比bk小的数设置为0 然后得到一个n*m的01矩阵,每行a的状态用s[i]表示,问题转换成判是否存在s[i]|s[j]=(1<<m)-1 再开一个flag[i]统计是否出现过状态i 然后暴力枚举是否存在这样的s[i]|s[j]=(1<<m)-1 */ #in 阅读全文

posted @ 2020-02-06 22:40 zsben 阅读(199) 评论(0) 推荐(0)

乱搞+虚假莫队?+树状数组——cf1288E

摘要: 感觉自己的解法有点歪 /* 每次把一个数提到最前面,问整个过程结束后1..n每个数出现最靠前的位置和最靠后的位置 最靠前:如果一个数被提前过,那么必然是1 如果从来没被提前过,就是其原来的位置 最靠后:维护数i每次被提前的时间序列time[i][] time[i][1]到time[i][2]之间出现 阅读全文

posted @ 2020-02-06 21:32 zsben 阅读(198) 评论(0) 推荐(0)

字符串+置换+莫队离线处理——cf1290B

摘要: /* 题意可以转化为通过s[l..r]构造出新的串t[l..r]和s不能约 t[l..r]的每个前缀,每个后缀的字符数量都必须和s[l..r]对应的前后缀字符数量不同 构造策略: 如果s[l]!=s[r]直接交换即可 否则找到s[i]!=s[j],swap(s[i],s[r]),swap(s[j], 阅读全文

posted @ 2020-02-06 19:41 zsben 阅读(193) 评论(0) 推荐(0)

2020年2月5日

扩展域并查集+图论——cf1290C 好题

摘要: 一道很好的题了,具体题解可以看b站的讲解。。 拆点的思想有一种2sat的感觉 /* 给定一组开关的集合,每个开关最多被两个集合包含,对集合操作一次则所有集合内的开关状态变化 现在要将前i个开关状态切换到开,问最少要操作几次集合,求出i从1到n的每个答案 一些性质:每个集合要么被操作一次,要么不被操作 阅读全文

posted @ 2020-02-05 23:16 zsben 阅读(173) 评论(0) 推荐(0)

换根dp+暴力+预处理+记忆化搜索——cf1292C好题!

摘要: /** 给定一棵树,要求给树边赋值[0,n-2],每个值只能使用一次 S = mex(u,v), mex(u,v)是u-v路径上没有出现过的编号最小的值 问使得S最大的赋值方式 由于很难直接统计答案,所以考虑统计每条边的贡献 包含(0)路径的贡献tot1是其左右子树size的乘积 包含(0,1)的路 阅读全文

posted @ 2020-02-05 15:54 zsben 阅读(166) 评论(0) 推荐(0)

线段树,思维——cf1295E

摘要: /* 给定一个数组,切割成pre,suf,现在要移动这两个集合中的元素,使 Max(pre)<Min(suf),且移动代价最小 对问题进行转化:移动后长度为len的pre,必定包含[1,len] 所以枚举移动前pre的长度,再考虑每个移动后pre长度的对应的代价 第二步可用线段树优化,每个结点维护移 阅读全文

posted @ 2020-02-05 10:23 zsben 阅读(135) 评论(0) 推荐(0)

上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 109 下一页

导航