代码改变世界

东南大学第四届逻辑算法程序设计竞赛决赛解题报告

2007-05-16 14:34  老博客哈  阅读(1600)  评论(2编辑  收藏  举报

                        东南大学第四届逻辑算法程序设计竞赛决赛解题报告

                                                                         农夫三拳@seu                             

                                                                          drizzlecrj@gmail.com

    本次比赛主要是用来为5月27号的省赛热身的,比较简单,下面做一个简要的说明。

    第一题 A    人见人爱A和B
    赤裸裸的GCD算法

    第二题 B   求正方形和长方形
    找规律,推出公式。 设边长为a,b(a<=b) 正方形的是 sigma((a - i)*(b - i)) i:0->i-1
     长方形的是(C((a + 1)*(b + 1), 2) - a * C(b + 1, 2) - b * C(a + 1, 2)) / 2
     题目求的长方形是除去正方形的,两者相减即可。

    第三题  C     赋值问题
     扫描每一个等式,让左边字母的赋值状态等同于右边即可(注意,将未赋值的变量赋值给已赋值的变量会造成两个都未赋值)

    第四题  D  质数问题
     方法多的不胜枚举,最快的当然是交表了,算出一张当前n,<=n小的素数个数表f,然后用f[b] - f[a - 1]即可

    第五题  E    自动对款机
    这是道好题,考察的是数的-2进制表示。在黑书第二章有讲,tc srm342 1000分也是类似的题目。主要是把转换的规则记号,我抄一下:
“具体而言,根据当前数的正负,奇偶分别做处理。用key来表示当前数的正负,用一个数组来记录当前数的绝对值。每次除法都改变key的值,再按如下方法处理:
 正偶数: 直接除以2
 正奇数: 减1后除以2
 负偶数: 其绝对值直接除以2
 负奇数: 将其绝对值+1再除以2”

    第六题  F     Calls
     找规律,可以推出 n等于2的时候是1次,n等于3的时候3次,以后均为2n-4次

    第七题  G     Catenym
     又一道好题,打印欧拉路径。首先按照每个单词的首尾字母建边,可以得到一个包含多边和自环的复杂图,并在同时记录下每个顶点的入度和出度。对于有向图来说,只有保证每个顶点的入度和出度相等(欧拉回路)或者当且仅当存在一个结点入度比出度大1,另外一个结点出度比入度大1(欧拉路径,起点为出度比入度大1的顶点)。 然后判断是否满足欧拉路径的条件,得到欧拉路径起点(若为欧拉回路,任何顶点都可),(这里少了判连通的步骤,是因为在下面dfs的过程中若不连通路径是不可能等于顶点数的),然后使用dfs记录访问的路径,若路径的长度等于顶点数,再在内层循环打印单词

    第八题 H    Your Ride Is Here
     水题,把字母序号乘起来,模47
 
    第九题 I    What Time Is It
     模拟题,练习拼写英语单词很不错

附上比赛题目