分治法(Divide-and-Conquer Method)解决Count the Cows

为了大家能更好理解Count the Cows的解法,我特地写了详细解题分析。

此问题使用到计算机科学非常重要思想:分治法Divide-and-Conquer),就是分割问题、各个击破。将一个大问题,分割成许多小问题。如果小问题还是很难,就继续分割成更小的问题,直到问题变得容易解决。分割出来的小问题,称作子问题(subproblem)。解决一个问题,等价于解决所有子问题,解决子问题可以解决更大问题。

双队列或双指针解决Square Pasture(Glod)

此题是本次比赛最难一题了,解题细节比较多,非常考验编程能力。使用双指针vector,模拟正方形运动。不断移动两个vector的指针直到end()指针、这是官方题解思路。但我使用了个不同的数据结构queue替代vector,指针永远在top(),实现更就简单并且性能更快,性能有2-10倍的提升。

1043F Make It One

来源 https://codeforces.com/contest/1043/problem/F 思路 容斥原理,组合数比较大,Pascal公式超内存,需要逆元计算组合数 设:$f[i][j]$表示长度是$i,gcd=j$ 的组合数 $m[

803F Coprime Subsequences

https://codeforces.com/problemset/problem/803/F 分析 概述 类似839D $Input={2,3,4,6}$ $f(i)$是满足$GCD=i$所有的集合数量, 例如$f(2)$的集合有:${2},{2,4},{2,6},{4,6

LCA算法之倍增法

问题 一个有$n$个节点的树,求任意两点$u,v$的最近公共祖先$lca$(Lowest common ancestor) 最近公共祖先定义 在一棵没有环的树上

1200E Compress Words

来源 https://codeforces.com/contest/1200/problem/E 题意 给定n($1\leq n \leq 10^5$)个 words : 每个word使用空格分开 每个word非空 每个word由大小写字母+数值组成: $(‘A’, ‘B’, …, ‘Z’, ‘a’, ‘b’,

Horner's method 霍纳法则

概述 Horner’s method 霍纳法则可减少乘法运算。有一些关于多项式求值的问题。对于多项式求值问题,我们最容易想到的算法是求出每一项的值然后把所求的值累加起来,

Edit Distance问题

问题 https://en.wikipedia.org/wiki/Edit_distance 观察以下图形 方法1:暴力递归 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 int minDistanceRecursion(string & word1, string & word2, int i, int j) { if (j == 0) { return i; } else if (i == 0) { return j; } else