Loading...

使用 Wicd 连接 TTLS with WEP 加密的网络

May 15th, 2011 4 comments

很多大学的 Wi-Fi 网络使用 TTLS with WEP 的加密方式,在 Windows 和 Mac 上都有很便捷的配置方法。在 Linux 下我们借助 Wicd 也可以很方便的连接 TTLS/WEP 加密的无线网络。

编辑 Wicd 的 Encryption Templates: 修改 /etc/wicd/encryption/templates/ttls ,使用下面的配置。

name = TTLS with WEP
author = Adam Blackburn
version = 1
require identity *Identity anonymous_identity *Anonymous_identity password *Password auth *Authentication ca_cert *Path_to_CA_Cert
-----
ctrl_interface=/var/run/wpa_supplicant
network={
	ssid="$_ESSID"
	scan_ssid=$_SCAN
	eap=TTLS
	key_mgmt=IEEE8021X
	identity="$_IDENTITY"
	password="$_PASSWORD"
	ca_cert="$_CA_CERT"
	phase2="auth=$_AUTH"
}

接下来在 /etc/wicd/encryption/templates/active 里添加 ttls 这一项即可。

Categories: Informatics Tags:

逆序对的妙用 – 从一百囚犯问题想开来

September 30th, 2010 3 comments

从 OI 退役下来就一直计划要写一批回报 OI 界的文章, 其他文章还在规划当中, 而这一篇是从九月份的 UyHiP 的解法而想到的. 接下来这段时间也不算太忙, 我就保质保量的完成这一批文章吧.

一百囚犯问题: 这里的一百囚犯可不是开关灯泡的那些囚犯, 而是戴手套的. 这一群囚犯被告知, 在第二天早上, 他们每个人头上会被写上一个不同的实数, 每个人在单间里会看到其他人头上写着数的照片, 但都不知道自己头上写了什么, 接下来每个人会有一只白手套和一只黑手套, 在每个人都决定好要怎么戴上手套之后, 他们会被从各单间里拉出来按照头上的数从小到大排成一排, 相邻的人要手拉着手, 如果每一对拉着的手都是同样颜色的, 那么他们就会被释放. 现在他们有一晚上的时间来商量如何应对.

答案当然就是利用逆序对, 如果我们给每个人都编上号, 最后按照头上的数排序后我们就会得到一个序列. 每个人可以看到的特征: 这个序列除去他自己, 这样得到的一个序列就是它能得到的所有可用信息了. 仔细观察每个人看到的序列的逆序对个数是有性质的: 原序列中相邻两个同奇偶的数看到的逆序对数是不同奇偶的, 反之相邻两个不同奇偶的数看到的逆序对个数就是同奇偶的. 这启发了我们用一个巧妙的构造来解决这些囚犯们的难题: 如果我们把两种戴手套方法叫做 0 和 1 的话, 一个编号是奇数的人, 若看到的逆序对数是奇数就是 0 状态, 否则就是 1 状态; 一个是编号是偶数的人, 若看到的逆序对数是奇数就是 1 状态, 否则就是 0 状态. 这样我们就可以保证相邻两个人的状态不同了.

你可能会想, 逆序对难道有这么重要的性质吗? 事实上, 逆序对是一个数列的很重要的特征. 有一个很简单的例子, 就是信息学竞赛当中的八数码问题, 如果我们把八数码中的那个空格忽略, 把剩下来的 8 个数按照顺序写成一个数列. 我们发现, 把空格平移对数列没有影响, 而若是把空格上移或者下移的话, 分情况讨论被移动的数和中间隔的两个数, 我们会发现逆序对的奇偶性是不变的. 因此, 我们对于八数码的初状态和目标状态, 若逆序对奇偶性不相同, 一定是无解的. 但反过来证明要是逆序对就相同就有一点点困难了, 虽然这也是对的, 所有八数码的可能状态只分为两个等价类: 逆序对奇数, 逆序对偶数.

从上面的例子还可以推广到很多, 比如说一个排列通过对换变成一个顺序列 (eg., 1, 2, 3, 4…) 的次数的奇偶性和逆序对相同, 也就是说, 一个排列应用一次对换逆序对的奇偶性会改变.

另外, 逆序对能够一定程度上反映序列的混乱状况, 所以逆序对在排序算法的复杂度分析上也有很重要的作用, 当然了, 在各种 OI 竞赛上面逆序对也同样有他的一番用武之地.

Categories: Brainstorm Tags:

最强大的代码注释

September 24th, 2010 2 comments

在多人 project 里, 代码注释是必不可少的东西, 通常注释都是解释此段程序的用途, 但下面这段注释却让人啼笑皆非:

//
// Dear maintainer:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 32
//

更多例子请见此帖.

(original post via walking randomly)

Categories: Brainstorm, Informatics, Trivia Tags:

HNOI 2010 解题报告

July 5th, 2010 7 comments

由于题目的版权问题, 这里并不会出现题目描述, 请通过其他渠道获取题目描述.

合唱队 Chorus

很容易的区间DP, 设 F_{i, j}, G_{i, j} 分别表示当前状态为区间 [i, j], 最后一个放的元素在区间的左侧和右侧的方案数. 时间复杂度 O(n^2) .

平面图判定 Planar

判定存在 Hamilton 回路的平面图, 实际上就是判定能否把区间(边)分成两个集合, 使得每个集合内的元素互不相交(但可以严格包含).

这道题其实是有 O(nlogn) 的解法的, 但是这道题的点数过少, 也有很方便的解法. 根据欧拉定理, 平面图的边数 |e| 和点数 |v| 满足 |e| \leq 3|v| - 6. 那我们可以把边数的规模降低, 然后可以用 O(n^2) 的染色解决此题.

物品调度 Fsk

假设我们已经知道了终止状态, 如何求得最小步数呢. 我们可以用 O(n) 的时间求出这个置换的每个循环. 对于每个长度大于1的循环, 若其中含有0元素, 那么最少需 length - 1 步, 否则需要 length + 1 步.

现在的问题是如何求出终止状态, 观察题意发现, 每个元素的终止状态是放在  C_i~mod~gcd(n, d) 之后第一个非空的模 gcd(n, d) 剩余系中, 并且放在这个模 gcd(n, d) 剩余系中当前位置的下一个可行位置, 因此我们可以用链表/平衡树维护每个模 gcd(n, d) 剩余系的情况以及每个模 gcd(n, d) 剩余系内部的情况. 可以做到 O(n) 的复杂度.

公交线路 Bus

我们可以用每辆车到一个点的距离集合来表示一个状态, 由于不能有空位以及车之间没有区别, 实际状态集合的最多只有 C(9, 5) = 126 个之少.

我们可以用矩阵乘法来优化转移, 复杂度最多为 O(126^3 * logn).

取石子游戏 Stone

解法未知.

城市建设 City

解法未知.

弹飞绵羊 Bounce

首先这道题只能往后跳, 所以我们用块状链表维护每个点在块内和块外的情况即可用O(n\sqrt{n}) 的时间解决此题.

正解之一是利用括号序列, 每次操作都是把一棵子树砍下并且接在某个结点上, 那么我们可以维护括号序列整段移动来完成这个操作. 同时为了回答询问我们需要知道每个左括号的左边有几个未匹配的左括号, Splay 可以维护这个值, 时间复杂度 O(nlogn).

矩阵 Matrix

设给定的矩阵是 B, 原矩阵是 A, 另设 C 矩阵, 其中:

C 的第一行和第一列均是0, 且 C_{i, j}=B_{i, j} - C_{i - 1, j} - C_{i, j - 1} - C_{i - 1, j - 1}.

同时满足  A_{i, j} = C_{i, j} + (-1) ^ {i - 1} A_{1, j} + (-1) ^ {j - 1} A_{i, 1} + (-1) ^ {i + j - 1} A_{1, 1}. 证明在(外链打开请谨慎).

那么我们搜索 A 的第一行, 在枚举 A_{1, j} 时检查第 j 列并更新第一列的可行集合来剪枝. 这样就可以通过这道题了.

Categories: Informatics Tags: ,

RIP, Martin Gardner

May 23rd, 2010 2 comments

Martin Gardner 先生於昨日(22日)去世了, 終年95歲.

95 = 0~(mod~1) =1~(mod~2) =2~(mod~3) =3~(mod~4)

這是一個很有趣的數, 他應該會很喜歡的.

Martin 先生最著名的成就便是在科學美國人上開設二十餘年的數學遊戲專欄, 下面這張很有名的數學謬論就是他提出來的:

你要是還想進一步了解他所作的謎題, 請移步科學美國人的紀念文章.

本文部分內容來自Three Sixty.

Categories: Brainstorm, General Math Tags:

海倫公式的非幾何證明

May 11th, 2010 3 comments

大家都知道海倫公式K=\sqrt{s(s - a)(s - b)(s - c)}, 其中s=\frac{a + b + c}{2}是半周長. 這一公式由於計算複雜所以在中學數學中並沒有被重視, 甚至由於容易造成精度誤差也沒有在信息學中應用. 現在我們要用盡量少的幾何知識來證明這個公式.

假設

我們假設K^2是一個關於a, b, c的4次齊次多項式, 我們已經知道(a + b - c)(a - b + c)(-a + b + c)能夠整除K^2, 那麼除後剩下來的是關於a, b, c的線性式子. 因此我們假設K^2 = K_0(a + b + c)(a + b - c)(a - b + c)(-a + b + c), 這裡K_0是一個常數. 我們把周長是1, 1, \sqrt{2}面積是\frac{1}{2}的三角形帶入計算, 得到:

\frac{1}{4}=2K_0(2+\sqrt{2})(2-\sqrt{2})=4K_0

因此得到K_0=\frac{1}{16}, 滿足條件.

驗證假設

K^2是顯然次數均勻且對稱的, 但它是不是一個多項式呢?

我們設h_{a}a邊上的高, 類似地對b, c也定義其高, 那麼K=\frac{h_{a}a}{2}, 那麼問題變成了a^2h_{a}^2是不是一個多項式, 根據Stewart’s theorem, 這是成立的, 但是我們來看有沒有其他的證法.

根據更加現代的理論, 一個三角形的面積是其兩邊的向量\mathbf{v}, \mathbf{w}的叉積的一半, 而叉積是這兩個向量的Gramian矩陣的行列式. 其中Gramian矩陣是:

\mathbf{G}(\mathbf{v}, \mathbf{w})= \left[ \begin{array}{cc} \mathbf{v} \cdot \mathbf{v} & \mathbf{v} \cdot \mathbf{w} \\ \mathbf{w} \cdot \mathbf{v} & \mathbf{w} \cdot \mathbf{w} \end{array} \right]

三角形0, \mathbf{v}, \mathbf{w}的三邊邊長平方分別是\mathbf{v}^2, \mathbf{w}^2以及(\mathbf{v}-\mathbf{w})^2所以這個Gramian矩陣的行列式的確對於三邊邊長是多項式的.

本文譯自Annoying Precision, 並且處於自定版\LaTeX測試中.

Categories: General Math Tags:

做数学与做学问

January 9th, 2010 No comments

看到Terence 老师在他的博客上写过一篇文章, “Does one have to be a genius to do maths”, Zhiqiang 老师评论说“他写这种文章是站着说话不腰疼.”

的确, 对于Terence老师这种12岁就获得国际数奥金牌的人来说, 天赋毫无疑问是他走向成功的一个因素. 但是, Terence老师下面这段话却发人深省:

In some cases, an abundance of raw talent may end up (somewhat perversely) to actually be harmful for one’s long-term mathematical development; if solutions to problems come too easily, for instance, one may not put as much energy into working hard, asking dumb questions, or increasing one’s range, and thus may eventually cause one’s skills to stagnate. Also, if one is accustomed to easy success, one may not develop the patience necessary to deal with truly difficult problems. Talent is important, of course; but how one develops and nurtures it is even more so.

对应的译文: (来自LiuXiaochuan老师)

有的时候,大量的灵感和才智反而对长期的数学发展有害,试想如果在早期问题解决的太容易,一个人可能就不会刻苦努力,不会问一些“傻”的问题,不会尝试去扩展自己的领域,这样迟早造成灵感的枯竭。而且,如果一个人习惯了不大费时费力的小聪明,他就不能拥有解决真正困难的大问题所需要耐心,和坚韧的性格。聪明才智自然重要,但是如何发展和培养显然更加的重要。

反过来想自己, 即使在创新能力要求极强的信息学中, 原来最重要的不是自己的那些灵光一闪的新点子, 而是严谨踏实的学术作风.

Categories: Informatics, Trivia Tags:

NOIp 2009 解题报告

November 26th, 2009 9 comments

以下是我的NOIp 2009 (提高组) 解题报告.

第一题(潜伏者, spy): 略.

第二题(Hankson 的趣味题, son):

Gcd(x,a0)=a1, Gcd(x,b0)=xb0/b1

设f(a,b) 代表b这个质因子在a中有多少个.

对于a0的任意质因子t, 若f(a0,t)=f(a1,t) 则只需保证f(x,t)≥f(a1,t), 否则f(x,t)=f(a1,t)

对于b1的任意质因子t, 若f(b1,t)=f(b0,t) 则只需保证0≤f(x,t)≤f(b1,t), 否则f(x,t)=f(b1,t)

由于x的所有因子都是b1的子集, 所以我们只需对b1的质因子按如上方法逐个检查这个质因子在x里面的取值范围(若为空则说明无解), 并按照乘法原理统计即可.

关于分解质因子: 由于b1不会超过2*10^9, 大于50000的质因子不会超过1个, 所以我们只要打出50000以内的素数表即可, 若最后除剩的b1仍未除尽, 说明此时b1一定是一个大于50000的素数.

第三题(最优贸易, trade):

做法1:

设Low[i]为从1到i当前所有路径中最便宜的价格. Profit[i]为从1到i当前所有路径中最大获利. 初始时Low[1]=P[1], Low[2..n]=infinity, Profit[1..n]=0.

那么我们可以从1开始广搜, 要注意一个点有可能多次被更新.

从i可以更新到j的条件是:

1. 存在有向/无向边(i,j)

2. Low[j]>Low[i] 或 Profit[j]<Profit[i]

做法2:

首先考虑没有环的情况, 此时1,n之间要么无法连通, 要么只存在一些单向的无环路径. 对于每一条路径, 由于不能”回头”, 走到某个点i的极优获利显然是i的费用-路径上此点之前的点的最小费用, 而此路径的最大获利便是取获利最大的点.

但是还有很多数据是有环的, 也就是对于有些点对(a,b), 在a走到b之后, b仍然可以走回到a. 在图论中, 我们把点集V, 其中任意两个点可以互达, 叫做强连通分量.

由于强连通分量中的点可以互相到达, 所以在一个强连通中的最大获利就是强连通中最贵的-最便宜的. 我们把所有强连通分量求出来缩为两个点之后. 1与n之间只存在一些无环路径, 对于这些单向的无环路径我们只需要扫描一遍便可求出最大获利.

强连通缩为两个点的具体做法: 把一个强连通缩为a,b 两个点, 连(a,b)边, a的费用为强连通中最便宜的, b的费用为强连通中最贵的. 把指向强连通中任何一个点的所有边改为指向a, 把强连通中任何一点指向强连通外部的边改为由b指出. 这样构出来的保证与原图等价.

第四题(靶形数独, sudoku): 很直白的搜索, 由于数独是NP-H问题, 所以我们肯定只能用搜索, 那么关键就在于剪枝了, 我们发现, 对于每个格子都有一个取值范围, 这个范围由其横行/纵行/小九宫格中已填的数决定, 那么无疑我们每次搜索选取值范围最小的格子搜是比较优的.

Categories: Informatics Tags: ,