Featured image of post 百度之星程序设计大赛2023回忆录

百度之星程序设计大赛2023回忆录

–苦涩的失败者 PLUSPLUSPLUS, 但是这次是自己太飞舞

打卡区

很多高端和刷过的都跳过了, 没思路的赶紧看一看, 一天干 10h, 看完晕过去, 晕过去再看

{
    tooltip: {
        trigger: "axis"
    },
    legend: {
        data: ["Leetcode Arrival"]
    },
    toolbox: {
        show: true,
        feature: {
            mark: {
                show: true
            },
            dataView: {
                show: true,
                readOnly: true
            },
            magicType: {
                show: false,
                type: ["line", "bar", "stack", "tiled"]
            },
            restore: {
                show: true
            },
            saveAsImage: {
                show: true
            }
        }
    },
    calculable: true,
    xAxis: [
        {
            type: "category",
            boundaryGap: false,
            data: ["9.10", "9.11", "9.12", "9.13", "9.14", "9.15", "9.16"]
        }
    ],
    yAxis: [
        {
            type: "value"
        }
    ],
    series: [
        {
            name: "Leetcode Arrival",
            type: "line",
            stack: "总量",
            itemStyle: {
                normal: {
                    areaStyle: {
                        type: "default"
                    }
                }
            },
            data: [93, 114, 115, 175, 260, 414, 500]
        }
    ]
}

# 时间线

8.16 日 道听途说

当时在家里很摆, 简单刷了一点题算了

9.3 日 誓师出征, 剩余 20d

Pycharm 整合插件进行刷题, 主要参考博主的思路. 以此之后 10 天整理个人算法笔记

使用 Python3, 编写方法返回即可

当时直接用刚刚拿下期末设计余威正盛的 Python 而不是 Java, 所以其实你可以说我也是 Python 程序员(API 选手)

规划: 之后针对不同题库进行刷题; DP 等高难度的可以划划水, 基础题要求 100%

规划: 做 50%以上的 AC

最多刷到 17 号左右, 剩下时间 7 天整理笔记

实际上杀红了眼, 杀到前一天还在杀, 没有怎么整理, 就是趁热打铁

*发现 leetcode 竟然有付费题目, 怎么会是呢?

简单刷题日志

  • 8.16 开始探讨可行性

    其实当初我是很怀疑自己需不需要参加的, 虽然这个难度相较于那些蓝桥和 ACM 算是挺低的了, 但是奈何自己并不是那种反应快的聪明人, 之前就是数学苦手, 哪怕大学后觉悟了数学能力找回来了, 但是算法相关的解题能力实在是不算好, 只能说是平均水平, 智力没有在这里加持.

    获奖概率高, 有搞头, 同时前辈也推荐去试试, 就报名了. 现在马后炮一看确实是比较小丑的行为, 如果把一个月拿来处理技术栈的问题的话能处理很多了.

    当然, 其实自己很不喜欢这类竞赛, 认为是无意义的内卷, 算法能用就行, 不想去比拼. 这种心情在准备比赛的第一天就被主动屏蔽了, 但是比赛一结束, 混合着悲伤的气氛, 所谓的厌恶之情顿时喷薄而出

  • 8.18 确定报名, 开始整理算法本地资源

  • 8.22 规划学习路线

  • 8.28 Python 热手

    可以说 Python 才是我的主语言, 至少是那个时候. 我高考结束后一个月就下到了 Pycharm 来照着编程教程学习基础 Python 的语法和一些编程知识. 之后学了 Cpp 之后才算编程入门, 但是至少在大一没学 Java 之前我是完全对现在的主语言 Java 有许多掌握 (如果你说见过 Java 的话还真有, 我小学三年级时候玩我的世界要自己装 JRE, 就是 Java8 那个时候, 我影响深刻是说"轻便化的可以运行在机顶盒, 收音机里的程序". 大一下就继续用 python 刷一些算法和了解 Python 语法糖, 成为一行代码大师…大二上才开始狠狠学 Java, 这时候我已经有了 Cpp 和 Python 两个语言的基础了, 于是掌握的很快.另外在这时候也用 Python 做了很多的小应用, 例如大数据分析, 例如爬虫, 例如 AI 相关, 还有游戏, 因此那个时候我还是决定用 python 上场.

  • 9.3 项目 STW 20days

  • 9.4 周一第一次上课, 打卡首冲!
    首日战果: 1(丢人)

  • 9.5 黑色星期二: 上课

    黑色星期二指的是那天全是课, 烦死了

  • 9.6 战果: 10+3(自己 5 题, 且有多重解法)(晚上加班)

  • 9.7 到 39 题, 平均 4 天一日 10 题 赢!

  • 9.8 到 56 题, 增加到 17 题一日, 之前 14 题

  • 9.9 (周末) ->74

  • 9.10(周末) ->93 平均一日 16 题, 赢!

  • 9.11 ->114 (21 题) 继续冲!

  • 9.12(BusyDay) 勉强 1 题 (哈哈)

  • 9.13 ->123 (AM) ->172(PM) =175(进位) 一日 60 题

  • 9.14 ->213 (PM) ->260 (NT) 一日 85 题 平均一日 25 题,
    一天工作 8 小时来看. 一小时 3 题…
    差不多是顶峰了, 接下来要开始针对性处理了

  • 9.15 ->371(PM) -> 414(NT) (实际上 24 道题)

  • 9.16(周末) (第一题 100%速度击破) -> 开始准备转知识整理 (一日 86 题)
    -> 448(AM) -> 500(half PM) -> 结束; 12 天内完成 150 题, 平均一日 12 题, 各知识点均覆盖到. 从头到 500, AC60%以上的基本都尝试过去了

  • 9.16 晚 笔记整理: Python

  • 9.17 - 9.18: 数构 + 算法 初级整理

  • 9.19 : have classessss

  • 9.20 :前往编程秘籍网站练习 * 2

  • 9.21 : 拉拉题解 刷题 20 题, 5 日第一次

  • 9.22 : 拉拉题解 看不完了了了+ 刷题 12

  • 9.23 (周末) 再, 练算法热门题 (刷 10 题) + 准备 + 长线算法操练计划安排大成功 + 休息, 被拷打麻了

  • 9.24 (End) 要被拷打, 写出 2 题就收工(虽然肯定写不出, 但是我的目的已经达到了)

    真小丑啊, 赛前说"写两题收工, 会赢的", 赛后一题都没写出来

    占座什么的只能说凑合, 早上早 8 状态不是很好, 很困感觉. 也许是昨天的疲惫堆积到今日了吧.
    一切完成后, 明天询问自习室的事情吧, 7 教实在是没什么生存空间了. 其他地方不知道 今天下雨

    自习室还好, 中途小状况是坚定了我校外学习的决心;;; 其他的准备非常充分, 确实是最佳水平. 但是, 真的刚开始草台(余下心得见手机笔记本) 被罚时太多了因为刚开始不熟悉流程(竟然是真的输入而不是 leetcode 的传参数模式), 然后不停提示人脸不符, 提交运行效率极慢(30s), 后面才发通知. 看了一遍大概能 3 题加上希儿那道, 结果真正能写出来也就两道… 动态排名 2700 名, 70% (哈哈, 一题都没有还有排名吗)

  • 竟然学校里还有人参加, 总共 AC1 道, 我一道没有….

    甚至不如福州理工! 太耻辱了, 我变成自习室里一滩淤泥

9.25 结束任务, 开始物色自习室(下转 - 自习室回忆录 2023)

# 小丑时刻精选

大部分只有对应的索引, 具体在个人 Github 账号登录可以看到对应的提交记录

# 第6题新材料 简单模拟即可
# 2023. 9.24 绝唱
# (下一题)希儿啊, 之前天天看你跳舞, 怎么今天我就这么不争气呢...


if __name__ == '__main__':
    # 基础暴力解法:
    A = []
    # N = int(input("几个元素"))
    # K = int(input("反应区间"))
    dummy = input()
    N, K = dummy.split(' ')
    N = int(N)
    K = int(K)
    for i in range(N):
        A.append(int(input("元素i")))
    res = []
    # start
    for i in range(len(A)):
        for j in range(i+1,i+K+1):
            if i+K <len(A):
                if A[i] == A[j]:
                    # print(A[i], A[j])
                    res.append(i+1)
                    res.append(j+1)
            else:
                break


    print(sum(set(res)))

15 - 双数之和

「双指针」,当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(N2 ) 减少至 O(N)。为什么是 O(N) 呢?这是因为在枚举的过程每一步中,「左指针」会向右移动一个位置(也就是题目中的 b),而「右指针」会向左移动若干个位置,这个与数组的元素有关,但我们知道它一共会移动的位置数为 O(N),均摊下来,每次也向左移动一个位置,因此时间复杂度为 O(N)。

19 - 快慢针

39 - 剪枝操作

122 动态规划大入门, 看我的提交

148 链表排序 基础要练!

204 质数计算

不, 还不够快!

 def isPrime(self, number):  # 选用了一种加强的判断质数的方法; 输入: 一个正数

        if number > 1:
            if number == 2:
                return True

            if number % 2 == 0:  # 这个直接排除了一半的数
                return False

            for current in range(3, int(math.sqrt(number) + 1), 2):  # 这个直接排除了另一半的数

                if number % current == 0:
                    return False

            return True

        return False

厄拉多塞筛法. 比如说求 20 以内质数的个数,首先 0,1 不是质数.2 是第一个质数,然后把 20 以内所有 2 的倍数划去.2 后面紧跟的数即为下一个质数 3,然后把 3 所有的倍数划去.3 后面紧跟的数即为下一个质数 5,再把 5 所有的倍数划去.以此类推.

    def countPrimes(self, n: int) -> int:
        if n < 3:
            return 0
        # 厄拉多塞筛法

        else:
            output = [1] * n  # 首先生成了一个全部为1的列表,长度为n

            output[0], output[1] = 0, 0 # 因为0和1不是质数,所以列表的前两个位置赋值为0

            # 此时从index = 2开始遍历,output[2]==1,即表明第一个质数为2,然后将2的倍数对应的索引
            # 全部赋值为0. 此时output[3] == 1,即表明下一个质数为3,同样划去3的倍数.以此类推.

            for i in range(2, int(n ** 0.5) + 1):
                if output[i] == 1:
                    output[i * i:n:i] = [0] * len(output[i * i:n:i])

            # 最后output中的数字1表明该位置上的索引数为质数,然后求和即可.
        return sum(output)

这个嵌套复制要记住:

        # 从原数组复制一份到 copy_board 中
        copy_board = [[board[row][col] for col in range(cols)] for row in range(rows)]

… 矩阵展平方法:

sum(matrix, []), 返回展平的矩阵[]

..随机数

choice(self.arr)

dic.get(i, 0)

a method in Python that returns the value of the key i in the dictionary dic. If the key i does not exist in the dictionary, it returns 0 as the default value.

…Counter

统计[]中每个元素出现的次数

Licensed under CC BY-NC-SA 4.0
最后更新于 2023-09-29 20:38 CST
本博客已稳定运行
发表了14篇文章 · 总计180.21k字
Powered by Blood, Sweat, and Tears
使用 Hugo 构建 主题 StackJimmy 设计