CodeForces练习计划

  • UPD1.0:2018.11.28
  • UPD2.0:2018.11.29
  • UPD3.0:2018.12.01

原则:有div1就做div1,否则div2,div3通常基本不做。


后期逐步更新,有空的话就写写每套我做了的题目大意和题解,会同步放到这里。尽量做到不咕咕咕


还需深入理解和有其它更优秀的做法还未写的题:

CFRD513:{

  • A:枚举用多少个8组成号码,剩下的数字看看除以10可不可以组成即可。
  • B:贪心,第一个选最大的999999…,另外一个选 n − n- n这个数即可。
  • C:枚举 H H H为矩阵有多高,选一个最小的 ∑ i = 1 n − H s u m a i { i ∼ i + H − 1 } \sum_{i=1}^{n-H}sum_{a_i}\{i\sim i+H-1\} i=1nHsumai{ii+H1},然后再扫一遍宽度即可,复杂度 O ( n m ) O(nm) O(nm)
  • D:摆放位置没有影响,所以将 L [ i ] , R [ i ] L[i],R[i] L[i],R[i]分别排序后,对于每一个选 m a x { L [ i ] , R [ i ] } max\{L[i],R[i]\} max{L[i],R[i]},最后答案为 n + ∑ i = 1 n m a x ( L [ i ] , R [ i ] ) n+\sum_{i=1}^n{max(L[i],R[i])} n+i=1nmax(L[i],R[i]),复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
  • E:可以发现每两个点的最短距离变为原来的二分之一向下取整,但是原长为 1 1 1的还是 1 1 1,所以先算总的除以二,再加上原长为1的即可,复杂度 O ( n ) O(n) O(n)
  • FGH:不会,QAQ

}

CFRD514 :{

  • A:模拟题意即可。
  • B: O ( n m ) O(nm) O(nm)扫一遍覆盖即可。
  • C:因为是全排列,贪心,每次删除剩余序列的奇数位置的数即可,因为每次可以删掉一半,复杂度 O ( n ) ∼ O ( n l o g n ) O(n)\sim O(nlogn) O(n)O(nlogn)
  • D:先判断有无解,二分半径r,然后每次 O ( n ) O(n) O(n)求距离x轴距离为r的那条线与所有点为圆心的半径r的在线段上的交集,有交集则可行,否则不可行,复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
  • E:按照bfs序,从叶子节点贪心往上合并即可。

}

CFRD516:{

  • D:分段求取做法,n小于2e6枚举答案,2e6的复杂度, n > 2 e 6 n>2e6 n>2e6枚举转了多少轮 k / n k/n k/n的复杂度。
  • E:置换贪心构造的方法,一开始对应就直接输出 n n n,否则一定可以构造到 n − 1 n-1 n1,随便舍弃一个,以那一个位置为置换的空位置换即可。
  • F:hash+暴力可以 O ( n n × h a s h ) O(n\sqrt{n}\times hash) O(nn ×hash)卡过去,因为答案不超过1000,正解为后缀数组或者sam求lcp,线段树维护,dp转移,复杂度 O ( n l o g n ) O(nlogn) O(nlogn),目前没写后面的这种做法【推荐大佬blog】。

}

CFRD517 :{

  • A:枚举能看的最大的页数,从后往前贪心枚举分配给第一天和第二天即可。
  • B:贪心+DP,维护尽量需要放‘a’少的路径
  • C:大区间每次贪心翻转3个,小区间二进制暴力枚举
  • D:预处理质数因子的幂的排列,并hash,flyod贪心跑最小操作次数,每次枚举将其变成因子的幂的情况。假如 v = ∏ p i a i v=\prod p_i^{a_i} v=piai,那么 v v v的因子个数为 ∏ ( a i + 1 ) \prod (a_i+1) (ai+1),所以只有因子的幂次数才影响因子个数。

}

CFRD518:{

  • A:设置 d p [ 0 / 1 / 2 ] [ i ] [ j ] dp[0/1/2][i][j] dp[0/1/2][i][j]表示当前在第 i i i个数字,值为 j j j,与前面一个相等,小于,大于的答案,转移用前缀和优化,复杂度为 200 × n 200\times n 200×n,发现等于的一维可以和大于或者小于的一维合并,再加滚动数组,可以优化到 d p [ 0 / 1 ] [ 0 / 1 ] [ j ] dp[0/1][0/1][j] dp[0/1][0/1][j]

  • B:直接拓扑排序判断,每次拿出度数为1的点,要判断除了第一层,每层的每个点有3个及其以上的儿子数,最后一层为k且只有一个点。

  • C:贪心构造,如 ( 0 , 0 ) , ( 1 , 0 ) , ( 1 , 3 ) , ( 2 , 0 ) , ( 3 , 0 ) , ( 3 , 3 ) , ( 4 , 0 ) , ( 5 , 0 ) , ( 5 , 3 ) ⋯ (0,0),(1,0),(1,3),(2,0),(3,0),(3,3),(4,0),(5,0),(5,3)\cdots (0,0),(1,0),(1,3),(2,0),(3,0),(3,3),(4,0),(5,0),(5,3),因为这样每层减少4个,而开始有几层是减少不到4个人,所以期望为 n 2 9 \frac{n^2}{9} 9n2个的。

  • D:首先找到 a i p i a_ip_i aipi最大,然后 b i p i b_ip_i bipi最大一直用的贪心会WA在105组数据,所以正解是凸包斜率优化dp+(矩阵优化或者等比数列求和)【推荐大佬blog】。

  • E:神仙题,不会,要用行列式和矩阵之类的东西,但是最后可以转化为求这颗树上的期望最大匹配数,用 d p [ 0 / 1 ] [ i ] dp[0/1][i] dp[0/1][i]表示以 i i i为根的子树, i i i匹不匹配的期望最大匹配数,然后 O ( n ) O(n) O(n)的树形DP即可。

}

CFRD520 :{

  • A:贪心找一个最长的连续的即可。
  • B:最后肯定是将每一个质因子的次数变为1为最优答案,操作次数就是找出最大的一个质因子幂的次数, l o g 2 log_2 log2这个次数向上取整就是答案(因为每次开根,幂是除以2的)。
  • C:贪心先吃1,然后再吃0,维护一个2的幂次的前缀和,推推式子,每次就可以 O ( 1 ) O(1) O(1)的回答了。
  • D:求一个最大欧拉回路,其实就是每个数和它的倍数都有正负,所以可以 4 × v a l 4\times val 4×val的值,暴力枚举一下倍数,复杂度为调和级数。
  • E:每次都只删除当前区间在dfs序里面最左边或者最右边的一个点是最优的,所以线段树维护dfs序在原区间的最大最小值,再维护个区间lca就可以了
  • F:拓扑排序两次,一次正向,一次反向,所以建两个图,找到一个点可以到它的和它可以到的点数,点数大于等于 n − 2 n-2 n2的才是重要或者次重要点(细节很多要注意)。

}

CFRD522 :{

  • A:贪心分类讨论一下即可。
  • B:bitset+背包暴力,或者每次组合数判断一下,只有全部一样的才能判断出来,(只有两种砝码的要特判,因为判断出一种另一种就知道了)
  • C:树形DP,定义 f [ 0 / 1 / 2 ] [ i ] f[0/1/2][i] f[0/1/2][i]表示以 i i i为根的子树, i i i与父亲匹配, i i i与其中一个儿子匹配, i i i不参与匹配的方案数。只有剩下的匹配点总数为偶数,黑白染色后黑白点的个数一样多才满足最大唯一,dp时已经保证这一点。
  • D:鹦鹉咕咕咕(滑稽,维护log棵倍增的线段树,每次跳即可,复杂度 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)
  • E:构造题,不会QAQ

}

CFRD521 :{

  • A:求个奇偶个数即可。
  • B:每次贪心,遇到一个101的就将这三个中最后那个1变成0即可。
  • C:排序,维护个前缀和即可。
  • D:二分次数,每次扫一遍判断即可。
  • E:离散化将同种缩在一起,枚举开始选多少个,二分跳多少场即可,期望 O ( n l o g n ) O(nlogn) O(nlogn)
  • F:dp加个分层单调队列优化前缀最大即可。

}

CFRD523 :{

  • A:直接除,向上取整即可。
  • B:正负奇偶分类讨论一下,等差数列前缀和即可。
  • C:覆盖,判断坐标和的奇偶便可以知道黑白,先分别算两个矩形,然后减去矩形交的即可。
  • D:贪心构造,首先判断能否分 k k k次,然后二进制枚举去分,看是否在操作次数区间内即可。
  • E:hash一下一个行区间的字母种类出现次数,枚举子矩阵判断即可,复杂度 O ( n 2 m ) O(n^2m) O(n2m)
  • F:将线段双关键字从大到小排序,然后维护主席树,下标为权值,对于每种权值维护前缀右端点最小,然后每次询问先lower_bound找到左端点符合的位置,查询前缀右端点最小的最大,看是否在询问区间内即可。

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VictoryCzt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值