C语言POJ的一个题目算法没看懂,求帮忙。。。

题目大意:1..n的一个排列{An}被称作完美排列,等价于数列{|Ai-i|}是0..n-1的一个排列。对于指定的n≤1000,给出一个完美排列或者输出0表示不存在1..... 题目大意:1..n的一个排列{An}被称作完美排列,等价于数列{|Ai - i|}是0..n-1的一个排列。对于指定的n≤1000,给出一个完美排列或者输出0表示不存在1..n的完美排列。
这个MS是罗马尼亚数学竞赛的题……
如果作为ACM问题的话最合适的做法是搜小数据然后找规律 >_<
不过这显然不是我们研究科学问题的态度……下面给出一个带证明的做法。
首先我们证明,当且仅当n ≡ 0, 1 (mod 4)的时候存在1..n的完美排列。
首先,由于{|Ai - i|}是0..n-1的一个排列,所以∑|Ai - i| = n(n-1)/2。
同时,∑|Ai - i| ≡ ∑(Ai - i) = ∑Ai - ∑i = 0 (mod 2)。
故n(n - 1)/2 ≡ 0 (mod 2)。这样就得到n ≡ 0, 1 (mod 4)。
下面我们构造满足题意的解:
我们把排列看做置换。
n ≡ 0 (mod 4) 的时候,一个可行的置换是轮换(1, n, 2, n - 1, 3, n - 2, ..., n/4, 3n/4 + 1, n/4 + 1, 3n/4 - 1, ..., n/2 - 1, n/2 + 1, n/2)。
3n/4 为这个置换的唯一不动点。
n ≡ 1 (mod 4) 的时候,设s = n - 1,一个可行的置换是轮换(1, n, 2, n - 1, 3, n - 2, ..., s/4, 3s/4 + 2, s/4 + 1, 3s/4, s/4 + 2, 3s/4 - 1, ..., s/2, s/2 + 1)。
而3s / 4 + 1为这个置换的唯一不动点。
这就证明完毕。于是这个题也就解决了。
代码就不贴了。

当且仅当n ≡ 0, 1 (mod 4)是什么意思啊 整个算法有谁还能简单地解释下呢
证明的第三行开始都不懂了
展开
 我来答
092625
2012-11-26
知道答主
回答量:8
采纳率:0%
帮助的人:9.8万
展开全部
≡这个是恒等于的意思,n ≡ 0 (mod 4),所以这句话的意思是n除以4余0,mod是取模运算,n关于4取模,也就是求n除以4的余数,另一句同理。
下面分类讨论了两种情况,得出了不动点,即经过映射后,是自身的点。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式