当前位置 博文首页 > hallobike的博客:第三届全国高校绿色计算系列大赛-任务挑战组预

    hallobike的博客:第三届全国高校绿色计算系列大赛-任务挑战组预

    作者:[db:作者] 时间:2021-09-14 22:04

    第一阶段

    1、第一关:图片数据查询

    SELECT * FROM((SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
    concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 3) union
    (SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
    concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 19, 3)
    union
    (SELECT concat(' ', to_char(to_timestamp(date_added),'HH24:MI:SS'))AS column1,
    concat(to_char(to_timestamp(date_added), 'YYYY-MM-DD')) AS column2, title FROM images order by date_added desc limit 43, 3))temp order by title desc;
    

    思路:(1)找到时间和日期的转换函数转换时间和日期,(2)按照时间和日期倒序排序所有记录,(3)找到25号、24号、23号的最后三本书的记录,并输出;(4)将三条记录关联并按所给样式排序;(5)在column1列的数据之前加入空格。(真坑,在输出这里还搞个格式问题,其实也是考察怎怎么用SQL语法在字符串中的应用)

    第二阶段

    1、 第一关:特定 x86 宏相关代码识别

    # -*- coding: utf-8 -*-
    """
    @Date : 2020/8/29 13:30
    @Author : LGD
    @File :test02.py
    @IDE :PyCharm
    """
    import fileinput
    
    # 根据题目要求将能在×86平台运行的语句放入列表中存储
    ops1 = ['#if defined(__x86_64__)', '#ifdef __x86_64__', '#elif defined(__x86_64__)', '#else']
    ops2 = ['#endif']
    
    
    def count_X86_code(filename):
        lst = list()
        # 读取输入文件的内容,并将每一行的内容去掉换行符和空格存储到列表中,最后列表中存的是一个个语句
        for line in fileinput.input(filename):
            text = line.replace('\n', '').replace('\r', '').strip()
            lst.append(text)
    
        out = list()
        i = 0
    
        for line in lst:  # 逐语句遍历
            i = i + 1  # 记录文件中每行每行内容的行数
            # 读取存储到文件中的内容是否有能在×86平台运行的语句
            if line in ops1:
                # 找到开始语句
                str1 = '起始行为' + str(i + 1)  # 记录起始行
                temp = lst[i:]
                for text in temp:
                    if text in ops2:
                        # 找到结束语句
                        str2 = '结束行为' + str(i + temp.index(text))  # 记录结束行
                        st = str1 + ',' + str2 + '。'  # 为输出格式所做
                        out.append(st)  # 保存找到多条记录
                        break  # 找到一个记录跳出小循环
    
            continue  # 寻找下一条记录
    
        # 输出记录
        if len(out) == 0:
            print('NULL')
        else:
            for i in out:
                print(i)
    
    
    if __name__ == '__main__':
        file_name = input()  # 输入要判断的文件
        count_X86_code(file_name)
    

    思路:(1)读文件,获取文件中每一行语句并存储;(2)将每一行的语句与能在×86平台运行的宏对比找到起始行,并记录行号;(3)找到结束行,并记录行号,并得到第一条结果;(4)进行后面的比较直到比较完文件中每一行语句找到所有结果。

    2、第二关:所有 x86 宏相关代码识别

    # -*- coding: utf-8 -*-
    """
    @Date : 2020/8/29 10:12
    @Author : LGD
    @File :test01.py
    @IDE :PyCharm
    """
    import fileinput
    # 与题一类似,只是要比较的语句变多, 因此不再累述。
    ops1 = ['#if defined(__x86_64__)', '#ifdef __x86_64__', '#elif defined(__x86_64__)', '#else',
            '#if defined(__ATOMIC_HLE_ACQUIRE)', '#ifdef _ATOMIC_HLE_ACQUIRE', '#elif defined(_ATOMIC_HLE_ACQUIRE)',
            '#if defined(__ATOMIC_HLE_RELEASE)', '#ifdef __ATOMIC_HLE_RELEASE', '#elif defined(__ATOMIC_HLE_RELEASE)',
            '#if defined(__DECIMAL_BID_FORMAT__)', '#ifdef __DECIMAL_BID_FORMAT__', '#elif defined(__DECIMAL_BID_FORMAT__)',
            '#if defined(__FXSR__)', '#ifdef __FXSR__', '#elif defined(__FXSR__)',
            '#if defined(__GCC_ASM_FLAG_OUTPUTS__)', '#ifdef __GCC_ASM_FLAG_OUTPUTS__', '#elif defined(__GCC_ASM_FLAG_OUTPUTS__)',
            '#if defined(__MMX__)', '#ifdef __MMX__', '#elif defined(__MMX__)',
            '#if defined(__SEG_FS)', '#ifdef __SEG_FS', '#elif defined(__SEG_FS)',
            '#if defined(__SEG_GS)', '#ifdef __SEG_GS', '#elif defined(__SEG_GS)',
            '#if defined(__SIZEOF_FLOAT128__)', '#ifdef __SIZEOF_FLOAT128__', '#elif defined(__SIZEOF_FLOAT128__)',
            '#if defined(__SIZEOF_FLOAT80__)', '#ifdef __SIZEOF_FLOAT80__', '#elif defined(__SIZEOF_FLOAT80__)',
            '#if defined(__SSE2_MATH__)', '#ifdef __SSE2_MATH__', '#elif defined(__SSE2_MATH__)',
            '#if defined(__SSE2__)', '#ifdef __SSE2__', '#elif defined(__SSE2__)',
            '#if defined(__SSE_MATH__)', '#ifdef __SSE_MATH__', '#elif defined(__SSE_MATH__)',
            '#if defined(__SSE__)', '#ifdef __SSE__', '#elif defined(__SSE__)',
            '#if defined(__amd64)', '#ifdef __amd64', '#elif defined(__amd64)',
            '#if defined(__amd64__)', '#ifdef __amd64__', '#elif defined(__amd64__)',
            '#if defined(__code_model_small__)', '#ifdef __code_model_small__', '#elif defined(__code_model_small__)',
            '#if defined(__k8)', '#ifdef __k8', '#elif defined(__k8)',
            '#if defined(__k8__)', '#ifdef __k8__', '#elif defined(__k8__)',
            '#if defined(__x86_64)', '#ifdef __x86_64', '#elif defined(__x86_64)',
            '#if defined(i386)', '#ifdef i386', '#elif defined(i386)',
            '#if defined(__i386__)', '#ifdef __i386__', '#elif defined(__i386__)',
            '#if defined(__X86__)', '#ifdef __X86__', '#elif defined(__X86__)',
            '#if defined(_X86_)', '#ifdef _X86_', '#elif defined(_X86_)', ]
    ops2 = ['#endif']
    
    
    def count_X86_code(filename):
        lst = list()
        for line in fileinput.input(filename):
            text = line.replace('\n', '').replace('\r', '').strip()
            lst.append(text)
    
        out = list()
        i = 0
    
        for line in lst:
            i = i + 1
            if line in ops1:
                str1 = '起始行为' + str(i + 1)
                temp = lst[i:]
                for text in temp:
                    if text in ops2:
                        str2 = '结束行为' + str(i + temp.index(text))
                        st = str1 + ',' + str2 + '。'
                        out.append(st)
                        break
    
            continue
    
        if len(out) == 0:
            print('NULL')
        else:
            for i in out:
                print(i)
    
    
    if __name__ == '__main__':
        file_name = input()
        count_X86_code(file_name)
    

    思路与第一关一样只是比较的宏多一点。

    总结

    总体来说,题目都还是考的很基础,第一阶段是考察SQL语句的编写,第二阶段是考察通过程序对文件进行读取;考察的大多数都是语法问题,还有比较易思考的逻辑。如果对基础知识和语法掌握比较好的话,应该很快能完成。

    cs
    下一篇:没有了