Codeforces Round #223 (Div. 2) 不完全不正确题解

由于大号已经进Div. 1了,所以接下来的几场Div. 2都是用小号做的。

等有实力切D题了,再去打一区。(弱

事情一直很多,所以题解落后了好久才发。

A. Sereja and Dima

纯模拟,Python随便搞

n = int(raw_input())
pokers = map(int, raw_input().split())

v = [0, 0]
p = 0

for i in xrange(n):
    if pokers[0] > pokers[-1]:
        v[p] += pokers[0]
        del pokers[0]
    else:
        v[p] += pokers[-1 …
more ...

用Misaka做为pelican的Markdown解析器

为啥?

Pelican内置python-markdown做为默认解析器,用来将用户的Markdown格式的文章转为网页格式展示。

然而python-markdown模块的解析逻辑有严重的Bug。例如一个未标明语言的代码块会被标出很多莫名奇妙的错误;还有C++中的指针符号*会被解析为斜体的符号*SomeText*,在代码块中会产生大量和语法高亮无关的斜体字。

在网上寻找了很久的答案,终于找到了一篇日文博客,其中讲到了使用misaka来替换python-markdown来解析日志。

两难的Metadata

我使用了上文提到的日志中的方法来替换解析器,效果拔群,日志中的解析问题完全解决了。但是日志中的Metadata并没有被隐藏,而是显示在了日志的最前面,非常影响心情(强迫症?)。

于是我分析了解析模块的代码。原来的解析模块使用了python-markdown的一个处理Metadata扩展,用来解析Metadata,并从正文中删除这一部分。

但是Misaka并不支持这种语法 …

more ...

读书 - 《Head first 设计模式》

Head first设计模式

豆瓣读书

为什么读这本书

在面XX家的时候,被问过一个设计模式问题。当时连面向对象都搞不懂,更不用说设计模式。

于是入了“四人帮”的设计模式来看,被里面的内容彻底搞晕。然后只能找了这本看起来很娱乐化的书来读。

这本书大概有600多页,比“四人帮”书厚很多。一个原因是这本书是“范例驱动”的,包含很多“项目”背景介绍,以及实现思路;第二个原因是,这本书的示例代码用的是Java

(笑,不黑了好嘛。。。

为什么要设计模式

这世界唯一不变的,就是变化

(没有逼格的人连名人名言都引用不好。。。

我们的代码总是需要不断的改变来适应现实世界中不断的变化。(烧死那个PM!)

我们需要一种对代码影响最小的方式来修改软件以适应变化。这就是我们使用设计模式的原因。

“内隐知识”

设计模式有了名字,人们就可以认识到它的存在。对于没有名字的东西,人们几乎不可能认识到它的存在,并对之进行讨论。这种不能用语言表达的知识我们称之为内隐知识。

其实我们在写程序的时候,或多或少都用到了“设计模式”,只是我们没有意识到而已 …

more ...

匈牙利算法

概念

交错路

交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是一条交错路。

通俗点来说,就是把一个图中的路径染成红黑两种。然后找出一条路,使这条路红黑交错

注:交错路是无向图,图中的箭头只是为了便于观察。

例如下图中的:(3) -> (2) -> (1)

图1

从端点扩张交错路

假设我们已经有一个红黑交错路P,其端点为AB,其路径被标记为黑红。此时,我们向P中的一个端点(假设为A)加入一条边T

此时我们有边T + 交错路P(黑红)。当我们将边T标记为黑色时,我们就扩展了交错路P。 如果我们要保持红黑交错路的性质。则我们必须将边T …

more ...

Codeforces 3C - Tic-tac-toe

啥?

Tic-tac-toe是我很久之前在CF上做的一道题。非常考细心的模拟题。

最近有同学和我讨论过类似的问题。于是拿出来重新做一遍。练练手。

原题做法

没有任何“算法”成分。纯模拟。

又由于数据量实在是太小(3 × 3的矩阵),所以只要是思路正确。代码怎么写都能过。

于是在这里就不赘述。手快的众位10分钟切此题无压力。

What's new?

如果我们扩展一下这个问题。如果让你设计一个Tic-tac-toe的对战系统(人机对战、人人对战等),你将如何设计?

the STATE pattern

我们可以看出,这个对战系统其实可以用一个状态机来表示。

http://wizmann-tk-pic.u.qiniudn.com/blog-tick-tac-toe.png

于是我们的对战系统也可以写成一个状态机的模式。

show me the CODE

首先我们声明一个State接口类型。

由于Tic-tac-toe游戏只有两种操作类型:P1 moveP2 move

所以我们的接口就很简单。

class State {
public:
    State …
more ...

How to "Rotate Image"?

啥?

原题戳我

Rotate Image

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:

Could you do this in-place?

示意图如下:

rotate-image

当然,矩阵中的数字不一定是规律的。

为什么要提出这个问题

自觉是一个不聪明的人(双低。。。<(=@_@;=)?>)。

别人一下子就想明白的事,在我这里要计算好几个来回。

所以努力想找到一个思维方法去弥补这个不足。

就以这题为例,如何使用简单、直接的方法,迅速正确的找出变化的映射规律。

初步思路 …

more ...