CodeForces练习计划

版权声明:转载注明出处,谢谢,有问题可以向博主联系 https://blog.csdn.net/VictoryCzt/article/details/84591130
  • 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- 这个数即可。
  • C:枚举 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\} ,然后再扫一遍宽度即可,复杂度 O ( n m ) O(nm)
  • D:摆放位置没有影响,所以将 L [ i ] , R [ i ] L[i],R[i] 分别排序后,对于每一个选 m a x { 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])} ,复杂度 O ( n l o g n ) O(nlogn)
  • E:可以发现每两个点的最短距离变为原来的二分之一向下取整,但是原长为 1 1 的还是 1 1 ,所以先算总的除以二,再加上原长为1的即可,复杂度 O ( n ) O(n)
  • FGH:不会,QAQ

}

CFRD514 :{

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

}

CFRD516:{

  • D:分段求取做法,n小于2e6枚举答案,2e6的复杂度, n > 2 e 6 n>2e6 枚举转了多少轮 k / n k/n 的复杂度。
  • E:置换贪心构造的方法,一开始对应就直接输出 n n ,否则一定可以构造到 n 1 n-1 ,随便舍弃一个,以那一个位置为置换的空位置换即可。
  • F:hash+暴力可以 O ( n n × h a s h ) O(n\sqrt{n}\times hash) 卡过去,因为答案不超过1000,正解为后缀数组或者sam求lcp,线段树维护,dp转移,复杂度 O ( n l o g n ) 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 v 的因子个数为 ( a i + 1 ) \prod (a_i+1) ,所以只有因子的幂次数才影响因子个数。

}

CFRD518:{

  • A:设置 d p [ 0 / 1 / 2 ] [ i ] [ j ] dp[0/1/2][i][j] 表示当前在第 i i 个数字,值为 j j ,与前面一个相等,小于,大于的答案,转移用前缀和优化,复杂度为 200 × n 200\times n ,发现等于的一维可以和大于或者小于的一维合并,再加滚动数组,可以优化到 d p [ 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 ,因为这样每层减少4个,而开始有几层是减少不到4个人,所以期望为 n 2 9 \frac{n^2}{9} 个的。

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

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

}

CFRD520 :{

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

}

CFRD522 :{

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

}

CFRD521 :{

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

}

CFRD523 :{

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

}

猜你喜欢

转载自blog.csdn.net/VictoryCzt/article/details/84591130
今日推荐