1. Common Anagrams
Q:两个字符串A,B,问有多少对子串是字母异序词。
A:
- 枚举所有子串,然后对比。
- 改进:添加一个map
- 再改进:桶排序,算每个字符出现的次数
- 再再改进:B[i,j]是B[i,j-1]出现次数+j对应字符数目+1
2. Specializing Villages
Q:Kickstartia的乡村由V个村庄组成,由双向道路连接。由于市民欣赏道路建设的多样性,没有两条路的长度相同。每条路恰好连接两个村庄,没有两条路连接同一两个村庄。新国王急于炫耀自己的进步,他想制定一个计划,让每个村庄专门生产一种食物:水果或蔬菜。如果一个村庄生产水果,那么他们就会找到一条最短的路径(可能使用多条道路)去某个生产蔬菜的村庄。同样地,如果一个村庄生产蔬菜,那么他们会找到一条最短的路径去生产水果的村庄。为了让事情顺利进行,国王想要最小化每个村庄获取非生产性食物所需的平均距离。有很多方案可以最小化这个平均距离,所以国王希望你告诉他有多少。如果一个村庄在一个计划中生产水果,而在另一个计划中生产蔬菜,那么两个计划是不同的。国王保证有可能找到一个方案,让每个村庄都能得到水果和蔬菜。
A:
- 思路:如果每个村庄都能从相邻的最近的村庄拿到需要的东西,则平均距离最短
- 想法:Prim算法产生最小生成树。