├── 20241015_greedy_matrices.md ├── 20241022_interval_sorting_monotonicStack.md ├── 20241029_recursion.md ├── 20241105_dp.md ├── 20241112_SegmentTree_BIT.md ├── 20241119_searching.md ├── 20241126_palindrome.md ├── 20241203_knowledgeGraph_cs101-AlgoDS.md ├── 20241217_programming_practice.md ├── 20241224_programming_practice.md ├── 2024fall_LeetCode_problems.md ├── Introduction_to_Computing_(B)-CourseIntroduction_v4.md ├── README.md ├── Report_on_the_Visit_to_Bletchley_Park.pdf ├── application ├── codeforces_guide │ ├── CodeForces-ProblemSet.csv │ ├── Matrix-Freq.csv │ └── codeforces_guide.md └── word_cloud │ ├── 2024fall-cs101__Algo_DS.txt │ ├── blue.jpg │ ├── output0.jpg │ ├── stopword │ ├── baidu_stopwords.txt │ ├── cn_stopwords.txt │ ├── hit_stopwords.txt │ ├── scu_stopwords.txt │ └── stopword.txt │ └── word_cloud.md ├── cheatsheet ├── CheatingSheet-WangYangYuJia.md ├── Cheatsheet(考后版)Z.Xu.md ├── Preparation_24_CAOYikai.md ├── cs101_CheatSheet_24_LIHaoxiang.md ├── cs101_CheatSheet_24_ZENGZibo.md ├── cs101_CheatSheet_LIChengrong.md ├── cs101_Cheatsheet_24_TANYurui.md ├── cs101_Cheatsheet_24_WANGZihang.md ├── cs101_cheatingsheet_HUYunhao.pptx ├── cs101_cheatsheat_24_LINMaoliang.md ├── cs101_cheatsheet_24CHENChangjun.md ├── cs101_cheatsheet_24HUJingyao.md ├── cs101_cheatsheet_24WANGSiyuan.md ├── cs101_cheatsheet_24XIEHaochen.docx ├── cs101_cheatsheet_24_ANGYi.md ├── cs101_cheatsheet_24_CAOYikai.md ├── cs101_cheatsheet_24_CAOYikai.pdf ├── cs101_cheatsheet_24_CHENJunyi.md ├── cs101_cheatsheet_24_CHENXuanzhi.txt ├── cs101_cheatsheet_24_DONGTianze.md ├── cs101_cheatsheet_24_FENGDiyin.docx ├── cs101_cheatsheet_24_HUANGHeming.pdf ├── cs101_cheatsheet_24_HUJiahao.md ├── cs101_cheatsheet_24_HUYang.md ├── cs101_cheatsheet_24_JIARongxu.pdf ├── cs101_cheatsheet_24_JINMingxi.pdf ├── cs101_cheatsheet_24_LIJinghan.md ├── cs101_cheatsheet_24_QIUZelin.md ├── cs101_cheatsheet_24_TANGChenyu.pdf ├── cs101_cheatsheet_24_TANGWeijie.md ├── cs101_cheatsheet_24_WANGLinghui.md ├── cs101_cheatsheet_24_WEIHaoxiang-1.md ├── cs101_cheatsheet_24_WEIHaoxiang-2.docx ├── cs101_cheatsheet_24_WUDaoning.md ├── cs101_cheatsheet_24_WUDi.docx ├── cs101_cheatsheet_24_XUXiantian.docx ├── cs101_cheatsheet_24_YANDingkun.md ├── cs101_cheatsheet_24_YANGXinyao.md ├── cs101_cheatsheet_24_YUTianqi.md ├── cs101_cheatsheet_24_ZHANGJunlong.md ├── cs101_cheatsheet_RENYutong.md ├── cs101_notes_24_YUANJundong.md ├── plycheetsheet.pdf └── python_cheating_paper_24_ZNEGSiyuan.docx ├── code ├── assign_stu_to_ta.py ├── college_distribution.py ├── fortune.py ├── sendEmail.py └── testing_code.py ├── homework ├── assignment1.md ├── assignment2.md ├── assignment3.md ├── assignment4.md ├── assignment5.md ├── assignment6.md ├── assignment7.md ├── assignment8.md ├── assignment9.md ├── assignmentA.md ├── assignmentB.md ├── assignmentC.md ├── assignmentD.md └── assignmentP.md ├── other ├── 2024wtqjhwall.md ├── Dilworth_theorem.md ├── dijkstra_proof.md ├── possible_allocate_memory.md └── wordcloud2024.zip ├── problem_list_at_2024fall.md ├── question1_before_class.md ├── week1_ADS_overview_introduction.md ├── week5_dawn.md └── written_exam └── written_exam_20241210.md /Introduction_to_Computing_(B)-CourseIntroduction_v4.md: -------------------------------------------------------------------------------- 1 | ## 《计算概论(B)》课程简介 2 | 3 | Updated 1623 GMT+8 Aug 23, 2024 4 | 5 | 2023 fall, Complied by Hongfei Yan 6 | 7 | 课程编号:04831410,学分:3,总 学 时:48学时理论课(每周3学时)+ 32学时上机实习课(每周2学时) 8 | 9 | 面向有电脑基础或者对计算机技术感兴趣的同学,零基础同学可以选课。 10 | 11 | ### 一.课程目标 12 | 13 | 本课程旨在培养计算思维,包括数学思维和计算机思维。这种思维的培养需要结合实践过程中的思考和感悟。同学们将通过类似于阅读说明书的方法快速掌握编程语法,然后在应用算法解决实际问题的过程中深入体验计算思维的魅力。为此,我们将练习100余道习题,并提供简洁的解题思路供参考和比较。 14 | 15 | 我们希望,经过本课程的学习,每位同学都能够理解和运用计算思维(主要指计算机思维和数学思维),并深刻体会“天空中没有留下鸟的痕迹,但我已飞过”的含义。这是将回溯算法应用在解题中,对计算机思维的感悟,飞鸟无痕,是类比深度优先搜索(DFS)的回溯。就是说在需要的时候更改数值,然后在不需要的时候恢复数值。 16 | 17 | 课程知识点涵盖两部分。首先是培养学生对计算机的兴趣和学习具有重要意义的三个计算机原理。其次,重点是打牢编程基础,掌握各种算法的应用实践。具体来说: 18 | 19 | 第一部分,从计算机文化历史开始,讲到三个主要的计算机原理:图灵机、进程的虚拟地址空间和 ASCII 表。旨在激发同学的学习兴趣,对计算机建立感性和理性认识。 20 | 21 | 第二部分包括基本语法学习和编程练习。首先,学习 Python 和 C++ 语法 ,掌握与计算机进行交流的语言,侧重于讲授 Python 实现的代码,在两个编程平台上(codeforces.com, cs101.openjudge.cn)运用多种常见算法解决问题。一旦掌握了语法,会进一步练习更多的编程题目。 22 | 23 | ### 二.课程安排 24 | 25 | 1-6周为理论和编程语法掌握部分,7-14周学习和掌握各种常见算法,进行计算思维算法实践,15-16周是课程总结。 26 | 27 | | 1. 课程概述 | 2. 计算机文化 | 3. 开发环境和程序设计语言 | 28 | | ------------------------------- | ------------------------------- | ---------------------------- | 29 | | 4. 计算机原理 | 5. 语法(1/2):变量、操作符 | 6. 语法(2/2):控制结构 | 30 | | 7. 算法(1/6):贪心和动态规划 | 8. 算法分析 | 9. 信息传递和二维数组 | 31 | | 10. 算法(2/6):递归和动态规划 | 11. 算法(3/6):递归和动态规划 | 12. 算法(4/6):遍历(1/3) | 32 | | 13. 算法(5/6):遍历(2/3) | 14. 算法(6/6):遍历(3/3) | 15~16. 课程总结(1/2、2/2) | 33 | 34 | ### 三.推荐教材或参考书/参考资料 35 | 36 | 为了更好地满足本课程的教学需要,我们教师根据自身的专业背景和教学实践经验,自主编写了主要教材《计算思维算法实践》约500页和两份习题集。该教材和习题集是本课程的核心材料,在课程开始时以电子版的形式发给学生。除此之外,学生也可以根据自己的学习水平和兴趣偏好,参考其他相关书籍和资料进一步丰富自己的学术知识和技能。 37 | 38 | 2022年11月发布的ChatGPT也可以作为我们学习计算概论的AI对话系统,它能够帮助学生解答关于计算机文化、计算机原理以及编程实践等方面的问题,从而加深学生对这些知识点的理解。除了AI系统,我们还提供线上和线下答疑服务,确保学生能够得到更加全面和准确的帮助和支持,从而在学习过程中取得更好的效果。无论是在课堂上还是在课后,学生都可以通过这些服务获得必要的辅导和指导,从而更好地完成学习任务,提高自己的学习成果。 39 | 40 | 其他相关书籍,针对零基础的编程学习者,我们建议: 41 | 42 | 1)《Python 编程:从入门到实践》(Eric Matthes),中涉及数据类型和控制结构的部分。或者 https://www.runoob.com/python3/python3-tutorial.html。 这些内容将帮助学习者掌握基本的语法结构和概念,为后续编程学习打下基础。 43 | 44 | 2)在掌握基本语法之后,学习者可以继续阅读《深入理解计算机系统》的第一章,以深入了解计算机的基本概念和原理。初看起来不容易理解,学期进行中,可以反复阅读几遍。 45 | 46 | 掌握了编程的基本语法后,开始深入学习算法和数据结构,我们推荐: 47 | 48 | 3)《算法基础与在线实践》、《算法图解》和《Python数据结构与算法分析》(这是后续课程“数据结构与算法(B)的教材”)三本书籍来加深对算法和数据结构的理解。 49 | 50 | 4)其中,《算法基础与在线实践》包含约80个cs101.openjude.cn上的算法题,初看起来感觉难,可以跳着看各种算法,习题从简单的开始,我们也会提供Python语言编写的答案集。《算法图解》结合图示对理解动态规划很有帮助,这本书看起来相对简单。 51 | 52 | 最后,是进阶书籍: 53 | 54 | 5)如《挑战编程 程序设计竞赛训练手册》和《挑战程序设计竞赛(第2版)》,来提高自己的编程技能和算法水平。通过阅读这些书籍,学习者将掌握更高级的编程技巧,为未来的编程实践做好准备。 55 | 56 | 57 | 58 | 参考书目列表: 59 | 60 | 1) 刘家瑛,郭炜,李文新. 算法基础与在线实践 [M]. 北京:高等教育出版社, 2017.3. 61 | 62 | 2) 秋叶拓哉,岩田阳一,北川宜稔. 挑战程序设计竞赛(第2版)[M]. 巫泽俊,庄俊元,李津羽,译. 北京:人民邮电出版社,2013.7. 63 | 64 | 3) Aditya Bhargava. 算法图解 [M]. 袁国忠,译. 北京:人民邮电出版社,2017.3. (Grokking Algorithms by Aditya Bhargava, published by Manning Publications. Copyright © 2016 by Manning Publications. Simplified Chinese-language edition copyright © 2017 by Posts & Telecom Press.) 65 | 66 | 4) Randal Bryant, David O'Hallaron. 深入理解计算机系统(第3版)(Computer Systems A Programmer's Perspective)[M]. Pearson; 3rd edition (March 2, 2015). 67 | 68 | 5) Michael T. Goodrich, Roberto Tamassia, Michael Goldwasser. Data Structures and Algorithms in Python [M]. John Wiley & Sons, Inc. , Mar 18, 2013. 69 | 70 | 6) Eric Matthes. Python编程:从入门到实践(第2版)(Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming)[M]. 袁国忠,译. 北京:人民邮电出版社,2019. 71 | 72 | img 73 | 74 | ### 四.学生成绩评定方法 75 | 76 | 我们采用综合评定方法对学生成绩进行评定。学生成绩分为三部分,其中xx%的成绩来自每周1次的作业(其中有3次作业对应3次月考)成绩,另外1 - xx%的成绩来自期末上机考试、笔试。我们注重学期中的学习过程评定,因此成绩评定不仅考虑学生的考试成绩,还综合考虑学生的平时表现和参与度。 77 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 2024fall-cs101 2 | 3 | 计概需要练习题目: 4 | 5 | 计算思维算法实践,http://cs101.openjudge.cn/pctbook/ 6 | 7 | 8 | 9 | 作业及每日选做参考答案,在以下题解中: 10 | 11 | 1)2020fall_cs101.openjudge.cn_problems.md 12 | 13 | https://github.com/GMyhf/2020fall-cs101/blob/main/2020fall_cs101.openjudge.cn_problems.md 14 | 15 | 2)2020fall_Codeforces_problems.md 16 | 17 | https://github.com/GMyhf/2020fall-cs101/blob/main/2020fall_Codeforces_problems.md 18 | 19 | 3)2024fall_LeetCode_problems.md 20 | 21 | https://github.com/GMyhf/2024fall-cs101/blob/main/2024fall_LeetCode_problems.md 22 | 23 | 4)sunnywhy_problems.md 24 | 25 | https://github.com/GMyhf/2024spring-cs201/blob/main/sunnywhy_problems.md 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Report_on_the_Visit_to_Bletchley_Park.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/Report_on_the_Visit_to_Bletchley_Park.pdf -------------------------------------------------------------------------------- /application/codeforces_guide/Matrix-Freq.csv: -------------------------------------------------------------------------------- 1 | Tags/Difficult ,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,U 2 | math,646,550,460,440,425,240,128,52,18,8,11,9,7,3,0,0,1,1,0 3 | greedy,511,634,591,486,390,216,87,31,15,11,4,5,5,3,0,0,0,0,0 4 | implementation,897,662,422,335,236,143,57,27,8,7,9,2,5,2,1,0,0,0,0 5 | dp,81,220,355,464,509,328,137,58,16,11,5,5,5,0,0,0,0,0,0 6 | data structures,52,153,251,377,454,294,138,49,20,6,4,6,3,0,1,0,0,0,0 7 | constructive algorithms,285,359,329,312,237,141,70,39,10,9,3,5,5,0,0,0,0,0,0 8 | brute force,352,349,285,271,244,158,56,23,8,5,5,3,2,0,1,0,0,0,0 9 | binary search,58,162,205,217,239,138,51,19,8,4,3,6,2,1,1,0,0,0,0 10 | sortings,164,251,201,175,159,90,38,10,6,4,1,1,2,1,0,0,0,0,0 11 | graphs,47,101,149,229,246,176,82,23,18,7,7,3,6,2,1,0,0,0,0 12 | dfs and similar,41,98,140,206,229,148,64,17,6,3,1,3,1,1,1,0,0,0,0 13 | trees,25,47,94,178,232,158,69,20,6,5,2,2,2,0,0,0,0,0,0 14 | number theory,106,129,126,140,111,88,52,12,2,1,3,1,1,0,0,0,0,0,0 15 | strings,168,156,116,92,99,57,28,16,4,4,1,2,0,0,0,0,0,0,0 16 | combinatorics,27,74,102,120,176,102,56,26,9,1,2,0,1,1,0,0,0,0,0 17 | bitmasks,26,83,85,109,115,93,57,14,3,4,1,0,0,0,0,0,0,0,0 18 | two pointers,37,90,111,136,101,52,22,6,4,1,1,1,1,0,0,0,0,0,0 19 | *special,87,77,70,69,52,36,35,29,23,12,1,1,0,0,0,0,0,0,3 20 | geometry,50,58,59,61,76,36,23,10,12,1,2,0,3,0,1,1,1,0,0 21 | dsu,13,33,46,83,99,52,28,8,1,3,1,1,0,0,0,0,0,0,0 22 | divide and conquer,1,15,30,52,88,68,27,12,6,2,1,1,2,0,0,0,0,0,0 23 | shortest paths,9,34,33,63,66,36,22,4,4,2,0,0,1,0,0,0,0,0,0 24 | games,37,36,46,32,45,22,11,8,5,0,0,0,0,0,0,0,0,1,0 25 | interactive,9,18,27,44,53,39,20,14,9,1,1,0,2,0,0,0,0,0,0 26 | probabilities,8,24,28,57,54,42,15,6,1,0,0,0,2,0,0,0,0,0,0 27 | hashing,4,19,31,53,41,36,24,4,4,1,0,1,0,0,0,0,0,0,0 28 | ,15,21,12,26,22,19,10,8,6,3,4,4,1,2,0,0,0,0,0 29 | flows,4,9,11,19,33,33,20,8,6,2,2,1,0,1,1,0,0,0,0 30 | matrices,4,6,16,18,41,25,9,4,1,0,1,0,0,0,0,0,0,0,0 31 | fft,1,0,4,6,30,24,15,10,6,1,0,0,0,0,0,0,0,0,0 32 | graph matchings,3,10,12,16,17,19,8,2,5,1,0,0,0,0,0,0,0,0,0 33 | string suffix structures,1,2,8,16,24,19,16,4,3,0,0,0,0,0,0,0,0,0,0 34 | ternary search,6,9,13,7,18,3,2,1,0,0,1,0,0,0,0,0,0,0,0 35 | meet-in-the-middle,1,1,4,7,13,13,7,2,1,0,0,1,0,0,0,0,0,0,0 36 | expression parsing,5,10,7,4,6,3,0,1,0,1,0,0,0,0,0,0,0,0,0 37 | 2-sat,3,1,5,8,6,7,1,3,1,0,0,0,0,0,0,0,0,0,0 38 | chinese remainder theorem,2,2,2,5,3,4,0,1,0,0,0,0,0,0,0,0,0,0,0 39 | schedules,1,1,5,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0 40 | -------------------------------------------------------------------------------- /application/codeforces_guide/codeforces_guide.md: -------------------------------------------------------------------------------- 1 | # 抓取codeforce.com题目元数据并分析统计 2 | 3 | Updated 1700 GMT+8 Jan 10 2025 4 | 5 | 2024 fall, Complied by Hongfei Yan 6 | 7 | 8 | 9 | 课程中练习到一些codeforce.com(简记为CF)题目,因此希望统计出CF的题目类型(标签)、难度(编号中的字母)分布。在2023年9月4日,我们通过spider直接抓取题目列表页面,NLP提取,然后进行分析统计(https://github.com/GMyhf/2019fall-cs101/blob/master/20230904_CFTagDifficultyDistribution.md)。由于CF很容易封禁程序抓取,因此改用CF提供的API获得题目数据,然后分析统计。 10 | 11 | 12 | 13 | ```mermaid 14 | graph LR; 15 | A[查看 CF 题目页面列表] --> B[确定所需元数据]; 16 | B --> C[找到 CF 提供的 API]; 17 | C --> D[抓取元数据并保存]; 18 | D --> E[分析和保存]; 19 | E --> F[可视化]; 20 | ``` 21 | 22 |
工作流程图
23 | 24 | 25 | 26 | ## 1.查看 CF 题目页面列表确定所需元数据 27 | 28 | image-20250109155116617 29 | 30 | 题目列表中第一列是数字和字母组合,表示题目编号和字母序增大的难度(Usually, a letter or letter with digit(s) indicating the problem index in a contest),即`{problem['contestId']}{problem['index']}`; 31 | 32 | 第二列是标题(name),即`problem.get('name', '')`; 33 | 34 | 第三列是标签(tags),即`problem.get('tags', [])`; 35 | 36 | 倒数第二列是问题难度(rating (difficulty)),即`problem.get('rating', 0)`; 37 | 38 | 倒数第一列是完成题目人数(Number of users, who solved the problem),即`stat.get('solvedCount', 0)`。 39 | 40 | 41 | 42 | ## 2.找到 CF 提供的API 43 | 44 | https://codeforces.com/apiHelp/objects 45 | 46 | **Problem**: Represents a problem. 47 | 48 | | Field | Description | 49 | | :------------- | :----------------------------------------------------------- | 50 | | contestId | Integer. Can be absent. Id of the contest, containing the problem. | 51 | | problemsetName | String. Can be absent. Short name of the problemset the problem belongs to. | 52 | | index | String. Usually, a letter or letter with digit(s) indicating the problem index in a contest. | 53 | | name | String. Localized. | 54 | | type | Enum: PROGRAMMING, QUESTION. | 55 | | points | Floating point number. Can be absent. Maximum amount of points for the problem. | 56 | | rating | Integer. Can be absent. Problem rating (difficulty). | 57 | | tags | String list. Problem tags. | 58 | 59 | **ProblemStatistics**: Represents a statistic data about a problem. 60 | 61 | | Field | Description | 62 | | :---------- | :----------------------------------------------------------- | 63 | | contestId | Integer. Can be absent. Id of the contest, containing the problem. | 64 | | index | String. Usually, a letter or letter with digit(s) indicating the problem index in a contest. | 65 | | solvedCount | Integer. Number of users, who solved the problem. | 66 | 67 | 68 | 69 | ## 3.抓取元数据并保存 70 | 71 | 代码 cf_guide-1.py 72 | 73 | ```python 74 | import requests 75 | import os 76 | import csv 77 | 78 | 79 | def fetch_problems(): 80 | # 定义API URL 81 | url = "https://codeforces.com/api/problemset.problems" 82 | 83 | try: 84 | response = requests.get(url) 85 | response.raise_for_status() # 检查是否发生HTTP错误 86 | 87 | data = response.json() 88 | 89 | if data['status'] != 'OK': 90 | print(f"API call failed with comment: {data['comment']}") 91 | return None 92 | 93 | problems = data['result']['problems'] 94 | problem_stats = data['result']['problemStatistics'] 95 | 96 | # 将问题和统计信息组合起来 97 | combined_data = [] 98 | for problem in problems: 99 | problem_id = f"{problem['contestId']}{problem['index']}" 100 | for stat in problem_stats: 101 | if stat['contestId'] == problem['contestId'] and stat['index'] == problem['index']: 102 | combined_data.append({ 103 | 'id': problem_id, 104 | 'name': problem.get('name', ''), 105 | 'tags': problem.get('tags', []), 106 | 'rating': problem.get('rating', 0), 107 | 'solvedCount': stat.get('solvedCount', 0), 108 | }) 109 | break 110 | 111 | return combined_data 112 | 113 | except requests.exceptions.HTTPError as e: 114 | print("HTTP error occurred:", e) 115 | return None 116 | except Exception as e: 117 | print("An error occurred:", e) 118 | return None 119 | 120 | 121 | # 调用函数并保存结果 122 | problems = fetch_problems() 123 | if problems: 124 | # for problem in problems: 125 | # print(problem) 126 | # %% output the problem set to csv files 127 | root = os.getcwd() 128 | with open(os.path.join(root, "CodeForces-ProblemSet.csv"), "w", encoding="utf-8") as f_out: 129 | f_csv = csv.writer(f_out) 130 | f_csv.writerow(['ID', 'Name', 'Tags', 'Rating', 'SolvedCount']) 131 | for row in problems: 132 | print(row) 133 | f_csv.writerow([row['id'], row['name'], ','.join(row['tags']), row['rating'], row['solvedCount']]) 134 | f_out.close() 135 | else: 136 | print("Failed to fetch the problems.") 137 | 138 | ``` 139 | 140 | 141 | 142 | ## 4.分析和保存 143 | 144 | 代码 cf_guide-2.py 145 | 146 | ```python 147 | import csv 148 | import os 149 | import re 150 | 151 | root = os.getcwd() 152 | filepath = os.path.join(root, "CodeForces-ProblemSet.csv") 153 | 154 | codeforces = {} 155 | 156 | with open(filepath, "r", encoding="utf-8") as f_in: 157 | f_csv = csv.reader(f_in) 158 | header = next(f_csv) # 读取文件头 159 | for row in f_csv: 160 | id = row[0] 161 | if id == "ID": 162 | continue 163 | 164 | name = row[1] 165 | tags = row[2].split(",") 166 | tags = [tag.strip() for tag in tags] 167 | rating = row[3] 168 | solvedCount = row[4] 169 | codeforces[id] = {'name': name, 'tags': tags, 'rating': rating, 'solvedCount': solvedCount} 170 | f_in.close() 171 | 172 | # %% analyze the problem set 173 | # initialize the difficult and tag list 174 | difficult_level = {} 175 | tags_level = {} 176 | for id in codeforces: 177 | match = re.findall('([A-Z])', id) 178 | if match: 179 | difficult = match[0] 180 | tags = codeforces[id]['tags'] 181 | difficult_level[difficult] = difficult_level.get(difficult, 0) + 1 182 | for tag in tags: 183 | tags_level[tag] = tags_level.get(tag, 0) + 1 184 | 185 | 186 | tag_level = sorted(tags_level.items(), key=lambda x: x[1], reverse=True) 187 | tag_list = [_[0] for _ in tag_level] 188 | print(tag_list) 189 | 190 | difficult_level = sorted(difficult_level.items()) 191 | difficult_list = [_[0] for _ in difficult_level] 192 | print(difficult_list) 193 | 194 | # initialize the 2D relationships matrix 195 | # matrix_freq: the number of tag frequency for each difficult level 196 | matrix_freq = [[0] * len(difficult_list) for _ in range(len(tag_list))] 197 | 198 | # construct the 2D relationships matrix 199 | for id in codeforces: 200 | match = re.findall('([A-Z])', id) 201 | if match: 202 | difficult = match[0] 203 | difficult_id = difficult_list.index(difficult) 204 | tags = codeforces[id]['tags'] 205 | for tag in tags: 206 | tag_id = tag_list.index(tag) 207 | matrix_freq[tag_id][difficult_id] += 1 208 | 209 | # %% visualization 210 | root = os.getcwd() 211 | def outputMatrix(name, data): 212 | with open(os.path.join(root, name), "w", encoding="utf-8") as f_out: 213 | f_csv = csv.writer(f_out) 214 | f_csv.writerow(['Tags/Difficult '] + difficult_list) 215 | for i in range(len(tag_list)): 216 | tag = tag_list[i] 217 | f_csv.writerow([tag] + data[i]) 218 | f_out.close() 219 | return 220 | 221 | outputMatrix('Matrix-Freq.csv', matrix_freq) 222 | ``` 223 | 224 | 225 | 226 | ## 5.可视化 227 | 228 | 代码 heapmap_Matrix-Freq.py 229 | 230 | ```python 231 | # ref: https://stackoverflow.com/questions/37790429/seaborn-heatmap-using-pandas-dataframe 232 | # https://seaborn.pydata.org/generated/seaborn.heatmap.html 233 | import pandas as pd 234 | import seaborn as sns 235 | import matplotlib.pyplot as plt 236 | 237 | Matrix_Freq = pd.read_csv("Matrix-Freq.csv", index_col=0) 238 | #print(Matrix_Freq) 239 | 240 | fig, ax = plt.subplots(figsize=(14, 9)) 241 | 242 | sns.heatmap(Matrix_Freq, annot=True, fmt="d", linewidths=.5, cmap='viridis') 243 | 244 | plt.show() 245 | ``` 246 | 247 | 248 | 249 | pycharm中运行这个可视化,竟然很多单元格是空的,找了半天找不到bug。在anaconda/spyder中运行,可视化结果正常如下。 250 | 251 | ![image-20250109183346524](https://raw.githubusercontent.com/GMyhf/img/main/img/image-20250109183346524.png) 252 | 253 | 254 | 255 | -------------------------------------------------------------------------------- /application/word_cloud/blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/application/word_cloud/blue.jpg -------------------------------------------------------------------------------- /application/word_cloud/output0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/application/word_cloud/output0.jpg -------------------------------------------------------------------------------- /application/word_cloud/stopword/baidu_stopwords.txt: -------------------------------------------------------------------------------- 1 | -- 2 | ? 3 | “ 4 | ” 5 | 》 6 | -- 7 | able 8 | about 9 | above 10 | according 11 | accordingly 12 | across 13 | actually 14 | after 15 | afterwards 16 | again 17 | against 18 | ain't 19 | all 20 | allow 21 | allows 22 | almost 23 | alone 24 | along 25 | already 26 | also 27 | although 28 | always 29 | am 30 | among 31 | amongst 32 | an 33 | and 34 | another 35 | any 36 | anybody 37 | anyhow 38 | anyone 39 | anything 40 | anyway 41 | anyways 42 | anywhere 43 | apart 44 | appear 45 | appreciate 46 | appropriate 47 | are 48 | aren't 49 | around 50 | as 51 | a's 52 | aside 53 | ask 54 | asking 55 | associated 56 | at 57 | available 58 | away 59 | awfully 60 | be 61 | became 62 | because 63 | become 64 | becomes 65 | becoming 66 | been 67 | before 68 | beforehand 69 | behind 70 | being 71 | believe 72 | below 73 | beside 74 | besides 75 | best 76 | better 77 | between 78 | beyond 79 | both 80 | brief 81 | but 82 | by 83 | came 84 | can 85 | cannot 86 | cant 87 | can't 88 | cause 89 | causes 90 | certain 91 | certainly 92 | changes 93 | clearly 94 | c'mon 95 | co 96 | com 97 | come 98 | comes 99 | concerning 100 | consequently 101 | consider 102 | considering 103 | contain 104 | containing 105 | contains 106 | corresponding 107 | could 108 | couldn't 109 | course 110 | c's 111 | currently 112 | definitely 113 | described 114 | despite 115 | did 116 | didn't 117 | different 118 | do 119 | does 120 | doesn't 121 | doing 122 | done 123 | don't 124 | down 125 | downwards 126 | during 127 | each 128 | edu 129 | eg 130 | eight 131 | either 132 | else 133 | elsewhere 134 | enough 135 | entirely 136 | especially 137 | et 138 | etc 139 | even 140 | ever 141 | every 142 | everybody 143 | everyone 144 | everything 145 | everywhere 146 | ex 147 | exactly 148 | example 149 | except 150 | far 151 | few 152 | fifth 153 | first 154 | five 155 | followed 156 | following 157 | follows 158 | for 159 | former 160 | formerly 161 | forth 162 | four 163 | from 164 | further 165 | furthermore 166 | get 167 | gets 168 | getting 169 | given 170 | gives 171 | go 172 | goes 173 | going 174 | gone 175 | got 176 | gotten 177 | greetings 178 | had 179 | hadn't 180 | happens 181 | hardly 182 | has 183 | hasn't 184 | have 185 | haven't 186 | having 187 | he 188 | hello 189 | help 190 | hence 191 | her 192 | here 193 | hereafter 194 | hereby 195 | herein 196 | here's 197 | hereupon 198 | hers 199 | herself 200 | he's 201 | hi 202 | him 203 | himself 204 | his 205 | hither 206 | hopefully 207 | how 208 | howbeit 209 | however 210 | i'd 211 | ie 212 | if 213 | ignored 214 | i'll 215 | i'm 216 | immediate 217 | in 218 | inasmuch 219 | inc 220 | indeed 221 | indicate 222 | indicated 223 | indicates 224 | inner 225 | insofar 226 | instead 227 | into 228 | inward 229 | is 230 | isn't 231 | it 232 | it'd 233 | it'll 234 | its 235 | it's 236 | itself 237 | i've 238 | just 239 | keep 240 | keeps 241 | kept 242 | know 243 | known 244 | knows 245 | last 246 | lately 247 | later 248 | latter 249 | latterly 250 | least 251 | less 252 | lest 253 | let 254 | let's 255 | like 256 | liked 257 | likely 258 | little 259 | look 260 | looking 261 | looks 262 | ltd 263 | mainly 264 | many 265 | may 266 | maybe 267 | me 268 | mean 269 | meanwhile 270 | merely 271 | might 272 | more 273 | moreover 274 | most 275 | mostly 276 | much 277 | must 278 | my 279 | myself 280 | name 281 | namely 282 | nd 283 | near 284 | nearly 285 | necessary 286 | need 287 | needs 288 | neither 289 | never 290 | nevertheless 291 | new 292 | next 293 | nine 294 | no 295 | nobody 296 | non 297 | none 298 | noone 299 | nor 300 | normally 301 | not 302 | nothing 303 | novel 304 | now 305 | nowhere 306 | obviously 307 | of 308 | off 309 | often 310 | oh 311 | ok 312 | okay 313 | old 314 | on 315 | once 316 | one 317 | ones 318 | only 319 | onto 320 | or 321 | other 322 | others 323 | otherwise 324 | ought 325 | our 326 | ours 327 | ourselves 328 | out 329 | outside 330 | over 331 | overall 332 | own 333 | particular 334 | particularly 335 | per 336 | perhaps 337 | placed 338 | please 339 | plus 340 | possible 341 | presumably 342 | probably 343 | provides 344 | que 345 | quite 346 | qv 347 | rather 348 | rd 349 | re 350 | really 351 | reasonably 352 | regarding 353 | regardless 354 | regards 355 | relatively 356 | respectively 357 | right 358 | said 359 | same 360 | saw 361 | say 362 | saying 363 | says 364 | second 365 | secondly 366 | see 367 | seeing 368 | seem 369 | seemed 370 | seeming 371 | seems 372 | seen 373 | self 374 | selves 375 | sensible 376 | sent 377 | serious 378 | seriously 379 | seven 380 | several 381 | shall 382 | she 383 | should 384 | shouldn't 385 | since 386 | six 387 | so 388 | some 389 | somebody 390 | somehow 391 | someone 392 | something 393 | sometime 394 | sometimes 395 | somewhat 396 | somewhere 397 | soon 398 | sorry 399 | specified 400 | specify 401 | specifying 402 | still 403 | sub 404 | such 405 | sup 406 | sure 407 | take 408 | taken 409 | tell 410 | tends 411 | th 412 | than 413 | thank 414 | thanks 415 | thanx 416 | that 417 | thats 418 | that's 419 | the 420 | their 421 | theirs 422 | them 423 | themselves 424 | then 425 | thence 426 | there 427 | thereafter 428 | thereby 429 | therefore 430 | therein 431 | theres 432 | there's 433 | thereupon 434 | these 435 | they 436 | they'd 437 | they'll 438 | they're 439 | they've 440 | think 441 | third 442 | this 443 | thorough 444 | thoroughly 445 | those 446 | though 447 | three 448 | through 449 | throughout 450 | thru 451 | thus 452 | to 453 | together 454 | too 455 | took 456 | toward 457 | towards 458 | tried 459 | tries 460 | truly 461 | try 462 | trying 463 | t's 464 | twice 465 | two 466 | un 467 | under 468 | unfortunately 469 | unless 470 | unlikely 471 | until 472 | unto 473 | up 474 | upon 475 | us 476 | use 477 | used 478 | useful 479 | uses 480 | using 481 | usually 482 | value 483 | various 484 | very 485 | via 486 | viz 487 | vs 488 | want 489 | wants 490 | was 491 | wasn't 492 | way 493 | we 494 | we'd 495 | welcome 496 | well 497 | we'll 498 | went 499 | were 500 | we're 501 | weren't 502 | we've 503 | what 504 | whatever 505 | what's 506 | when 507 | whence 508 | whenever 509 | where 510 | whereafter 511 | whereas 512 | whereby 513 | wherein 514 | where's 515 | whereupon 516 | wherever 517 | whether 518 | which 519 | while 520 | whither 521 | who 522 | whoever 523 | whole 524 | whom 525 | who's 526 | whose 527 | why 528 | will 529 | willing 530 | wish 531 | with 532 | within 533 | without 534 | wonder 535 | won't 536 | would 537 | wouldn't 538 | yes 539 | yet 540 | you 541 | you'd 542 | you'll 543 | your 544 | you're 545 | yours 546 | yourself 547 | yourselves 548 | you've 549 | zero 550 | zt 551 | ZT 552 | zz 553 | ZZ 554 | 一 555 | 一下 556 | 一些 557 | 一切 558 | 一则 559 | 一天 560 | 一定 561 | 一方面 562 | 一旦 563 | 一时 564 | 一来 565 | 一样 566 | 一次 567 | 一片 568 | 一直 569 | 一致 570 | 一般 571 | 一起 572 | 一边 573 | 一面 574 | 万一 575 | 上下 576 | 上升 577 | 上去 578 | 上来 579 | 上述 580 | 上面 581 | 下列 582 | 下去 583 | 下来 584 | 下面 585 | 不一 586 | 不久 587 | 不仅 588 | 不会 589 | 不但 590 | 不光 591 | 不单 592 | 不变 593 | 不只 594 | 不可 595 | 不同 596 | 不够 597 | 不如 598 | 不得 599 | 不怕 600 | 不惟 601 | 不成 602 | 不拘 603 | 不敢 604 | 不断 605 | 不是 606 | 不比 607 | 不然 608 | 不特 609 | 不独 610 | 不管 611 | 不能 612 | 不要 613 | 不论 614 | 不足 615 | 不过 616 | 不问 617 | 与 618 | 与其 619 | 与否 620 | 与此同时 621 | 专门 622 | 且 623 | 两者 624 | 严格 625 | 严重 626 | 个 627 | 个人 628 | 个别 629 | 中小 630 | 中间 631 | 丰富 632 | 临 633 | 为 634 | 为主 635 | 为了 636 | 为什么 637 | 为什麽 638 | 为何 639 | 为着 640 | 主张 641 | 主要 642 | 举行 643 | 乃 644 | 乃至 645 | 么 646 | 之 647 | 之一 648 | 之前 649 | 之后 650 | 之後 651 | 之所以 652 | 之类 653 | 乌乎 654 | 乎 655 | 乘 656 | 也 657 | 也好 658 | 也是 659 | 也罢 660 | 了 661 | 了解 662 | 争取 663 | 于 664 | 于是 665 | 于是乎 666 | 云云 667 | 互相 668 | 产生 669 | 人们 670 | 人家 671 | 什么 672 | 什么样 673 | 什麽 674 | 今后 675 | 今天 676 | 今年 677 | 今後 678 | 仍然 679 | 从 680 | 从事 681 | 从而 682 | 他 683 | 他人 684 | 他们 685 | 他的 686 | 代替 687 | 以 688 | 以上 689 | 以下 690 | 以为 691 | 以便 692 | 以免 693 | 以前 694 | 以及 695 | 以后 696 | 以外 697 | 以後 698 | 以来 699 | 以至 700 | 以至于 701 | 以致 702 | 们 703 | 任 704 | 任何 705 | 任凭 706 | 任务 707 | 企图 708 | 伟大 709 | 似乎 710 | 似的 711 | 但 712 | 但是 713 | 何 714 | 何况 715 | 何处 716 | 何时 717 | 作为 718 | 你 719 | 你们 720 | 你的 721 | 使得 722 | 使用 723 | 例如 724 | 依 725 | 依照 726 | 依靠 727 | 促进 728 | 保持 729 | 俺 730 | 俺们 731 | 倘 732 | 倘使 733 | 倘或 734 | 倘然 735 | 倘若 736 | 假使 737 | 假如 738 | 假若 739 | 做到 740 | 像 741 | 允许 742 | 充分 743 | 先后 744 | 先後 745 | 先生 746 | 全部 747 | 全面 748 | 兮 749 | 共同 750 | 关于 751 | 其 752 | 其一 753 | 其中 754 | 其二 755 | 其他 756 | 其余 757 | 其它 758 | 其实 759 | 其次 760 | 具体 761 | 具体地说 762 | 具体说来 763 | 具有 764 | 再者 765 | 再说 766 | 冒 767 | 冲 768 | 决定 769 | 况且 770 | 准备 771 | 几 772 | 几乎 773 | 几时 774 | 凭 775 | 凭借 776 | 出去 777 | 出来 778 | 出现 779 | 分别 780 | 则 781 | 别 782 | 别的 783 | 别说 784 | 到 785 | 前后 786 | 前者 787 | 前进 788 | 前面 789 | 加之 790 | 加以 791 | 加入 792 | 加强 793 | 十分 794 | 即 795 | 即令 796 | 即使 797 | 即便 798 | 即或 799 | 即若 800 | 却不 801 | 原来 802 | 又 803 | 及 804 | 及其 805 | 及时 806 | 及至 807 | 双方 808 | 反之 809 | 反应 810 | 反映 811 | 反过来 812 | 反过来说 813 | 取得 814 | 受到 815 | 变成 816 | 另 817 | 另一方面 818 | 另外 819 | 只是 820 | 只有 821 | 只要 822 | 只限 823 | 叫 824 | 叫做 825 | 召开 826 | 叮咚 827 | 可 828 | 可以 829 | 可是 830 | 可能 831 | 可见 832 | 各 833 | 各个 834 | 各人 835 | 各位 836 | 各地 837 | 各种 838 | 各级 839 | 各自 840 | 合理 841 | 同 842 | 同一 843 | 同时 844 | 同样 845 | 后来 846 | 后面 847 | 向 848 | 向着 849 | 吓 850 | 吗 851 | 否则 852 | 吧 853 | 吧哒 854 | 吱 855 | 呀 856 | 呃 857 | 呕 858 | 呗 859 | 呜 860 | 呜呼 861 | 呢 862 | 周围 863 | 呵 864 | 呸 865 | 呼哧 866 | 咋 867 | 和 868 | 咚 869 | 咦 870 | 咱 871 | 咱们 872 | 咳 873 | 哇 874 | 哈 875 | 哈哈 876 | 哉 877 | 哎 878 | 哎呀 879 | 哎哟 880 | 哗 881 | 哟 882 | 哦 883 | 哩 884 | 哪 885 | 哪个 886 | 哪些 887 | 哪儿 888 | 哪天 889 | 哪年 890 | 哪怕 891 | 哪样 892 | 哪边 893 | 哪里 894 | 哼 895 | 哼唷 896 | 唉 897 | 啊 898 | 啐 899 | 啥 900 | 啦 901 | 啪达 902 | 喂 903 | 喏 904 | 喔唷 905 | 嗡嗡 906 | 嗬 907 | 嗯 908 | 嗳 909 | 嘎 910 | 嘎登 911 | 嘘 912 | 嘛 913 | 嘻 914 | 嘿 915 | 因 916 | 因为 917 | 因此 918 | 因而 919 | 固然 920 | 在 921 | 在下 922 | 地 923 | 坚决 924 | 坚持 925 | 基本 926 | 处理 927 | 复杂 928 | 多 929 | 多少 930 | 多数 931 | 多次 932 | 大力 933 | 大多数 934 | 大大 935 | 大家 936 | 大批 937 | 大约 938 | 大量 939 | 失去 940 | 她 941 | 她们 942 | 她的 943 | 好的 944 | 好象 945 | 如 946 | 如上所述 947 | 如下 948 | 如何 949 | 如其 950 | 如果 951 | 如此 952 | 如若 953 | 存在 954 | 宁 955 | 宁可 956 | 宁愿 957 | 宁肯 958 | 它 959 | 它们 960 | 它们的 961 | 它的 962 | 安全 963 | 完全 964 | 完成 965 | 实现 966 | 实际 967 | 宣布 968 | 容易 969 | 密切 970 | 对 971 | 对于 972 | 对应 973 | 将 974 | 少数 975 | 尔后 976 | 尚且 977 | 尤其 978 | 就 979 | 就是 980 | 就是说 981 | 尽 982 | 尽管 983 | 属于 984 | 岂但 985 | 左右 986 | 巨大 987 | 巩固 988 | 己 989 | 已经 990 | 帮助 991 | 常常 992 | 并 993 | 并不 994 | 并不是 995 | 并且 996 | 并没有 997 | 广大 998 | 广泛 999 | 应当 1000 | 应用 1001 | 应该 1002 | 开外 1003 | 开始 1004 | 开展 1005 | 引起 1006 | 强烈 1007 | 强调 1008 | 归 1009 | 当 1010 | 当前 1011 | 当时 1012 | 当然 1013 | 当着 1014 | 形成 1015 | 彻底 1016 | 彼 1017 | 彼此 1018 | 往 1019 | 往往 1020 | 待 1021 | 後来 1022 | 後面 1023 | 得 1024 | 得出 1025 | 得到 1026 | 心里 1027 | 必然 1028 | 必要 1029 | 必须 1030 | 怎 1031 | 怎么 1032 | 怎么办 1033 | 怎么样 1034 | 怎样 1035 | 怎麽 1036 | 总之 1037 | 总是 1038 | 总的来看 1039 | 总的来说 1040 | 总的说来 1041 | 总结 1042 | 总而言之 1043 | 恰恰相反 1044 | 您 1045 | 意思 1046 | 愿意 1047 | 慢说 1048 | 成为 1049 | 我 1050 | 我们 1051 | 我的 1052 | 或 1053 | 或是 1054 | 或者 1055 | 战斗 1056 | 所 1057 | 所以 1058 | 所有 1059 | 所谓 1060 | 打 1061 | 扩大 1062 | 把 1063 | 抑或 1064 | 拿 1065 | 按 1066 | 按照 1067 | 换句话说 1068 | 换言之 1069 | 据 1070 | 掌握 1071 | 接着 1072 | 接著 1073 | 故 1074 | 故此 1075 | 整个 1076 | 方便 1077 | 方面 1078 | 旁人 1079 | 无宁 1080 | 无法 1081 | 无论 1082 | 既 1083 | 既是 1084 | 既然 1085 | 时候 1086 | 明显 1087 | 明确 1088 | 是 1089 | 是否 1090 | 是的 1091 | 显然 1092 | 显著 1093 | 普通 1094 | 普遍 1095 | 更加 1096 | 曾经 1097 | 替 1098 | 最后 1099 | 最大 1100 | 最好 1101 | 最後 1102 | 最近 1103 | 最高 1104 | 有 1105 | 有些 1106 | 有关 1107 | 有利 1108 | 有力 1109 | 有所 1110 | 有效 1111 | 有时 1112 | 有点 1113 | 有的 1114 | 有着 1115 | 有著 1116 | 望 1117 | 朝 1118 | 朝着 1119 | 本 1120 | 本着 1121 | 来 1122 | 来着 1123 | 极了 1124 | 构成 1125 | 果然 1126 | 果真 1127 | 某 1128 | 某个 1129 | 某些 1130 | 根据 1131 | 根本 1132 | 欢迎 1133 | 正在 1134 | 正如 1135 | 正常 1136 | 此 1137 | 此外 1138 | 此时 1139 | 此间 1140 | 毋宁 1141 | 每 1142 | 每个 1143 | 每天 1144 | 每年 1145 | 每当 1146 | 比 1147 | 比如 1148 | 比方 1149 | 比较 1150 | 毫不 1151 | 没有 1152 | 沿 1153 | 沿着 1154 | 注意 1155 | 深入 1156 | 清楚 1157 | 满足 1158 | 漫说 1159 | 焉 1160 | 然则 1161 | 然后 1162 | 然後 1163 | 然而 1164 | 照 1165 | 照着 1166 | 特别是 1167 | 特殊 1168 | 特点 1169 | 现代 1170 | 现在 1171 | 甚么 1172 | 甚而 1173 | 甚至 1174 | 用 1175 | 由 1176 | 由于 1177 | 由此可见 1178 | 的 1179 | 的话 1180 | 目前 1181 | 直到 1182 | 直接 1183 | 相似 1184 | 相信 1185 | 相反 1186 | 相同 1187 | 相对 1188 | 相对而言 1189 | 相应 1190 | 相当 1191 | 相等 1192 | 省得 1193 | 看出 1194 | 看到 1195 | 看来 1196 | 看看 1197 | 看见 1198 | 真是 1199 | 真正 1200 | 着 1201 | 着呢 1202 | 矣 1203 | 知道 1204 | 确定 1205 | 离 1206 | 积极 1207 | 移动 1208 | 突出 1209 | 突然 1210 | 立即 1211 | 第 1212 | 等 1213 | 等等 1214 | 管 1215 | 紧接着 1216 | 纵 1217 | 纵令 1218 | 纵使 1219 | 纵然 1220 | 练习 1221 | 组成 1222 | 经 1223 | 经常 1224 | 经过 1225 | 结合 1226 | 结果 1227 | 给 1228 | 绝对 1229 | 继续 1230 | 继而 1231 | 维持 1232 | 综上所述 1233 | 罢了 1234 | 考虑 1235 | 者 1236 | 而 1237 | 而且 1238 | 而况 1239 | 而外 1240 | 而已 1241 | 而是 1242 | 而言 1243 | 联系 1244 | 能 1245 | 能否 1246 | 能够 1247 | 腾 1248 | 自 1249 | 自个儿 1250 | 自从 1251 | 自各儿 1252 | 自家 1253 | 自己 1254 | 自身 1255 | 至 1256 | 至于 1257 | 良好 1258 | 若 1259 | 若是 1260 | 若非 1261 | 范围 1262 | 莫若 1263 | 获得 1264 | 虽 1265 | 虽则 1266 | 虽然 1267 | 虽说 1268 | 行为 1269 | 行动 1270 | 表明 1271 | 表示 1272 | 被 1273 | 要 1274 | 要不 1275 | 要不是 1276 | 要不然 1277 | 要么 1278 | 要是 1279 | 要求 1280 | 规定 1281 | 觉得 1282 | 认为 1283 | 认真 1284 | 认识 1285 | 让 1286 | 许多 1287 | 论 1288 | 设使 1289 | 设若 1290 | 该 1291 | 说明 1292 | 诸位 1293 | 谁 1294 | 谁知 1295 | 赶 1296 | 起 1297 | 起来 1298 | 起见 1299 | 趁 1300 | 趁着 1301 | 越是 1302 | 跟 1303 | 转动 1304 | 转变 1305 | 转贴 1306 | 较 1307 | 较之 1308 | 边 1309 | 达到 1310 | 迅速 1311 | 过 1312 | 过去 1313 | 过来 1314 | 运用 1315 | 还是 1316 | 还有 1317 | 这 1318 | 这个 1319 | 这么 1320 | 这么些 1321 | 这么样 1322 | 这么点儿 1323 | 这些 1324 | 这会儿 1325 | 这儿 1326 | 这就是说 1327 | 这时 1328 | 这样 1329 | 这点 1330 | 这种 1331 | 这边 1332 | 这里 1333 | 这麽 1334 | 进入 1335 | 进步 1336 | 进而 1337 | 进行 1338 | 连 1339 | 连同 1340 | 适应 1341 | 适当 1342 | 适用 1343 | 逐步 1344 | 逐渐 1345 | 通常 1346 | 通过 1347 | 造成 1348 | 遇到 1349 | 遭到 1350 | 避免 1351 | 那 1352 | 那个 1353 | 那么 1354 | 那么些 1355 | 那么样 1356 | 那些 1357 | 那会儿 1358 | 那儿 1359 | 那时 1360 | 那样 1361 | 那边 1362 | 那里 1363 | 那麽 1364 | 部分 1365 | 鄙人 1366 | 采取 1367 | 里面 1368 | 重大 1369 | 重新 1370 | 重要 1371 | 鉴于 1372 | 问题 1373 | 防止 1374 | 阿 1375 | 附近 1376 | 限制 1377 | 除 1378 | 除了 1379 | 除此之外 1380 | 除非 1381 | 随 1382 | 随着 1383 | 随著 1384 | 集中 1385 | 需要 1386 | 非但 1387 | 非常 1388 | 非徒 1389 | 靠 1390 | 顺 1391 | 顺着 1392 | 首先 1393 | 高兴 1394 | 是不是 1395 | 说说 1396 | 1397 | -------------------------------------------------------------------------------- /application/word_cloud/stopword/cn_stopwords.txt: -------------------------------------------------------------------------------- 1 | $ 2 | 0 3 | 1 4 | 2 5 | 3 6 | 4 7 | 5 8 | 6 9 | 7 10 | 8 11 | 9 12 | ? 13 | _ 14 | “ 15 | ” 16 | 、 17 | 。 18 | 《 19 | 》 20 | 一 21 | 一些 22 | 一何 23 | 一切 24 | 一则 25 | 一方面 26 | 一旦 27 | 一来 28 | 一样 29 | 一般 30 | 一转眼 31 | 万一 32 | 上 33 | 上下 34 | 下 35 | 不 36 | 不仅 37 | 不但 38 | 不光 39 | 不单 40 | 不只 41 | 不外乎 42 | 不如 43 | 不妨 44 | 不尽 45 | 不尽然 46 | 不得 47 | 不怕 48 | 不惟 49 | 不成 50 | 不拘 51 | 不料 52 | 不是 53 | 不比 54 | 不然 55 | 不特 56 | 不独 57 | 不管 58 | 不至于 59 | 不若 60 | 不论 61 | 不过 62 | 不问 63 | 与 64 | 与其 65 | 与其说 66 | 与否 67 | 与此同时 68 | 且 69 | 且不说 70 | 且说 71 | 两者 72 | 个 73 | 个别 74 | 临 75 | 为 76 | 为了 77 | 为什么 78 | 为何 79 | 为止 80 | 为此 81 | 为着 82 | 乃 83 | 乃至 84 | 乃至于 85 | 么 86 | 之 87 | 之一 88 | 之所以 89 | 之类 90 | 乌乎 91 | 乎 92 | 乘 93 | 也 94 | 也好 95 | 也罢 96 | 了 97 | 二来 98 | 于 99 | 于是 100 | 于是乎 101 | 云云 102 | 云尔 103 | 些 104 | 亦 105 | 人 106 | 人们 107 | 人家 108 | 什么 109 | 什么样 110 | 今 111 | 介于 112 | 仍 113 | 仍旧 114 | 从 115 | 从此 116 | 从而 117 | 他 118 | 他人 119 | 他们 120 | 以 121 | 以上 122 | 以为 123 | 以便 124 | 以免 125 | 以及 126 | 以故 127 | 以期 128 | 以来 129 | 以至 130 | 以至于 131 | 以致 132 | 们 133 | 任 134 | 任何 135 | 任凭 136 | 似的 137 | 但 138 | 但凡 139 | 但是 140 | 何 141 | 何以 142 | 何况 143 | 何处 144 | 何时 145 | 余外 146 | 作为 147 | 你 148 | 你们 149 | 使 150 | 使得 151 | 例如 152 | 依 153 | 依据 154 | 依照 155 | 便于 156 | 俺 157 | 俺们 158 | 倘 159 | 倘使 160 | 倘或 161 | 倘然 162 | 倘若 163 | 借 164 | 假使 165 | 假如 166 | 假若 167 | 傥然 168 | 像 169 | 儿 170 | 先不先 171 | 光是 172 | 全体 173 | 全部 174 | 兮 175 | 关于 176 | 其 177 | 其一 178 | 其中 179 | 其二 180 | 其他 181 | 其余 182 | 其它 183 | 其次 184 | 具体地说 185 | 具体说来 186 | 兼之 187 | 内 188 | 再 189 | 再其次 190 | 再则 191 | 再有 192 | 再者 193 | 再者说 194 | 再说 195 | 冒 196 | 冲 197 | 况且 198 | 几 199 | 几时 200 | 凡 201 | 凡是 202 | 凭 203 | 凭借 204 | 出于 205 | 出来 206 | 分别 207 | 则 208 | 则甚 209 | 别 210 | 别人 211 | 别处 212 | 别是 213 | 别的 214 | 别管 215 | 别说 216 | 到 217 | 前后 218 | 前此 219 | 前者 220 | 加之 221 | 加以 222 | 即 223 | 即令 224 | 即使 225 | 即便 226 | 即如 227 | 即或 228 | 即若 229 | 却 230 | 去 231 | 又 232 | 又及 233 | 及 234 | 及其 235 | 及至 236 | 反之 237 | 反而 238 | 反过来 239 | 反过来说 240 | 受到 241 | 另 242 | 另一方面 243 | 另外 244 | 另悉 245 | 只 246 | 只当 247 | 只怕 248 | 只是 249 | 只有 250 | 只消 251 | 只要 252 | 只限 253 | 叫 254 | 叮咚 255 | 可 256 | 可以 257 | 可是 258 | 可见 259 | 各 260 | 各个 261 | 各位 262 | 各种 263 | 各自 264 | 同 265 | 同时 266 | 后 267 | 后者 268 | 向 269 | 向使 270 | 向着 271 | 吓 272 | 吗 273 | 否则 274 | 吧 275 | 吧哒 276 | 吱 277 | 呀 278 | 呃 279 | 呕 280 | 呗 281 | 呜 282 | 呜呼 283 | 呢 284 | 呵 285 | 呵呵 286 | 呸 287 | 呼哧 288 | 咋 289 | 和 290 | 咚 291 | 咦 292 | 咧 293 | 咱 294 | 咱们 295 | 咳 296 | 哇 297 | 哈 298 | 哈哈 299 | 哉 300 | 哎 301 | 哎呀 302 | 哎哟 303 | 哗 304 | 哟 305 | 哦 306 | 哩 307 | 哪 308 | 哪个 309 | 哪些 310 | 哪儿 311 | 哪天 312 | 哪年 313 | 哪怕 314 | 哪样 315 | 哪边 316 | 哪里 317 | 哼 318 | 哼唷 319 | 唉 320 | 唯有 321 | 啊 322 | 啐 323 | 啥 324 | 啦 325 | 啪达 326 | 啷当 327 | 喂 328 | 喏 329 | 喔唷 330 | 喽 331 | 嗡 332 | 嗡嗡 333 | 嗬 334 | 嗯 335 | 嗳 336 | 嘎 337 | 嘎登 338 | 嘘 339 | 嘛 340 | 嘻 341 | 嘿 342 | 嘿嘿 343 | 因 344 | 因为 345 | 因了 346 | 因此 347 | 因着 348 | 因而 349 | 固然 350 | 在 351 | 在下 352 | 在于 353 | 地 354 | 基于 355 | 处在 356 | 多 357 | 多么 358 | 多少 359 | 大 360 | 大家 361 | 她 362 | 她们 363 | 好 364 | 如 365 | 如上 366 | 如上所述 367 | 如下 368 | 如何 369 | 如其 370 | 如同 371 | 如是 372 | 如果 373 | 如此 374 | 如若 375 | 始而 376 | 孰料 377 | 孰知 378 | 宁 379 | 宁可 380 | 宁愿 381 | 宁肯 382 | 它 383 | 它们 384 | 对 385 | 对于 386 | 对待 387 | 对方 388 | 对比 389 | 将 390 | 小 391 | 尔 392 | 尔后 393 | 尔尔 394 | 尚且 395 | 就 396 | 就是 397 | 就是了 398 | 就是说 399 | 就算 400 | 就要 401 | 尽 402 | 尽管 403 | 尽管如此 404 | 岂但 405 | 己 406 | 已 407 | 已矣 408 | 巴 409 | 巴巴 410 | 并 411 | 并且 412 | 并非 413 | 庶乎 414 | 庶几 415 | 开外 416 | 开始 417 | 归 418 | 归齐 419 | 当 420 | 当地 421 | 当然 422 | 当着 423 | 彼 424 | 彼时 425 | 彼此 426 | 往 427 | 待 428 | 很 429 | 得 430 | 得了 431 | 怎 432 | 怎么 433 | 怎么办 434 | 怎么样 435 | 怎奈 436 | 怎样 437 | 总之 438 | 总的来看 439 | 总的来说 440 | 总的说来 441 | 总而言之 442 | 恰恰相反 443 | 您 444 | 惟其 445 | 慢说 446 | 我 447 | 我们 448 | 或 449 | 或则 450 | 或是 451 | 或曰 452 | 或者 453 | 截至 454 | 所 455 | 所以 456 | 所在 457 | 所幸 458 | 所有 459 | 才 460 | 才能 461 | 打 462 | 打从 463 | 把 464 | 抑或 465 | 拿 466 | 按 467 | 按照 468 | 换句话说 469 | 换言之 470 | 据 471 | 据此 472 | 接着 473 | 故 474 | 故此 475 | 故而 476 | 旁人 477 | 无 478 | 无宁 479 | 无论 480 | 既 481 | 既往 482 | 既是 483 | 既然 484 | 时候 485 | 是 486 | 是以 487 | 是的 488 | 曾 489 | 替 490 | 替代 491 | 最 492 | 有 493 | 有些 494 | 有关 495 | 有及 496 | 有时 497 | 有的 498 | 望 499 | 朝 500 | 朝着 501 | 本 502 | 本人 503 | 本地 504 | 本着 505 | 本身 506 | 来 507 | 来着 508 | 来自 509 | 来说 510 | 极了 511 | 果然 512 | 果真 513 | 某 514 | 某个 515 | 某些 516 | 某某 517 | 根据 518 | 欤 519 | 正值 520 | 正如 521 | 正巧 522 | 正是 523 | 此 524 | 此地 525 | 此处 526 | 此外 527 | 此时 528 | 此次 529 | 此间 530 | 毋宁 531 | 每 532 | 每当 533 | 比 534 | 比及 535 | 比如 536 | 比方 537 | 没奈何 538 | 沿 539 | 沿着 540 | 漫说 541 | 焉 542 | 然则 543 | 然后 544 | 然而 545 | 照 546 | 照着 547 | 犹且 548 | 犹自 549 | 甚且 550 | 甚么 551 | 甚或 552 | 甚而 553 | 甚至 554 | 甚至于 555 | 用 556 | 用来 557 | 由 558 | 由于 559 | 由是 560 | 由此 561 | 由此可见 562 | 的 563 | 的确 564 | 的话 565 | 直到 566 | 相对而言 567 | 省得 568 | 看 569 | 眨眼 570 | 着 571 | 着呢 572 | 矣 573 | 矣乎 574 | 矣哉 575 | 离 576 | 竟而 577 | 第 578 | 等 579 | 等到 580 | 等等 581 | 简言之 582 | 管 583 | 类如 584 | 紧接着 585 | 纵 586 | 纵令 587 | 纵使 588 | 纵然 589 | 经 590 | 经过 591 | 结果 592 | 给 593 | 继之 594 | 继后 595 | 继而 596 | 综上所述 597 | 罢了 598 | 者 599 | 而 600 | 而且 601 | 而况 602 | 而后 603 | 而外 604 | 而已 605 | 而是 606 | 而言 607 | 能 608 | 能否 609 | 腾 610 | 自 611 | 自个儿 612 | 自从 613 | 自各儿 614 | 自后 615 | 自家 616 | 自己 617 | 自打 618 | 自身 619 | 至 620 | 至于 621 | 至今 622 | 至若 623 | 致 624 | 般的 625 | 若 626 | 若夫 627 | 若是 628 | 若果 629 | 若非 630 | 莫不然 631 | 莫如 632 | 莫若 633 | 虽 634 | 虽则 635 | 虽然 636 | 虽说 637 | 被 638 | 要 639 | 要不 640 | 要不是 641 | 要不然 642 | 要么 643 | 要是 644 | 譬喻 645 | 譬如 646 | 让 647 | 许多 648 | 论 649 | 设使 650 | 设或 651 | 设若 652 | 诚如 653 | 诚然 654 | 该 655 | 说来 656 | 诸 657 | 诸位 658 | 诸如 659 | 谁 660 | 谁人 661 | 谁料 662 | 谁知 663 | 贼死 664 | 赖以 665 | 赶 666 | 起 667 | 起见 668 | 趁 669 | 趁着 670 | 越是 671 | 距 672 | 跟 673 | 较 674 | 较之 675 | 边 676 | 过 677 | 还 678 | 还是 679 | 还有 680 | 还要 681 | 这 682 | 这一来 683 | 这个 684 | 这么 685 | 这么些 686 | 这么样 687 | 这么点儿 688 | 这些 689 | 这会儿 690 | 这儿 691 | 这就是说 692 | 这时 693 | 这样 694 | 这次 695 | 这般 696 | 这边 697 | 这里 698 | 进而 699 | 连 700 | 连同 701 | 逐步 702 | 通过 703 | 遵循 704 | 遵照 705 | 那 706 | 那个 707 | 那么 708 | 那么些 709 | 那么样 710 | 那些 711 | 那会儿 712 | 那儿 713 | 那时 714 | 那样 715 | 那般 716 | 那边 717 | 那里 718 | 都 719 | 鄙人 720 | 鉴于 721 | 针对 722 | 阿 723 | 除 724 | 除了 725 | 除外 726 | 除开 727 | 除此之外 728 | 除非 729 | 随 730 | 随后 731 | 随时 732 | 随着 733 | 难道说 734 | 非但 735 | 非徒 736 | 非特 737 | 非独 738 | 靠 739 | 顺 740 | 顺着 741 | 首先 742 | ! 743 | , 744 | : 745 | ; 746 | ? 747 | -------------------------------------------------------------------------------- /application/word_cloud/stopword/hit_stopwords.txt: -------------------------------------------------------------------------------- 1 | ——— 2 | 》), 3 | )÷(1- 4 | ”, 5 | )、 6 | =( 7 | : 8 | → 9 | ℃ 10 | & 11 | * 12 | 一一 13 | ~~~~ 14 | ’ 15 | . 16 | 『 17 | .一 18 | ./ 19 | -- 20 | 』 21 | =″ 22 | 【 23 | [*] 24 | }> 25 | [⑤]] 26 | [①D] 27 | c] 28 | ng昉 29 | * 30 | // 31 | [ 32 | ] 33 | [②e] 34 | [②g] 35 | ={ 36 | } 37 | ,也 38 | ‘ 39 | A 40 | [①⑥] 41 | [②B] 42 | [①a] 43 | [④a] 44 | [①③] 45 | [③h] 46 | ③] 47 | 1. 48 | -- 49 | [②b] 50 | ’‘ 51 | ××× 52 | [①⑧] 53 | 0:2 54 | =[ 55 | [⑤b] 56 | [②c] 57 | [④b] 58 | [②③] 59 | [③a] 60 | [④c] 61 | [①⑤] 62 | [①⑦] 63 | [①g] 64 | ∈[ 65 | [①⑨] 66 | [①④] 67 | [①c] 68 | [②f] 69 | [②⑧] 70 | [②①] 71 | [①C] 72 | [③c] 73 | [③g] 74 | [②⑤] 75 | [②②] 76 | 一. 77 | [①h] 78 | .数 79 | [] 80 | [①B] 81 | 数/ 82 | [①i] 83 | [③e] 84 | [①①] 85 | [④d] 86 | [④e] 87 | [③b] 88 | [⑤a] 89 | [①A] 90 | [②⑧] 91 | [②⑦] 92 | [①d] 93 | [②j] 94 | 〕〔 95 | ][ 96 | :// 97 | ′∈ 98 | [②④ 99 | [⑤e] 100 | 12% 101 | b] 102 | ... 103 | ................... 104 | …………………………………………………③ 105 | ZXFITL 106 | [③F] 107 | 」 108 | [①o] 109 | ]∧′=[ 110 | ∪φ∈ 111 | ′| 112 | {- 113 | ②c 114 | } 115 | [③①] 116 | R.L. 117 | [①E] 118 | Ψ 119 | -[*]- 120 | ↑ 121 | .日 122 | [②d] 123 | [② 124 | [②⑦] 125 | [②②] 126 | [③e] 127 | [①i] 128 | [①B] 129 | [①h] 130 | [①d] 131 | [①g] 132 | [①②] 133 | [②a] 134 | f] 135 | [⑩] 136 | a] 137 | [①e] 138 | [②h] 139 | [②⑥] 140 | [③d] 141 | [②⑩] 142 | e] 143 | 〉 144 | 】 145 | 元/吨 146 | [②⑩] 147 | 2.3% 148 | 5:0 149 | [①] 150 | :: 151 | [②] 152 | [③] 153 | [④] 154 | [⑤] 155 | [⑥] 156 | [⑦] 157 | [⑧] 158 | [⑨] 159 | …… 160 | —— 161 | ? 162 | 、 163 | 。 164 | “ 165 | ” 166 | 《 167 | 》 168 | ! 169 | , 170 | : 171 | ; 172 | ? 173 | . 174 | , 175 | . 176 | ' 177 | ? 178 | · 179 | ——— 180 | ── 181 | ? 182 | — 183 | < 184 | > 185 | ( 186 | ) 187 | 〔 188 | 〕 189 | [ 190 | ] 191 | ( 192 | ) 193 | - 194 | + 195 | ~ 196 | × 197 | / 198 | / 199 | ① 200 | ② 201 | ③ 202 | ④ 203 | ⑤ 204 | ⑥ 205 | ⑦ 206 | ⑧ 207 | ⑨ 208 | ⑩ 209 | Ⅲ 210 | В 211 | " 212 | ; 213 | # 214 | @ 215 | γ 216 | μ 217 | φ 218 | φ. 219 | × 220 | Δ 221 | ■ 222 | ▲ 223 | sub 224 | exp 225 | sup 226 | sub 227 | Lex 228 | # 229 | % 230 | & 231 | ' 232 | + 233 | +ξ 234 | ++ 235 | - 236 | -β 237 | < 238 | <± 239 | <Δ 240 | <λ 241 | <φ 242 | << 243 | = 244 | = 245 | =☆ 246 | =- 247 | > 248 | >λ 249 | _ 250 | ~± 251 | ~+ 252 | [⑤f] 253 | [⑤d] 254 | [②i] 255 | ≈ 256 | [②G] 257 | [①f] 258 | LI 259 | ㈧ 260 | [- 261 | ...... 262 | 〉 263 | [③⑩] 264 | 第二 265 | 一番 266 | 一直 267 | 一个 268 | 一些 269 | 许多 270 | 种 271 | 有的是 272 | 也就是说 273 | 末##末 274 | 啊 275 | 阿 276 | 哎 277 | 哎呀 278 | 哎哟 279 | 唉 280 | 俺 281 | 俺们 282 | 按 283 | 按照 284 | 吧 285 | 吧哒 286 | 把 287 | 罢了 288 | 被 289 | 本 290 | 本着 291 | 比 292 | 比方 293 | 比如 294 | 鄙人 295 | 彼 296 | 彼此 297 | 边 298 | 别 299 | 别的 300 | 别说 301 | 并 302 | 并且 303 | 不比 304 | 不成 305 | 不单 306 | 不但 307 | 不独 308 | 不管 309 | 不光 310 | 不过 311 | 不仅 312 | 不拘 313 | 不论 314 | 不怕 315 | 不然 316 | 不如 317 | 不特 318 | 不惟 319 | 不问 320 | 不只 321 | 朝 322 | 朝着 323 | 趁 324 | 趁着 325 | 乘 326 | 冲 327 | 除 328 | 除此之外 329 | 除非 330 | 除了 331 | 此 332 | 此间 333 | 此外 334 | 从 335 | 从而 336 | 打 337 | 待 338 | 但 339 | 但是 340 | 当 341 | 当着 342 | 到 343 | 得 344 | 的 345 | 的话 346 | 等 347 | 等等 348 | 地 349 | 第 350 | 叮咚 351 | 对 352 | 对于 353 | 多 354 | 多少 355 | 而 356 | 而况 357 | 而且 358 | 而是 359 | 而外 360 | 而言 361 | 而已 362 | 尔后 363 | 反过来 364 | 反过来说 365 | 反之 366 | 非但 367 | 非徒 368 | 否则 369 | 嘎 370 | 嘎登 371 | 该 372 | 赶 373 | 个 374 | 各 375 | 各个 376 | 各位 377 | 各种 378 | 各自 379 | 给 380 | 根据 381 | 跟 382 | 故 383 | 故此 384 | 固然 385 | 关于 386 | 管 387 | 归 388 | 果然 389 | 果真 390 | 过 391 | 哈 392 | 哈哈 393 | 呵 394 | 和 395 | 何 396 | 何处 397 | 何况 398 | 何时 399 | 嘿 400 | 哼 401 | 哼唷 402 | 呼哧 403 | 乎 404 | 哗 405 | 还是 406 | 还有 407 | 换句话说 408 | 换言之 409 | 或 410 | 或是 411 | 或者 412 | 极了 413 | 及 414 | 及其 415 | 及至 416 | 即 417 | 即便 418 | 即或 419 | 即令 420 | 即若 421 | 即使 422 | 几 423 | 几时 424 | 己 425 | 既 426 | 既然 427 | 既是 428 | 继而 429 | 加之 430 | 假如 431 | 假若 432 | 假使 433 | 鉴于 434 | 将 435 | 较 436 | 较之 437 | 叫 438 | 接着 439 | 结果 440 | 借 441 | 紧接着 442 | 进而 443 | 尽 444 | 尽管 445 | 经 446 | 经过 447 | 就 448 | 就是 449 | 就是说 450 | 据 451 | 具体地说 452 | 具体说来 453 | 开始 454 | 开外 455 | 靠 456 | 咳 457 | 可 458 | 可见 459 | 可是 460 | 可以 461 | 况且 462 | 啦 463 | 来 464 | 来着 465 | 离 466 | 例如 467 | 哩 468 | 连 469 | 连同 470 | 两者 471 | 了 472 | 临 473 | 另 474 | 另外 475 | 另一方面 476 | 论 477 | 嘛 478 | 吗 479 | 慢说 480 | 漫说 481 | 冒 482 | 么 483 | 每 484 | 每当 485 | 们 486 | 莫若 487 | 某 488 | 某个 489 | 某些 490 | 拿 491 | 哪 492 | 哪边 493 | 哪儿 494 | 哪个 495 | 哪里 496 | 哪年 497 | 哪怕 498 | 哪天 499 | 哪些 500 | 哪样 501 | 那 502 | 那边 503 | 那儿 504 | 那个 505 | 那会儿 506 | 那里 507 | 那么 508 | 那么些 509 | 那么样 510 | 那时 511 | 那些 512 | 那样 513 | 乃 514 | 乃至 515 | 呢 516 | 能 517 | 你 518 | 你们 519 | 您 520 | 宁 521 | 宁可 522 | 宁肯 523 | 宁愿 524 | 哦 525 | 呕 526 | 啪达 527 | 旁人 528 | 呸 529 | 凭 530 | 凭借 531 | 其 532 | 其次 533 | 其二 534 | 其他 535 | 其它 536 | 其一 537 | 其余 538 | 其中 539 | 起 540 | 起见 541 | 起见 542 | 岂但 543 | 恰恰相反 544 | 前后 545 | 前者 546 | 且 547 | 然而 548 | 然后 549 | 然则 550 | 让 551 | 人家 552 | 任 553 | 任何 554 | 任凭 555 | 如 556 | 如此 557 | 如果 558 | 如何 559 | 如其 560 | 如若 561 | 如上所述 562 | 若 563 | 若非 564 | 若是 565 | 啥 566 | 上下 567 | 尚且 568 | 设若 569 | 设使 570 | 甚而 571 | 甚么 572 | 甚至 573 | 省得 574 | 时候 575 | 什么 576 | 什么样 577 | 使得 578 | 是 579 | 是的 580 | 首先 581 | 谁 582 | 谁知 583 | 顺 584 | 顺着 585 | 似的 586 | 虽 587 | 虽然 588 | 虽说 589 | 虽则 590 | 随 591 | 随着 592 | 所 593 | 所以 594 | 他 595 | 他们 596 | 他人 597 | 它 598 | 它们 599 | 她 600 | 她们 601 | 倘 602 | 倘或 603 | 倘然 604 | 倘若 605 | 倘使 606 | 腾 607 | 替 608 | 通过 609 | 同 610 | 同时 611 | 哇 612 | 万一 613 | 往 614 | 望 615 | 为 616 | 为何 617 | 为了 618 | 为什么 619 | 为着 620 | 喂 621 | 嗡嗡 622 | 我 623 | 我们 624 | 呜 625 | 呜呼 626 | 乌乎 627 | 无论 628 | 无宁 629 | 毋宁 630 | 嘻 631 | 吓 632 | 相对而言 633 | 像 634 | 向 635 | 向着 636 | 嘘 637 | 呀 638 | 焉 639 | 沿 640 | 沿着 641 | 要 642 | 要不 643 | 要不然 644 | 要不是 645 | 要么 646 | 要是 647 | 也 648 | 也罢 649 | 也好 650 | 一 651 | 一般 652 | 一旦 653 | 一方面 654 | 一来 655 | 一切 656 | 一样 657 | 一则 658 | 依 659 | 依照 660 | 矣 661 | 以 662 | 以便 663 | 以及 664 | 以免 665 | 以至 666 | 以至于 667 | 以致 668 | 抑或 669 | 因 670 | 因此 671 | 因而 672 | 因为 673 | 哟 674 | 用 675 | 由 676 | 由此可见 677 | 由于 678 | 有 679 | 有的 680 | 有关 681 | 有些 682 | 又 683 | 于 684 | 于是 685 | 于是乎 686 | 与 687 | 与此同时 688 | 与否 689 | 与其 690 | 越是 691 | 云云 692 | 哉 693 | 再说 694 | 再者 695 | 在 696 | 在下 697 | 咱 698 | 咱们 699 | 则 700 | 怎 701 | 怎么 702 | 怎么办 703 | 怎么样 704 | 怎样 705 | 咋 706 | 照 707 | 照着 708 | 者 709 | 这 710 | 这边 711 | 这儿 712 | 这个 713 | 这会儿 714 | 这就是说 715 | 这里 716 | 这么 717 | 这么点儿 718 | 这么些 719 | 这么样 720 | 这时 721 | 这些 722 | 这样 723 | 正如 724 | 吱 725 | 之 726 | 之类 727 | 之所以 728 | 之一 729 | 只是 730 | 只限 731 | 只要 732 | 只有 733 | 至 734 | 至于 735 | 诸位 736 | 着 737 | 着呢 738 | 自 739 | 自从 740 | 自个儿 741 | 自各儿 742 | 自己 743 | 自家 744 | 自身 745 | 综上所述 746 | 总的来看 747 | 总的来说 748 | 总的说来 749 | 总而言之 750 | 总之 751 | 纵 752 | 纵令 753 | 纵然 754 | 纵使 755 | 遵照 756 | 作为 757 | 兮 758 | 呃 759 | 呗 760 | 咚 761 | 咦 762 | 喏 763 | 啐 764 | 喔唷 765 | 嗬 766 | 嗯 767 | 嗳 768 | -------------------------------------------------------------------------------- /application/word_cloud/stopword/scu_stopwords.txt: -------------------------------------------------------------------------------- 1 | 打开天窗说亮话 2 | 到目前为止 3 | 赶早不赶晚 4 | 常言说得好 5 | 何乐而不为 6 | 毫无保留地 7 | 由此可见 8 | 这就是说 9 | 这么点儿 10 | 综上所述 11 | 总的来看 12 | 总的来说 13 | 总的说来 14 | 总而言之 15 | 相对而言 16 | 除此之外 17 | 反过来说 18 | 恰恰相反 19 | 如上所述 20 | 换句话说 21 | 具体地说 22 | 具体说来 23 | 另一方面 24 | 与此同时 25 | 一则通过 26 | 毫无例外 27 | 不然的话 28 | 从此以后 29 | 从古到今 30 | 从古至今 31 | 从今以后 32 | 大张旗鼓 33 | 从无到有 34 | 从早到晚 35 | 弹指之间 36 | 不亦乐乎 37 | 不知不觉 38 | 不止一次 39 | 不择手段 40 | 不可开交 41 | 不可抗拒 42 | 不仅仅是 43 | 不管怎样 44 | 挨家挨户 45 | 长此下去 46 | 长话短说 47 | 除此而外 48 | 除此以外 49 | 除此之外 50 | 得天独厚 51 | 川流不息 52 | 长期以来 53 | 挨门挨户 54 | 挨门逐户 55 | 多多少少 56 | 多多益善 57 | 二话不说 58 | 更进一步 59 | 二话没说 60 | 分期分批 61 | 风雨无阻 62 | 归根到底 63 | 归根结底 64 | 反之亦然 65 | 大面儿上 66 | 倒不如说 67 | 成年累月 68 | 换句话说 69 | 或多或少 70 | 简而言之 71 | 接连不断 72 | 尽如人意 73 | 尽心竭力 74 | 尽心尽力 75 | 尽管如此 76 | 据我所知 77 | 具体地说 78 | 具体来说 79 | 具体说来 80 | 近几年来 81 | 每时每刻 82 | 屡次三番 83 | 三番两次 84 | 三番五次 85 | 三天两头 86 | 另一方面 87 | 老老实实 88 | 年复一年 89 | 恰恰相反 90 | 顷刻之间 91 | 穷年累月 92 | 千万千万 93 | 日复一日 94 | 如此等等 95 | 如前所述 96 | 如上所述 97 | 一方面 98 | 切不可 99 | 顷刻间 100 | 全身心 101 | 另方面 102 | 另一个 103 | 猛然间 104 | 默默地 105 | 就是说 106 | 近年来 107 | 尽可能 108 | 接下来 109 | 简言之 110 | 急匆匆 111 | 即是说 112 | 基本上 113 | 换言之 114 | 充其极 115 | 充其量 116 | 暗地里 117 | 反之则 118 | 比如说 119 | 背地里 120 | 背靠背 121 | 并没有 122 | 不得不 123 | 不得了 124 | 不得已 125 | 不仅仅 126 | 不经意 127 | 不能不 128 | 不外乎 129 | 不由得 130 | 不怎么 131 | 不至于 132 | 策略地 133 | 差不多 134 | 常言道 135 | 常言说 136 | 多年来 137 | 多年前 138 | 差一点 139 | 敞开儿 140 | 抽冷子 141 | 大不了 142 | 反倒是 143 | 反过来 144 | 大体上 145 | 当口儿 146 | 倒不如 147 | 怪不得 148 | 动不动 149 | 看起来 150 | 看上去 151 | 看样子 152 | 够瞧的 153 | 到了儿 154 | 呆呆地 155 | 来不及 156 | 来得及 157 | 到头来 158 | 连日来 159 | 于是乎 160 | 为什么 161 | 这会儿 162 | 换言之 163 | 那会儿 164 | 那么些 165 | 那么样 166 | 什么样 167 | 反过来 168 | 紧接着 169 | 就是说 170 | 要不然 171 | 要不是 172 | 一方面 173 | 以至于 174 | 自个儿 175 | 自各儿 176 | 之所以 177 | 这么些 178 | 这么样 179 | 怎么办 180 | 怎么样 181 | 谁知 182 | 顺着 183 | 似的 184 | 虽然 185 | 虽说 186 | 虽则 187 | 随着 188 | 所以 189 | 他们 190 | 他人 191 | 它们 192 | 她们 193 | 倘或 194 | 倘然 195 | 倘若 196 | 倘使 197 | 要么 198 | 要是 199 | 也罢 200 | 也好 201 | 以便 202 | 依照 203 | 以及 204 | 以免 205 | 以至 206 | 以致 207 | 抑或 208 | 因此 209 | 因而 210 | 因为 211 | 由于 212 | 有的 213 | 有关 214 | 有些 215 | 于是 216 | 与否 217 | 与其 218 | 越是 219 | 云云 220 | 一般 221 | 一旦 222 | 一来 223 | 一切 224 | 一样 225 | 同时 226 | 万一 227 | 为何 228 | 为了 229 | 为着 230 | 嗡嗡 231 | 我们 232 | 呜呼 233 | 乌乎 234 | 无论 235 | 无宁 236 | 沿着 237 | 毋宁 238 | 向着 239 | 照着 240 | 怎么 241 | 咱们 242 | 在下 243 | 再说 244 | 再者 245 | 怎样 246 | 这边 247 | 这儿 248 | 这个 249 | 这里 250 | 这么 251 | 这时 252 | 这些 253 | 这样 254 | 正如 255 | 之类 256 | 之一 257 | 只是 258 | 只限 259 | 只要 260 | 只有 261 | 至于 262 | 诸位 263 | 着呢 264 | 纵令 265 | 纵然 266 | 纵使 267 | 遵照 268 | 作为 269 | 喔唷 270 | 自从 271 | 自己 272 | 自家 273 | 自身 274 | 总之 275 | 要不 276 | 哎呀 277 | 哎哟 278 | 俺们 279 | 按照 280 | 吧哒 281 | 罢了 282 | 本着 283 | 比方 284 | 比如 285 | 鄙人 286 | 彼此 287 | 别的 288 | 别说 289 | 并且 290 | 不比 291 | 不成 292 | 不单 293 | 不但 294 | 不独 295 | 不管 296 | 不光 297 | 不过 298 | 不仅 299 | 不拘 300 | 不论 301 | 不怕 302 | 不然 303 | 不如 304 | 不特 305 | 不惟 306 | 不问 307 | 不只 308 | 朝着 309 | 趁着 310 | 除非 311 | 除了 312 | 此间 313 | 此外 314 | 从而 315 | 但是 316 | 当着 317 | 的话 318 | 等等 319 | 叮咚 320 | 对于 321 | 多少 322 | 而况 323 | 而且 324 | 而是 325 | 而外 326 | 而言 327 | 而已 328 | 尔后 329 | 反之 330 | 非但 331 | 非徒 332 | 否则 333 | 嘎登 334 | 各个 335 | 各位 336 | 各种 337 | 各自 338 | 根据 339 | 故此 340 | 固然 341 | 关于 342 | 果然 343 | 果真 344 | 哈哈 345 | 何处 346 | 何况 347 | 何时 348 | 哼唷 349 | 呼哧 350 | 还是 351 | 还有 352 | 或是 353 | 或者 354 | 极了 355 | 及其 356 | 及至 357 | 即便 358 | 即或 359 | 即令 360 | 即若 361 | 即使 362 | 既然 363 | 既是 364 | 继而 365 | 加之 366 | 假如 367 | 假若 368 | 假使 369 | 鉴于 370 | 几时 371 | 较之 372 | 接着 373 | 结果 374 | 进而 375 | 尽管 376 | 经过 377 | 就是 378 | 可见 379 | 可是 380 | 可以 381 | 况且 382 | 开始 383 | 开外 384 | 来着 385 | 例如 386 | 连同 387 | 两者 388 | 另外 389 | 慢说 390 | 漫说 391 | 每当 392 | 莫若 393 | 某个 394 | 某些 395 | 哪边 396 | 哪儿 397 | 哪个 398 | 哪里 399 | 哪年 400 | 哪怕 401 | 哪天 402 | 哪些 403 | 哪样 404 | 那边 405 | 那儿 406 | 那个 407 | 那里 408 | 那么 409 | 那时 410 | 那些 411 | 那样 412 | 乃至 413 | 宁可 414 | 宁肯 415 | 宁愿 416 | 你们 417 | 啪达 418 | 旁人 419 | 凭借 420 | 其次 421 | 其二 422 | 其他 423 | 其它 424 | 其一 425 | 其余 426 | 其中 427 | 起见 428 | 起见 429 | 岂但 430 | 前后 431 | 前者 432 | 然而 433 | 然后 434 | 然则 435 | 人家 436 | 任何 437 | 任凭 438 | 如此 439 | 如果 440 | 如何 441 | 如其 442 | 如若 443 | 若非 444 | 若是 445 | 上下 446 | 尚且 447 | 设若 448 | 设使 449 | 甚而 450 | 甚么 451 | 甚至 452 | 省得 453 | 时候 454 | 什么 455 | 使得 456 | 是的 457 | 首先 458 | 首先 459 | 其次 460 | 再次 461 | 最后 462 | 您们 463 | 它们 464 | 她们 465 | 他们 466 | 我们 467 | 你是 468 | 您是 469 | 我是 470 | 他是 471 | 她是 472 | 它是 473 | 不是 474 | 你们 475 | 啊哈 476 | 啊呀 477 | 啊哟 478 | 挨次 479 | 挨个 480 | 挨着 481 | 哎呀 482 | 哎哟 483 | 俺们 484 | 按理 485 | 按期 486 | 默然 487 | 按时 488 | 按说 489 | 按照 490 | 暗中 491 | 暗自 492 | 昂然 493 | 八成 494 | 倍感 495 | 倍加 496 | 本人 497 | 本身 498 | 本着 499 | 并非 500 | 别人 501 | 必定 502 | 比起 503 | 比如 504 | 比照 505 | 鄙人 506 | 毕竟 507 | 必将 508 | 必须 509 | 并肩 510 | 并没 511 | 并排 512 | 并且 513 | 并无 514 | 勃然 515 | 不必 516 | 不常 517 | 不大 518 | 不单 519 | 不但 520 | 而且 521 | 不得 522 | 不迭 523 | 不定 524 | 不独 525 | 不对 526 | 不妨 527 | 不管 528 | 不光 529 | 不过 530 | 不会 531 | 不仅 532 | 不拘 533 | 不力 534 | 不了 535 | 不料 536 | 不论 537 | 不满 538 | 不免 539 | 不起 540 | 不巧 541 | 不然 542 | 不日 543 | 不少 544 | 不胜 545 | 不时 546 | 不是 547 | 不同 548 | 不能 549 | 不要 550 | 不外 551 | 不下 552 | 不限 553 | 不消 554 | 不已 555 | 不再 556 | 不曾 557 | 不止 558 | 不只 559 | 才能 560 | 彻夜 561 | 趁便 562 | 趁机 563 | 趁热 564 | 趁势 565 | 趁早 566 | 趁着 567 | 成心 568 | 乘机 569 | 乘势 570 | 乘隙 571 | 乘虚 572 | 诚然 573 | 迟早 574 | 充分 575 | 出来 576 | 出去 577 | 除此 578 | 除非 579 | 除开 580 | 除了 581 | 除去 582 | 除却 583 | 除外 584 | 处处 585 | 传说 586 | 传闻 587 | 纯粹 588 | 此后 589 | 此间 590 | 此外 591 | 此中 592 | 次第 593 | 匆匆 594 | 从不 595 | 从此 596 | 从而 597 | 从宽 598 | 从来 599 | 从轻 600 | 从速 601 | 从头 602 | 从未 603 | 从小 604 | 从新 605 | 从严 606 | 从优 607 | 从中 608 | 从重 609 | 凑巧 610 | 存心 611 | 达旦 612 | 打从 613 | 大大 614 | 大抵 615 | 大都 616 | 大多 617 | 大凡 618 | 大概 619 | 大家 620 | 大举 621 | 大略 622 | 大约 623 | 大致 624 | 待到 625 | 单纯 626 | 单单 627 | 但是 628 | 但愿 629 | 当场 630 | 当儿 631 | 当即 632 | 当然 633 | 当庭 634 | 当头 635 | 当下 636 | 当真 637 | 当中 638 | 当着 639 | 倒是 640 | 到处 641 | 到底 642 | 到头 643 | 得起 644 | 的话 645 | 的确 646 | 等到 647 | 等等 648 | 顶多 649 | 动辄 650 | 陡然 651 | 独自 652 | 断然 653 | 对于 654 | 顿时 655 | 多次 656 | 多多 657 | 多亏 658 | 而后 659 | 而论 660 | 而且 661 | 而是 662 | 而外 663 | 而言 664 | 而已 665 | 而又 666 | 尔等 667 | 反倒 668 | 反而 669 | 反手 670 | 反之 671 | 方才 672 | 方能 673 | 非常 674 | 非但 675 | 非得 676 | 分头 677 | 奋勇 678 | 愤然 679 | 更为 680 | 更加 681 | 根据 682 | 个人 683 | 各式 684 | 刚才 685 | 敢情 686 | 该当 687 | 嘎嘎 688 | 否则 689 | 赶快 690 | 敢于 691 | 刚好 692 | 刚巧 693 | 高低 694 | 格外 695 | 隔日 696 | 隔夜 697 | 公然 698 | 过于 699 | 果然 700 | 果真 701 | 光是 702 | 关于 703 | 共总 704 | 姑且 705 | 故此 706 | 故而 707 | 故意 708 | 固然 709 | 惯常 710 | 毫不 711 | 毫无 712 | 很多 713 | 何须 714 | 好在 715 | 何必 716 | 何尝 717 | 何妨 718 | 何苦 719 | 何况 720 | 何止 721 | 很少 722 | 轰然 723 | 后来 724 | 呼啦 725 | 哗啦 726 | 互相 727 | 忽地 728 | 忽然 729 | 话说 730 | 或是 731 | 伙同 732 | 豁然 733 | 恍然 734 | 还是 735 | 或许 736 | 或者 737 | 基本 738 | 基于 739 | 极大 740 | 极度 741 | 极端 742 | 极力 743 | 极其 744 | 极为 745 | 即便 746 | 即将 747 | 及其 748 | 及至 749 | 即刻 750 | 即令 751 | 即使 752 | 几度 753 | 几番 754 | 几乎 755 | 几经 756 | 既然 757 | 继而 758 | 继之 759 | 加上 760 | 加以 761 | 加之 762 | 假如 763 | 假若 764 | 假使 765 | 间或 766 | 将才 767 | 简直 768 | 鉴于 769 | 将近 770 | 将要 771 | 交口 772 | 较比 773 | 较为 774 | 较之 775 | 皆可 776 | 截然 777 | 截至 778 | 藉以 779 | 借此 780 | 借以 781 | 届时 782 | 尽快 783 | 近来 784 | 进而 785 | 进来 786 | 进去 787 | 尽管 788 | 尽量 789 | 尽然 790 | 就算 791 | 居然 792 | 就此 793 | 就地 794 | 竟然 795 | 究竟 796 | 经常 797 | 尽早 798 | 精光 799 | 经过 800 | 就是 801 | 局外 802 | 举凡 803 | 据称 804 | 据此 805 | 据实 806 | 据说 807 | 可好 808 | 看来 809 | 开外 810 | 绝不 811 | 决不 812 | 据悉 813 | 决非 814 | 绝顶 815 | 绝对 816 | 绝非 817 | 可见 818 | 可能 819 | 可是 820 | 可以 821 | 恐怕 822 | 来讲 823 | 来看 824 | 快要 825 | 况且 826 | 拦腰 827 | 牢牢 828 | 老是 829 | 累次 830 | 累年 831 | 理当 832 | 理该 833 | 理应 834 | 例如 835 | 立地 836 | 立刻 837 | 立马 838 | 立时 839 | 联袂 840 | 连连 841 | 连日 842 | 路经 843 | 临到 844 | 连声 845 | 连同 846 | 连袂 847 | 另外 848 | 另行 849 | 屡次 850 | 屡屡 851 | 缕缕 852 | 率尔 853 | 率然 854 | 略加 855 | 略微 856 | 略为 857 | 论说 858 | 马上 859 | 猛然 860 | 没有 861 | 每当 862 | 每逢 863 | 每每 864 | 莫不 865 | 莫非 866 | 莫如 867 | 莫若 868 | 哪怕 869 | 那么 870 | 那末 871 | 那些 872 | 乃至 873 | 难道 874 | 难得 875 | 难怪 876 | 难说 877 | 你们 878 | 凝神 879 | 宁可 880 | 宁肯 881 | 宁愿 882 | 偶而 883 | 偶尔 884 | 碰巧 885 | 譬如 886 | 偏偏 887 | 平素 888 | 迫于 889 | 扑通 890 | 其次 891 | 其后 892 | 其实 893 | 其它 894 | 起初 895 | 起来 896 | 起首 897 | 起头 898 | 起先 899 | 岂但 900 | 岂非 901 | 岂止 902 | 恰逢 903 | 恰好 904 | 恰恰 905 | 恰巧 906 | 恰如 907 | 恰似 908 | 前后 909 | 前者 910 | 切莫 911 | 切切 912 | 切勿 913 | 亲口 914 | 亲身 915 | 亲手 916 | 亲眼 917 | 亲自 918 | 顷刻 919 | 请勿 920 | 取道 921 | 权时 922 | 全都 923 | 全力 924 | 全年 925 | 全然 926 | 然而 927 | 然后 928 | 人家 929 | 人人 930 | 仍旧 931 | 仍然 932 | 日见 933 | 日渐 934 | 日益 935 | 日臻 936 | 如常 937 | 如次 938 | 如果 939 | 如今 940 | 如期 941 | 如若 942 | 如上 943 | 如下 944 | 上来 945 | 上去 946 | 瑟瑟 947 | 沙沙 948 | 啊 949 | 哎 950 | 唉 951 | 俺 952 | 按 953 | 吧 954 | 把 955 | 甭 956 | 别 957 | 嘿 958 | 很 959 | 乎 960 | 会 961 | 或 962 | 既 963 | 及 964 | 啦 965 | 了 966 | 们 967 | 你 968 | 您 969 | 哦 970 | 砰 971 | 啊 972 | 你 973 | 我 974 | 他 975 | 她 976 | 它 977 | -------------------------------------------------------------------------------- /application/word_cloud/stopword/stopword.txt: -------------------------------------------------------------------------------- 1 | 闫 2 | 先生 3 | 老师 4 | 夏天明 5 | 蒋子轩 6 | 工学院 7 | 工院 8 | 数院 9 | 胡睿诚 10 | 查达闻 11 | 谢谢 12 | 消息 13 | 杨小米 14 | 元培 15 | 夏天 16 | 捂脸 17 | 表情 18 | 包 19 | 卢卓然 20 | 赵凌哲 21 | 王申睿 22 | 刘致远 23 | 武昱达 24 | 罗景轩 25 | 稀光华 26 | 程卓 27 | 文件 28 | 确实 29 | 同学 30 | 旺柴 31 | 苏王捷 32 | 可怜 33 | 大佬 34 | 吴杰稀 35 | 高铭泽 36 | 陈清杨 37 | 陈睿阳 38 | 程序猿 39 | 黄原明 40 | 熊江凯 41 | 邓锦文 42 | 光华 43 | 流泪 44 | Weixin 45 | Href 46 | 王宇哲 47 | 苦涩 48 | 图片 49 | 滕明慧 50 | 花园 51 | 何雨轩 52 | 徐嘉轶 53 | 黄源森 54 | 写 55 | 感觉 56 | 一个 57 | Make 58 | 请问 59 | 没 60 | 情况 61 | 明 62 | study 63 | 代码 64 | 撤回 65 | 帮忙 66 | 群聊 67 | 乔俊杰 68 | 想 69 | 理解 70 | 不用 71 | ii 72 | I 73 | 未知 74 | 引用 75 | 明 76 | 卢 77 | 卓然 78 | 陈清 79 | 杨 80 | 程序 81 | 猿 82 | 王申 83 | 睿 84 | 说 85 | 环境 86 | 学院 87 | 赵语涵 88 | 宁远 89 | 物院 90 | 跑 91 | 太 92 | Bye 93 | 会 94 | 考试 95 | 申家祺 96 | 吴彦玺 97 | username wxid 98 | username 99 | wxid 100 | 谢宇翔 101 | 老鼠 102 | 很怕 103 | 沈天健 104 | 里 105 | 两个 106 | good 107 | XBH 108 | 好像 109 | 理解 110 | x 111 | 东西 112 | 覃文献 113 | 为啥 114 | 陈宇豪 115 | n 116 | 滕 117 | 明慧 118 | 吴杰 119 | 稀 120 | 宋昕杰 121 | 徐喆 122 | 陈 123 | 凉风 124 | 起天末 125 | 不了 126 | 感谢 127 | 不好 128 | 黄原 129 | 一条 130 | 王铭健 131 | 佬 132 | 卷柏 133 | greater 134 | hsdor 135 | asd369 136 | j 137 | profile username 138 | 尴尬 139 | 范宇轩 140 | 城环 141 | p 142 | 发怒 143 | 乔 144 | 俊杰 145 | 完 146 | 一种 147 | 小米 148 | f 149 | 几个 150 | 挺 151 | 点 152 | q 153 | 这题 154 | 这是 155 | 猫 156 | y 157 | t 158 | WYJ 159 | 游敬恩 160 | 高梓凯 161 | a 162 | 邀请 163 | 晕 164 | 帮 165 | 找 166 | h 167 | d 168 | O 169 | b 170 | S 171 | 淘 172 | I 173 | r 174 | k 175 | 麻烦 176 | w 177 | m 178 | 出 179 | 我用 180 | A1heNu 181 | 刘 182 | 致远 183 | e 184 | 傅坚军 185 | 盛王鑫 186 | v 187 | z 188 | 覃 189 | 文献 190 | 破涕为笑 191 | 时 192 | 群里 193 | https www 194 | 李 195 | 石泉 196 | 地空 197 | L 198 | l 199 | 发 200 | 新 201 | 存 202 | http 203 | 刘华君 204 | 敲打 205 | 走 206 | https 207 | https www 208 | ei 209 | 彭雅婷 210 | 这道题 211 | 真的 212 | C 213 | 地方 214 | WCY 215 | 雷逸鸣 216 | 很多 217 | 明白 218 | 求助 219 | 发抖 220 | alive 221 | 选 222 | 放 223 | 不行 224 | 助教 225 | 办法 226 | 试试 227 | . 228 | profile 229 | 一点 230 | 冷静 231 | 专注 232 | 影响 233 | 中 234 | 有没有 235 | 裂开 236 | 取 237 | 次 238 | 薛定谔 239 | 笑死 240 | 求 241 | 只能 242 | 那题 243 | 题目 244 | 讨论 245 | 请 246 | 笑 247 | 死 248 | 改 249 | 有人 250 | 刘思瑞 251 | 想到 252 | 就行 253 | 大概 254 | 讲 255 | 懂 256 | 方式 257 | 考 258 | 不到 -------------------------------------------------------------------------------- /application/word_cloud/word_cloud.md: -------------------------------------------------------------------------------- 1 | # 词云展示课程微信群内容 2 | 3 | Updated 1700 GMT+8 Jan 10 2025 4 | 5 | 2024 fall, Complied by Hongfei Yan 6 | 7 | 8 | 9 | 导出课程微信群文本内容,并可视化为词云。展示出学期中积极参与讨论互动同学的姓名,以及课程内容关键词等信息。 10 | 11 | ```mermaid 12 | graph LR; 13 | A[导出课程微信群数据] --> B[词云可视化]; 14 | ``` 15 | 16 |
图. 工作流程图
17 | 18 | 19 | 20 | ## 1.导出课程微信群文本数据 21 | 22 | https://memotrace.cn,下载 MemoTrae-2.1.0.exe,143.9MB 23 | 24 | https://github.com/LC044/WeChatMsg 提取的课程微信群文本内容。 25 | 26 | 需要在window平台中运行memoTrae软件。获得课程微信群文本数据 2024fall-cs101__Algo_DS.txt。 27 | 28 | 29 | 30 | ## 2.词云可视化 31 | 32 | 代码wechat_wordcloud.py 33 | 34 | ```python 35 | import matplotlib.pyplot as plt 36 | import jieba 37 | from wordcloud import WordCloud 38 | from collections import Counter 39 | import random 40 | import numpy as np #科学计算 41 | from PIL import Image #处理图片 42 | import os 43 | 44 | def read_stopword(fpath): 45 | # 读取中文停用词表 46 | with open(fpath, 'r', encoding='utf-8') as file: 47 | stopword = file.readlines() 48 | return [word.replace('\n', '') for word in stopword] 49 | 50 | #加载多个停用词表 51 | path = './stopword' 52 | # 前两个停用词表是网上下载的,第三个是自己设置的 53 | name_list = ['cn_stopwords.txt', 'baidu_stopwords.txt', 'stopword.txt'] 54 | 55 | stop_word = [] 56 | for fname in name_list: 57 | stop_word += read_stopword(os.path.join(path, fname)) 58 | stop_word = set(stop_word) 59 | 60 | 61 | 62 | #font_path = "/System/Library/Fonts/STHeiti Light.ttc" 63 | font_path = "/System/Library/Fonts/STHeiti Medium.ttc" 64 | 65 | 66 | with open('2024fall-cs101__Algo_DS.txt','r',encoding='utf8') as f: #打开新的文本转码为gbk 67 | textfile= f.read() #读取文本内容 68 | wordlist = jieba.lcut(textfile)#切割词语 69 | wordlist = [item.strip('\n') for item in wordlist] 70 | space_list = ' '.join(wordlist) 71 | 72 | # 统计词频 73 | word_freq = Counter(wordlist) 74 | 75 | # 打印词频结果 76 | #for word, freq in word_freq.items(): 77 | # print(f"{word}: {freq}") 78 | 79 | # 随机生成词的颜色 80 | def random_color_func(word, font_size, position, orientation, random_state=None, **kwargs): 81 | return f"hsl({random.randint(0, 255)}, {random.randint(60, 80)}%, {random.randint(40, 70)}%)" 82 | 83 | mask = np.array(Image.open('blue.jpg')) 84 | # 创建词云对象,并设置词频作为词语大小 85 | wordcloud = WordCloud(background_color="white", 86 | #mode='RGB', 87 | mask=mask, 88 | stopwords = stop_word, 89 | #stopwords=STOPWORDS.add('闫'), 90 | #contour_width=1, 91 | #contour_color='steelblue', 92 | width=4000, height=4000, 93 | max_font_size=180, # 显示字体的最大值 94 | #random_state=40, # 为每一词返回一个PIL颜色 95 | #prefer_horizontal=10, # 调整词云中字体水平和垂直的多少 96 | color_func=random_color_func, 97 | font_path=font_path) 98 | 99 | 100 | 101 | # 生成词云图 102 | #wordcloud.generate_from_frequencies(word_freq) 103 | wordcloud.generate(space_list) 104 | 105 | #wordcloud.fit_words(word_freq) 106 | #image_color = ImageColorGenerator(mask)#设置生成词云的颜色,如去掉这两行则字体为默认颜色 107 | #wordcloud.recolor(color_func=image_color) 108 | 109 | # 显示词云图 110 | plt.figure(figsize=(16, 16)) 111 | plt.imshow(wordcloud, interpolation='bilinear') 112 | plt.axis('off') 113 | plt.tight_layout(pad = 0) 114 | plt.show() 115 | 116 | 117 | ``` 118 | 119 | 120 | 121 | 可以参照 Python制作词云图从未如此简单,https://zhuanlan.zhihu.com/p/138356932 122 | 123 | 源码中 29行 font_path,不同系统,需要做相应修改,我是mac。 124 | 125 | 126 | 127 | outpu0.jpg, 是运行输出词云图,如图所示。 128 | 129 | image-20250110170954510 130 | 131 |
图. 积极参与讨论互动的同学以及课程内容关键词
132 | 133 | 134 | 135 | ### stopword 目录 136 | 137 | stopword.txt是自己编辑,主要过滤了姓名。 138 | 139 | 容易分辨哪些同学参与了讨论,手动加在停用词表过滤了。否则词云显示出来很多同学的姓名。 140 | 141 | 142 | 143 | 其他文件下载自,https://github.com/goto456/stopwords 144 | 145 | 中文常用停用词表 146 | 147 | | 词表名 | 词表文件 | 148 | | - | - | 149 | | 中文停用词表 | cn\_stopwords.txt | 150 | | 哈工大停用词表 | hit\_stopwords.txt | 151 | | 百度停用词表 | baidu\_stopwords.txt | 152 | | 四川大学机器智能实验室停用词库 | scu\_stopwords.txt | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | -------------------------------------------------------------------------------- /cheatsheet/Cheatsheet(考后版)Z.Xu.md: -------------------------------------------------------------------------------- 1 | # Cheatsheet(考后版) 2 | 3 | Compiled by 徐至晟,光华 4 | 5 | 注:本人考前没有准备Cheatsheet,考试时不需要。以下归纳一些不太熟练的语法点。 6 | 7 | #### C++ map 与 Python 字典 8 | 9 | 参考资料: 10 | 11 | 1.https://blog.csdn.net/weixin_46369610/article/details/120349280 12 | 13 | 2.[Python3 字典 | 菜鸟教程](https://www.runoob.com/python3/python3-dictionary.html) 14 | 15 | 3.Bing 搜索 AI回答 16 | 17 | 4.[std::map - C++中文 - API参考文档](https://www.apiref.com/cpp-zh/cpp/container/map.html) 18 | 19 | 20 | 21 | 功能:实现键(key)=>值(value)的映射C++ map 迭代器遍历时,按key从小到大顺序 22 | 23 | ##### C++ map 库部分函数 24 | 25 | ```c++ 26 | m.insert(pair(1, "stu1")); 27 | m[2]="stu2" 28 | if (m.find(1)!=m.end()) cout<<"found";//find(key)返回迭代器,若不与end()相同则存在这一个键 29 | m.erase(it); 30 | m.erase(1);//erase可以是删除一个迭代器或者键 31 | ``` 32 | 33 | ##### Python 字典部分函数与方法 34 | 35 | ```python 36 | # python dict 37 | d = {key1 : value1, key2 : value2, key3 : value3 } 38 | emptyDict=dict() 39 | 40 | len(d) 41 | dict.get(key, default=None)#返回key对应的value,不存在返回default的值,避免报错 42 | key in d 43 | dict.pop(key[,default]) 44 | dict.popitem()#删除最后一对 45 | ``` 46 | 47 | #### Python格式化输出 48 | 49 | ```python 50 | name="Alice" 51 | a=10 52 | pi=3.14159 53 | print("Hello %s%.2f%d"%(name,pi,a)) 54 | 55 | print("{0} {1} {1} {0}".format("Li Hua",20)) 56 | #Li Hua 20 20 Li Hua 57 | print("{name} {age}".format(name="Li Hua",age=20)) 58 | #Li Hua 20 59 | ``` 60 | 61 | -------------------------------------------------------------------------------- /cheatsheet/Preparation_24_CAOYikai.md: -------------------------------------------------------------------------------- 1 | # 计概课前准备 2 | 3 | 笔者这几天看到计概群中出现了各种各样的问题,基本上是第一次配置的小白会出现的很多经典问题。也看到明明是同一个问题且已经被解决的事情被很多人反复提问……笔者觉得确实需要一篇比较长的内容来帮助各位完全不了解的新手搭配出一套自己使用得很舒服方便的代码环境。 4 | 5 | 以下内容均来自于笔者亲身经历或亲眼所见,希望对大家有所帮助 6 | > PS: 由于笔者没有mac,所以接下来都是Windows系统下的操作 7 | 8 | ## 注意事项 9 | 10 | 1. 请尽量不要在电脑路径中出现中文和空格,包括但不限于 11 | - 用户名,即C:/Users文件夹下面你的用户名 12 | - 文件夹 13 | - 代码文件的文件名 14 | 15 | 中文不能出现是因为部分软件或编译器,比如g++,对utf-8字符可能存在一定的支持问题,同时由于这些软件可能会在C盘你的用户文件夹或其它文件夹中建立一些缓存或临时文件,所以只有安装路径中文是不够的。 16 | > PS: 我知道这些内容都可以自定义来保证软件绝对不会用到含有中文的路径,但知道这些的一开始就不会使用中文路径吧( 17 | 18 | 而空格不能出现是因为你在有的时候用到文件路径的时候,比如在powershell中,空格是用于分割命令和命令的参数的,所以如果你忘了写引号或其他原因,很有可能导致出错。 19 | 20 | 2. 区分语言、编译器和IDE 21 | - 编程语言,如python, c++等,是人类可以理解的一种控制计算机工作的方式。 22 | - 编仪器,是用于把你写的代码翻译成电脑可以读懂且运行的程序。编仪器本身也是个程序。 23 | - IDE,集成开发环境。说白了就是一个具有代码补全、代码上色、调用编译器帮你编译等等功能的记事本(文本文档)罢了。 24 | 25 | > PS: 写这个是因为真的有人混淆了🤔 26 | 27 | 3. 选择什么IDE? 28 | **强烈不推荐使用IDLE,其它的各有优劣。** 29 | 笔者在使用了Pycharm、Spyder、Visual Studio、IDEA、Mathematica、TexWorks,Typora等等之后全删掉用了VSCode搭建了上面所有语言的环境,所以笔者肯定推荐使用VSCode,当然其它的IDE也可以,具体可以询问任课老师以及按照机房有的来选择。 30 | > PS: 暂不能给你明确的答复,需要你自己衡量(doge) 31 | 32 | 4. 很多配置都涉及到环境变量?环境变量是什么? 33 | 举个例子,按win+R,输入powershell并回车,你发现打开了powershell;输入edge或chrome并回车,打开了浏览器;但输入yuanshen并回车却打不开。 34 | 同样地,在cmd或powershell中输入a.exe,你会发现除非你把路径设置到a.exe所在的文件夹,或者把a.exe的完整路径整个输入,是无法运行a.exe的。 35 | 这是因为系统并不会主动去查你电脑里哪个犄角旮旯里放着这个文件,所以有时候无法简单地运行你想要的程序。 36 | 而环境变量中写入的文件路径是系统会去查的路径,也就是放在环境变量里的程序是可以在任何地方方便而直接地调用的,比如python。 37 | > PS: 其实这里只涉及到环境变量中的PATH 38 | 39 | 5. 以下内容中出现卡顿或打不开,除非特殊说明,否则请尝试使用clash,详见WallessPKU。 40 | 41 | ## Python环境 42 | 43 | ### Python vs Anaconda 44 | 45 | 相信大家多少都对python有很多库可以帮助你实现功能有所了解,包括内置的,如functools;以及用户写的,如numpy。这些库有很多是未来的学习生活中会使用到的。而什么是anaconda?说白了就是一套提前安装好了很多常用库的一个打包好的python,比较方便,但不推荐使用,因为考试的时候OJ上没有这些库,故就不提供anaconda的下载方式了。 46 | 47 | ### Python with VSCode 48 | 49 | #### 一、下载Python 50 | 51 | 1. 进入官网下载python,。鼠标悬停到Downloads上,随后点击下载官网最新版。或者点进Downloads,选择一个你喜欢的版本下载。 52 | 2. 运行下载的程序。勾选Add Python 3.x to PATH,让下载器帮你把python加入环境变量。 53 | 3. 点击Customize installation。Optional Features建议不变,直接点击next。 54 | 4. 修改安装位置,点击browse选择文件夹或者手敲路径,建议不要放在C盘。 55 | 5. 点击install等待下载。 56 | 6. 点击Disable path length limit,防止因为路径过长而无法运行python程序。这是因为windows系统对最长的文件路径是有一个奇怪的上限的,并且这个上限是被留存在Windows API中已经被各种软件所使用了。当然win 10之后,微软官方已经删除了许多软件和程序中的这个限制,但为了保持兼容性还没彻底删除。详见 57 | 7. 打开powershell,输入python后回车,即可验证是否安装成功。若提示找不到python,可以先重启电脑保证环境变量成功被加入。若仍然失败,需要手动加入环境变量。 58 | 修改环境变量: 59 | - 直接在底部任务栏上的搜索框,搜索“编辑系统环境变量” 60 | - 点击“环境变量”,找到Path,选中后点击编辑 61 | - 点击新建,把python所在的文件夹路径输入,如:![pythonEnvPath](https://raw.githubusercontent.com/Usercyk/images/main/pythonEnvPath.png) 62 | - 一路点击确定或应用即可,如果没成功,重启电脑保证环境变量修改成功。 63 | 64 | #### 二、下载VSCode 65 | 66 | 1. 官网下载VSCode,。 67 | 2. 运行下载器,类似上面的安装方式,不过要注意: 68 | - 尽量不要选择C盘 69 | - 添加到PATH 70 | - 注册为受支持的文件类型编辑器 71 | 72 | 可选的选项有: 73 | - 创建桌面快捷方式:即创建桌面图标 74 | - 将“通过Code打开”添加到Windows资源管理器文件上下文菜单:右键文件时右键菜单里的操作 75 | - 将“通过Code打开”添加到Windows资源管理器文件上下文菜单:右键文件夹空白位置时菜单里的操作 76 | 3. 打开powershell,输入code回车,应该可以直接打开VSCode。 77 | 78 | > PS: 看这个安装过程是不是很简单 79 | 80 | #### 三、配置VSCode 81 | 82 | 1. 下载简体中文插件,点击插件图标。 83 | 84 | ![VSCodeExtensionPic](https://raw.githubusercontent.com/Usercyk/images/main/VSCodeExtensionPic.png) 85 | 86 | 在输入框中输入chinese,下载插件。 87 | 88 | ![ChineseExtension](https://raw.githubusercontent.com/Usercyk/images/main/ChineseExtension.png) 89 | 2. 创建工作区Workspace 90 | 在VSCode中,存在一个内置的用于分割不同配置、语言、插件等的划分系统,称为工作区。每个工作区中可以有和别的工作区不同的配置以及插件,这也和python的虚拟环境不谋而合。 91 | 创建方式: 92 | - 点击左上角文件,关闭工作区。这一步实际上进入了一个默认的工作区。 93 | - 点击左上角文件,将工作区另存为,起一个你喜欢的名字并保存在你喜欢的位置上,不妨叫做PythonWS。 94 | - 点击左侧边栏最上面的图标(资源管理器),添加一个你喜欢的文件夹,之后就是在这个文件夹下进行工作。 95 | 3. 下载必要的Python插件 96 | Python, Pylance, Python Debugger, Python Indent, Code Runner, isort, autopep8。 97 | 4. 可选Python插件 98 | Qt for Python, Jupyter相关, autoDocstring, Better Comments。 99 | 5. 安装插件的过程中可能会弹出很多提示之类的,不用理这些,建议关掉VSCode后重启。 100 | 6. 终端-新建终端,输入: 101 | 102 | ```powershell 103 | python -m venv my_env 104 | ``` 105 | 106 | 即让python创建一个venv(virtual environment),名字叫my_env。Python不同的虚拟环境之间安装的包是可以不同的,防止不同项目之间互相污染。随后关闭终端(点击垃圾桶图标)。 107 | 7. 在工作区文件夹(PythonWS)下随便新建一个.py文件,插件就会启动,点击右下角![VSCodeChoosePythonInterpreter](https://raw.githubusercontent.com/Usercyk/images/main/VSCodeChoosePythonInterpreter.png),**选择虚拟环境中的那个python**。 108 | 8. 终端-新建终端,输入: 109 | 110 | ```powershell 111 | pip install autopep8 112 | ``` 113 | 114 | 这是让插件和vscode可以自动读取autopep8库运行的结果,从而帮你把你写的代码格式修改为PEP-8中的要求,即更好看。快捷键shift+alt+F可以帮你整理你的python代码。 115 | 9. 找到插件Code Runner,修改其设置,启用Run In Terminal选项。 116 | 10. 运行python代码时,第一次可能需要在右上角的三角运行框中选择Run Code,之后可以直接点击三角来运行。 117 | 118 | ![ChooseRunCode](https://raw.githubusercontent.com/Usercyk/images/main/ChooseRunCode.png) 119 | > PS: 其它的几个选项也可以运行/调试Python,但是很丑( 120 | 121 | ## C/Cpp环境 122 | 123 | ### C/Cpp with VSCode 124 | 125 | #### 一、下载MinGW-w64 126 | 127 | 1. 官方github仓库:,下载需要的版本,笔者选择了x86_64-14.2.0-release-posix-seh-ucrt-rt_v12-rev0.7z 128 | 2. 解压到你喜欢的位置,随后把bin文件夹添加到环境变量中,如 129 | ![MinGWEnvPath](https://raw.githubusercontent.com/Usercyk/images/main/MinGWEnvPath.png) 130 | 3. 打开powershell,输入 131 | 132 | ```powershell 133 | gcc -v 134 | ``` 135 | 136 | 没报错就成功了,否则先重启,仍不行则检查环境变量是否正确。 137 | 138 | > PS: 比python下载简单多了 139 | 140 | #### 二、配置VSCode 141 | 142 | 1. 下载方式见前 143 | 2. 下载Code Runner和C/C++ Extension Pack插件 144 | 3. 配置完成了!点击右上角三角选择使用Run Code运行即可,类似前面Python配置运行方式。 145 | 4. 中文输出乱码: 146 | - 打开Code Runner设置,编辑executorMap,将其中c和c++两项改为 147 | 148 | ```json 149 | "code-runner.executorMap": { 150 | "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -fexec-charset=gbk && $dir$fileNameWithoutExt", 151 | "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -fexec-charset=gbk && $dir$fileNameWithoutExt", 152 | } 153 | ``` 154 | 155 | 这会让GCC使用GBK编码进行编译,如果仍乱码,改成`utf-8`试试。 156 | 157 | 5. (可选)修改编译exe位置: 158 | - 打开Code Runner设置,编辑executorMap,将其中c和c++两项改为 159 | 160 | ```json 161 | "code-runner.executorMap": { 162 | "c": "cd $dir && gcc $fileName -D LOCAL -o .\\build\\$fileNameWithoutExt -fexec-charset=gbk && .\\build\\$fileNameWithoutExt", 163 | "cpp": "cd $dir && g++ $fileName -D LOCAL -o .\\build\\$fileNameWithoutExt -fexec-charset=gbk && .\\build\\$fileNameWithoutExt", 164 | } 165 | ``` 166 | 167 | 这会让编译的exe文件保存至`build`文件夹下,使得项目显得比较顺眼。 168 | 169 | > PS: 这个配置真的很简单吧 170 | -------------------------------------------------------------------------------- /cheatsheet/cs101_CheatSheet_24_LIHaoxiang.md: -------------------------------------------------------------------------------- 1 | # **Cheat Sheet** 2 | 3 | 李皓翔 24物院 4 | 5 | # 笔试 6 | 7 | ## acsll 8 | 9 | ![1-851-jpg_6_0_______-784-0-0-784](C:\Users\15143\Desktop\1-851-jpg_6_0_______-784-0-0-784.jpg) 10 | 11 | ## 程序框图 12 | 13 | ![image-20241204231156542](.\pic\CS0.png) 14 | 15 | 16 | 17 | ## ip 18 | 19 | ABC类,掩码 20 | 21 | ![](.\pic\CS3.jpg) 22 | 23 | 24 | 25 | 在Python中True等价于1 26 | 27 | 28 | 29 | ![](.\pic\CS1.jpg) 30 | 31 | ![](.\pic\CS2.jpg) 32 | 33 | 34 | 35 | 36 | 37 | 请列举出你所知道的三种互联网通讯协议的名称:TCP,UDP和HTTP。 38 | 39 | > TCP(Transmission Control Protocol):传输控制协议 40 | > 41 | > UDP(User Datagram Protocol):用户数据报协议 42 | > 43 | > HTTP(Hypertext Transfer Protocol):超文本传输协议 44 | 45 | 46 | 47 | 根据**(空间)局部性原理**,在程序执行时,如果一个信息项正在被访问,那么近期它很可能也会被再次访问,存储在它附近的信息也很可能被访问到。 48 | 49 | 50 | 51 | 根据计算机信息的**分层存储原理**,在存储器硬件的金字塔结构中,从上到下,容量越来越大,速度 越来越慢。 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 在计算机硬件系统中,连接主板和外部设备之间的硬件设备是 60 | 61 | A) 总线 B) 芯片组 C) 内存 **D) 适配器** 62 | 63 | > 适配器(如网卡、声卡等)用于连接主板和外部设备。 64 | 65 | 66 | 67 | 根据冯·诺伊曼结构,计算机由运算器,控制器,存储器,输入设备和输出设备五个部分相互连接组成。 68 | 69 | 70 | 71 | CPU内部包含的四个主要部件是:算术逻辑运算器(ALU)、寄存器组、中断处理器、和程序控制器。 72 | 73 | > 算术逻辑运算器(ALU):执行算术和逻辑运算 74 | > 75 | > 寄存器组:临时存储数据 76 | > 77 | > 中断处理器:处理中断请求 78 | > 79 | > 程序控制器:控制程序执行 80 | 81 | 82 | 83 | 32位CPU可以直接寻址的最大物理内存容量是4 GB 84 | 85 | > CPU 通过数据总线,控制总线以及地址总线和其它部件进行各种信息的传递。为了保证性能,数据总线的宽度应该与 CPU 字长一致。 86 | > 87 | > 数据总线的宽度通常与CPU的字长(Word Size)一致是为了保证性能和效率。这里有几个关键点: 88 | > 89 | > **CPU 字长**:指的是CPU一次能够处理的数据量大小,它决定了CPU内部寄存器、算术逻辑单元(ALU)等组件的操作数宽度。比如32位CPU的一次操作可以处理32位的数据,而64位CPU则可以处理64位的数据。 90 | > 91 | > **数据总线宽度**:是指数据总线一次能传输的数据量,它直接影响到CPU与内存或其他外部设备之间数据交换的速度。如果数据总线的宽度与CPU字长相同,那么在进行数据读写时,就不需要分多次传输,从而提高了数据传输的效率。 92 | > 93 | > **地址总线宽度**:决定了CPU可以直接寻址的地址空间大小。例如,32位地址总线可以访问(2^{32} )个不同的地址,即4GB的物理地址空间;而64位地址总线理论上可以访问(2^{64})个地址,这远远超过了目前大多数系统的实际需求。 94 | > 95 | > **控制总线**:它不直接与性能或数据量相关,而是用于传递控制信号,如读/写命令、中断信号等,以协调CPU与其他系统组件之间的操作。 96 | > 97 | > 为了最大化性能,理想情况下,数据总线的宽度应该匹配CPU的字长,这样每次内存访问都可以最有效地利用CPU的能力。不过,在实际设计中,也会考虑到成本、功耗等因素来决定总线宽度。有时,为了降低成本或出于其他考虑,可能会选择较窄的数据总线,但这通常会导致性能上的妥协。 98 | 99 | 100 | 101 | 为现代电子计算机的出现作出了重要贡献的两位科学家分别是 阿兰·图灵 和 冯·诺伊曼 102 | 103 | 104 | 105 | 计算机程序中的 3 种基本控制结构是: 顺序结构 、分支结构 和 循环结构 106 | 107 | 108 | 109 | 在计算机系统中,是通过文件和文件系统来组织和管理存储在外存储设备(硬件)上的信息的。 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | # 内置问题速查 122 | 123 | 最大公因数 遍历序列 快速查找 math **二进制遍历(优化重复背包问题) ** 124 | 125 | ## gcd 126 | 127 | ```python 128 | from math import gcd 129 | gcd(a,b)#最大公因数 130 | #最小公倍数*最大公因数=a*b 131 | ``` 132 | 133 | ## permutations 134 | 135 | ```python 136 | from itertools import permutations 137 | 138 | for i in itertools.permutations([1, 2, 3]): 139 | print(i, end=" ") 140 | #(1, 2, 3) (1, 3, 2) (2, 1, 3) (2, 3, 1) (3, 1, 2) (3, 2, 1) 141 | 142 | for i in itertools.permutations([1, 2, 3], 2): 143 | print(i, end=" ") 144 | print(type(i)) 145 | #(1, 2) 146 | #(1, 3) 147 | #(2, 1) 148 | #(2, 3) 149 | #(3, 1) 150 | #(3, 2) 151 | 152 | ``` 153 | 154 | ## combinations 155 | 156 | ```python 157 | from itertools import combinations 158 | combinations(list,k) #生成list的k元组合(无序)(每个以元组形式存在) 159 | ``` 160 | 161 | ## math 162 | 163 | ```python 164 | math.pow(x, y) == x**y 165 | math.factorial(n) == n! 166 | ``` 167 | 168 | ## 二进制遍历 169 | 170 | ```python 171 | cur_num=int(input()) 172 | k = 1 173 | while cur_num>0: 174 | use_num = min(cur_num, k) 175 | cur_num -= use_num 176 | #use_num 177 | k*=2 178 | #use_nums可以用二进制表示input内的所有数 179 | # 二进制优化 180 | dp = [float('inf')] * (n + 1) 181 | dp[0] = 0 182 | for i in range(7): 183 | cur_price = price[i] 184 | cur_num = nums[i] 185 | k = 1 186 | while cur_num > 0: 187 | use_num = min(cur_num, k) 188 | cur_num -= use_num 189 | for j in range(n, cur_price * use_num - 1, -1): 190 | dp[j] = min(dp[j], dp[j - cur_price * use_num] + use_num) 191 | k *= 2 192 | if dp[-1] == float('inf'): 193 | print('Fail') 194 | else: 195 | print(dp[-1]) 196 | ``` 197 | 198 | # 输出 199 | 200 | ## 保留小数 201 | 202 | ```python 203 | f = 2.3456789 204 | 205 | print('%.2f'%f) 206 | print('%.3f'%f) 207 | print('%.4f'%f) 208 | 209 | #2.35 210 | #2.346 211 | #2.3457 212 | ``` 213 | 214 | ## 大小写转换 215 | 216 | ```python 217 | a.upper() 218 | a.lower() 219 | ``` 220 | 221 | ## f' ' 222 | 223 | ```python 224 | f"{s:.2f}"#保留两位小数 225 | ``` 226 | 227 | ## join 228 | 229 | ```python 230 | print(' '.join(['1','2','3'])) 231 | print(' '.join(map(str,p))) 232 | ``` 233 | 234 | ## 字符串处理 235 | 236 | ## acsll 237 | 238 | ![1-851-jpg_6_0_______-784-0-0-784](C:\Users\15143\Desktop\1-851-jpg_6_0_______-784-0-0-784.jpg) 239 | 240 | ## 进制 241 | 242 | 2进制`bin()`输出0b...,八进制`oct()`输出0o...,十六进制`hex()`输出0x...,`int(str,base)`可以把字符串按照指定进制转为十进制默认base=10 243 | 244 | ## 浅拷贝 245 | 246 | ```python 247 | p[:] #消除浅拷贝 248 | 249 | import copy 250 | tem=copy.deepcopy(fill)#消除多层浅拷贝 251 | ``` 252 | 253 | ## all 254 | 255 | ```python 256 | all(iterable) #等价于快速 False in iterable 257 | ``` 258 | 259 | ## zip 260 | 261 | ```python 262 | a=['1','2'] 263 | b=[1,2] 264 | l=zip(a,b) 265 | print(list(l)) 266 | #[('1',1),('2',2)] 267 | ``` 268 | 269 | ## sorted 270 | 271 | ```python 272 | ###1### 273 | combined = sorted(zip(a, b), key=lambda x: (x[0], -x[1]),reverse=True) 274 | a, b = zip(*combined) 275 | 276 | ###2### 277 | a=list(map(int,input().split())) 278 | b=list(map(int,input().split())) 279 | combined = sorted(zip(a, b), key=lambda x: (x[0]+x[1])%4,reverse=True) 280 | a, b = zip(*combined) 281 | ``` 282 | 283 | ## lru_cache 284 | 285 | ```python 286 | from functools import lru_cache 287 | from math import sin 288 | 289 | @lru_cache(maxsize=4096)#(maxsize=None) 290 | def sin_half(x): 291 | return sin(x)/2 292 | 293 | print('first call result:',sin_half(60)) 294 | print('second call result:',sin_half(60)) 295 | #…… 296 | print() 297 | ``` 298 | 299 | ## bisect 300 | 301 | ```python 302 | import bisect 303 | 304 | # 已排序的列表 305 | a = [1, 2, 4, 7] 306 | 307 | # 查找元素 3 应该插入的位置 308 | index = bisect.bisect_left(a, 3) 309 | print(index) # 输出: 2 310 | 311 | # 插入元素 3 到列表 a 中 312 | bisect.insort_left(a, 3) 313 | print(a) # 输出: [1, 2, 3, 4, 7] 314 | 315 | #自己的代码 316 | l=max(it) 317 | r=sum(it)+1 318 | k=0 319 | while lp: 325 | su=i 326 | s+=1 327 | else: 328 | su+=i 329 | if s>M: #2 330 | l=p+1 331 | else: 332 | r=p 333 | print(l) #3 334 | ``` 335 | 336 | ## enumerate 337 | 338 | ```python 339 | fruits = ['apple', 'banana', 'cherry'] 340 | for index, value in enumerate(fruits,1): #start value = 1 341 | print(index, value) 342 | #1 apple 343 | #2 banana 344 | #3 cherry 345 | ``` 346 | 347 | # 数据结构 348 | 349 | ## set 350 | 351 | ```python 352 | p=set() 353 | #集合,快速查找的无重复元素集 354 | p.add(1) 355 | in p #快速判断 356 | p.remove(元素名) 357 | p.discard(元素名)#不会报错 358 | a|b #并 359 | a&b #交 360 | a-b #表示∈a且∉b的元素的集合 361 | a^b #等于a|b-a&b 362 | a>b a<=b #比较从属关系,若无则为False 363 | ``` 364 | 365 | ## defaultdit 366 | 367 | ```python 368 | from collections import defaultdict 369 | #这是一种"如果访问的key不存在与字典中,就给它新建一个默认值 dict[key]=default_value 的字典 370 | vd=defaultdict(int) #以0为默认值的defaultdict 371 | a=defaultdict(list) #以空列表为默认值的defaultdict 372 | #类似地,括号里是int,set也可以 373 | ``` 374 | 375 | ## deque 376 | 377 | ```python 378 | import deque 379 | ``` 380 | 381 | ## heapq 382 | 383 | ```python 384 | import heapq 385 | a = [] #创建一个空堆 386 | heapq.heappush(a,18) 387 | 388 | heapq.heappop(h) #输出最小值 389 | ``` 390 | 391 | -------------------------------------------------------------------------------- /cheatsheet/cs101_CheatSheet_24_ZENGZibo.md: -------------------------------------------------------------------------------- 1 | ### **Cheat Sheet 重置&回忆版** 2 | 3 | (原版是手写的而且放在学校了) 4 | 5 | #### 一、内置函数用法 6 | 7 | 1. math 8 | 9 | ​ 用于一些计算和数据处理 10 | 11 | ​ 常用的一些: 12 | 13 | ​ 向上取整:math. ceil(x) 14 | 15 | ​ 向下取整:math. floor(x) 16 | 17 | ​ 开方:math. sqrt(x) 18 | 19 | ​ 方幂:math. pow(x,y) #x的y次方 20 | 21 | ​ 阶乘:math. factorial(n) 22 | 23 | 2. format 24 | 25 | ​ 用于格式化处理字符串 26 | 27 | ​ 常用的一些: 28 | 29 | ​ 将参数按格式插入:f"I'm {} years old" 30 | 31 | ​ 小数点保留:’{ :.2f }'. format(x) #保留两位小数 32 | 33 | 3. 正则表达式(re) 34 | 35 | 用于提取字符串中的特定字符 36 | 37 | 提取数字 result=re. findall(r'\d+',strings) 38 | 39 | 提取字母 result=re. findall(r'[a-zA-Z]',strings) 40 | 41 | #提取出来的是列表 42 | 43 | 4. collections 44 | 45 | Counter:用于列表计数 46 | 47 | ​ eg:t=Counter(s) #t是一个字典 48 | 49 | defaultdict:给予字典一个默认值 50 | 51 | ​ eg:d=defaultdict(int) #默认值为0 52 | 53 | deque:双端队列(在bfs中常用) 54 | 55 | 5. heapq 56 | 57 | 含有关于堆的一些操作 58 | 59 | heapqpop:推出 60 | 61 | heapqpush:推入 62 | 63 | 6. bisect 64 | 65 | 用于二分查找,分为left和right两种 66 | 67 | #### 二、特殊模板: 68 | 69 | 1. dfs:以全排列为例 70 | 71 | ```python 72 | def dfs(s,p): 73 | if len(s)==n: 74 | r.append('') 75 | return 76 | for x in range(1,n+1): 77 | if x in s:continue 78 | s.append(x) 79 | dfs(s,p) 80 | s.pop() 81 | ``` 82 | 83 | 2. bfs:以寻宝为例 84 | 85 | ```python 86 | from collections import deque 87 | k=[[-1,0],[1,0],[0,-1],[0,1]] 88 | def bfs(w,p,r,step): 89 | while r: 90 | for _ in range(len(r)): 91 | i,j=r.popleft() 92 | if p[i][j]==1: 93 | return step 94 | for x in k: 95 | ii,jj=i+x[0],j+x[1] 96 | if 0<=iim: 134 | r=mid 135 | else: 136 | l=mid+1 137 | return l-1 138 | ``` 139 | 140 | 5. 二分归并排序:以求逆序数为例 141 | 142 | ```python 143 | def mid(p): 144 | if len(p)<=1: 145 | return p,0 146 | m=len(p)//2 147 | left,l=mid(p[:m]) 148 | right,r=mid(p[m:]) 149 | Q,q=cnt(left,right) 150 | ans=l+r+q 151 | return Q,ans 152 | def cnt(left,right): 153 | c=[] 154 | i,j=0,0 155 | v=0 156 | while i < len(left) and j 需要注意目标列表已经被排好序 377 | 378 | ```py 379 | def times(a,b): 380 | a,b=list(str(a)),list(str(b)) 381 | a.reverse() 382 | b.reverse() 383 | ans=[0 for i in range(10002)] 384 | for j in range(len(b)): 385 | for i in range(len(a)): 386 | ans[j+i]+=int(b[j])*int(a[i])%10 387 | ans[j+i+1]+=ans[j+i]//10 388 | ans[j+i]%=10 389 | ans[j+i+1]+=int(b[j])*int(a[i])//10 390 | i=0 391 | while i==0 and ans: 392 | i=ans.pop() 393 | ans.append(i) 394 | res='' 395 | for i in ans[-1::-1]: 396 | res+=str(i) 397 | return int(res) 398 | ``` 399 | 400 | ### 生成全排列 401 | 402 | ```py 403 | import itertools 404 | 405 | elements = [1, 2, 3] 406 | permutations = list(itertools.permutations(elements)) 407 | print(permutations) 408 | ``` 409 | 410 | -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24WANGSiyuan.md: -------------------------------------------------------------------------------- 1 | ## 基础语法 2 | ### 可访问https://docs.python.org/zh-cn/3/ 3 | ### 字符串和编码 4 | 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符_A:65 _Z:90_a:97_z:122 5 | 一种格式化字符串的方法是使用以f开头的字符串,称之为f-string,字符串如果包含{xxx},就会以对应的变量替换: 6 | ```python 7 | f'The area of a circle with radius {r} is {s:.2f}' 8 | ``` 9 | 并且:后面的.2f指定了格式化参数(即保留两位小数) 10 | ### list、tuple、dict、set 11 | - list:append、pop(索引)、remove(元素)、insert(插入位置,元素)、extend 12 | - count 函数是字符串、列表和元组等序列对象的方法,用于统计某个元素或子字符串在对象中出现的次数。 13 | - tuple和list非常类似,但是tuple一旦初始化就不能修改 14 | - dic字典:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} 15 | - 通过in判断key是否存在,或通过dict提供的get()方法,如果key不存在,可以返回None 16 | - 要删除一个key,用pop(key)方法,对应的value也会从dict中删除 17 | - dict的key必须是不可变对象 18 | - 3.7以上版本字典的遍历顺序是基于插入顺序的,使用 sorted() 函数按字典的键进行排序,并生成一个新的字典。 19 | - sorted() 的 key 参数使用一个匿名函数(lambda),它从每个键值对中取出值进行排序。如:dict(sorted(my_dict.items(), key=lambda item: item[1])) 20 | - dic.items()获取所有键值对,.key()获取所有键.value()获取所有值 21 | - set:set和dict类似,{}表示,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。 22 | - set的原理和dict一样,所以,同样不可以放入可变对象可以放入int、float、str 23 | 元组(只要元组中的所有元素也是不可变的)布尔值,不可以放入列表(list)集合(set)字典(dict) 24 | - 交&,并| 25 | ### 深浅拷贝 26 | - 浅拷贝新对象和原始对象的嵌套对象共享相同的引用,故修改嵌套对象会影响原始对象。 27 | - 深拷贝会递归地拷贝所有嵌套对象,保证新对象与原始对象完全独立。 28 | 深拷贝使用 copy 模块中的 deepcopy() 函数实现: 29 | ```python 30 | import copy 31 | 32 | original_list = [1, 2, [3, 4]] 33 | deep_copy = copy.deepcopy(original_list) 34 | ``` 35 | ### 生成式 36 | - 列表生成式 37 | ```python 38 | [x for x in range(1, 11) if x % 2 == 0] 39 | [x if x % 2 == 0 else -x for x in range(1, 11)] 40 | [x for i in range(100) for x in (i, -i)]#(生成交替元素) 41 | ``` 42 | - 字典生成式 43 | ```python 44 | {key: value for key, value in zip(l, n)} 45 | ``` 46 | ### 双端队列 47 | ```python 48 | from collections import deque 49 | dq = deque([1, 2, 3]) # 使用列表初始化 50 | dq.append(4) # 在右侧添加 51 | dq.appendleft(0) # 在左侧添加 52 | dq.pop() # 移除右侧元素 53 | dq.popleft() # 移除左侧元素 54 | ``` 55 | ### 最小堆(可实现优先队列) 56 | ```python 57 | import heapq 58 | 59 | heap = [] # 创建一个空堆 60 | heapq.heappush(heap, item)#将元素 item 插入堆中。 61 | heapq.heappop(heap)#弹出并返回堆中的最小元素。 62 | heapq.heapify(iterable)#将可迭代对象转为堆结构。 63 | ``` 64 | ### 特殊读取 65 | ```python 66 | while True: 67 | try: 68 | n=input() 69 | except EOFError: 70 | break 71 | ``` 72 | ### enumerate() 73 | 返回一个迭代器,可以将其转换为列表,其中每个元素是 (index, value) 74 | ### 排序 75 | reverse=True倒序 76 | ## 代码示范 77 | ### 递归(recursion) 78 | ### 贪心(greedy) 79 | ### dp 80 | - 最大整数:假设有n个正整数,要求从中选取几个组成一个位数不超过m的新正整数,现需要求出最大可能数值是多少。第一行m表示新数的最大位数。第二行n表示整数的数量。接下来一行有n个整数。输出为一行,为这n个正整数能组成的不超过m位的最大整数值。 81 | ```python 82 | m=int(input()) 83 | n=int(input()) 84 | l=list(map(lambda x:list(map(int,list(x))),input().split())) 85 | def q(li): 86 | return li*(m//len(li))+li[:(m%len(li))] 87 | l.sort(reverse=True,key=lambda x:q(x)) 88 | dp=[[0]*(m+1) for _ in range(n+1)] 89 | for i in range(1,n+1): 90 | for j in range(1,m+1): 91 | dp[i][j]=max(dp[i-1][j],dp[i][j]) 92 | if len(l[i-1])<=j: 93 | dp[i][j-len(l[i-1])]=max(dp[i-1][j]*(10**len(l[i-1]))+int(''.join(map(str,l[i-1]))),dp[i-1][j-len(l[i-1])]) 94 | print(max(dp[-1])) 95 | ``` 96 | ### dfs 97 | - 矩阵最大权值路径:现有一个n*m大小的矩阵,矩阵中的每个元素表示该位置的权值。现需要从矩阵左上角出发到达右下角,每次移动只能向上下左右移动一格(不允许移动到曾经经过的位置)。求最后到达右下角时路径上所有位置的权值之和的最大值。 98 | ```python 99 | n,m=map(int,input().split()) 100 | l=[[-1]*(m+2)]+[[-1]+list(map(int,input().split()))+[-1] for _ in range(n)]+[[-1]*(m+2)] 101 | def dps(visited,x, y,con): 102 | if x==n and y==m: 103 | return [con+l[x][y]]+visited+[(n,m)] 104 | else: 105 | neighbor=[(x+1,y),(x-1,y),(x,y+1),(x,y-1)] 106 | return max((dps(visited+[(x,y)],i[0],i[1],con+l[x][y]) for i in neighbor if i not in visited and 0min: 140 | break 141 | if do[0]==m: 142 | re=1 143 | min=len(do) 144 | note.append(do) 145 | if re==0: 146 | l.appendleft([do[0]*3]+do[1:]+['H']) 147 | l.appendleft([do[0]//2]+do[1:]+['O']) 148 | while True: 149 | n,m=map(int,input().split()) 150 | if n==0 and m==0: 151 | break 152 | l=deque([[n]]) 153 | note=[] 154 | bfs() 155 | note.sort() 156 | print(len(note[0][1:])) 157 | print(''.join(note[0][1:])) 158 | ``` 159 | ### Dijkstra 160 | - 走山路:想从一个地方走到另一个地方,并且希望能尽量走平路。 161 | 现有一个m*n的地形图,图上是数字代表该位置的高度,"#"代表该位置不可以经过。 162 | 该同学每一次只能向上下左右移动,每次移动消耗的体力为移动前后该同学所处高度的差的绝对值。现在给出该同学出发的地点和目的地,需要你求出他最少要消耗多少体力。 163 | 第一行是整数 m,n,p,m是行数,n是列数,p是测试数据组数。 0 <= m,n,p <= 100 164 | 接下来m行是地形图再接下来p行每行前两个数是出发点坐标(前面是行,后面是列) 165 | ```python 166 | import heapq 167 | m,n,p=map(int,input().split()) 168 | l=[] 169 | def mov(tl): 170 | return [(tl[0]+1,tl[1]),(tl[0]-1,tl[1]),(tl[0],tl[1]+1),(tl[0],tl[1]-1)] 171 | for _ in range(m): 172 | l.append(input().split()) 173 | for _ in range(p): 174 | inp=list(map(int,input().split())) 175 | st=(inp[0],inp[1]) 176 | en=(inp[2],inp[3]) 177 | g=[[float('inf')]*n for _ in range(m)] 178 | tdl=[(0,st)] 179 | g[st[0]][st[1]]=0 180 | while tdl: 181 | if l[st[0]][st[1]]=='#' or l[en[0]][en[1]]=='#': 182 | print('NO') 183 | break 184 | i=heapq.heappop(tdl)[1] 185 | if i==en: 186 | print(g[i[0]][i[1]]) 187 | break 188 | for t in mov(i): 189 | if 0<=t[0]g[i[0]][i[1]]+abs(int(l[i[0]][i[1]])-int(l[t[0]][t[1]])): 190 | g[t[0]][t[1]]=g[i[0]][i[1]] + abs(int(l[i[0]][i[1]]) - int(l[t[0]][t[1]])) 191 | heapq.heappush(tdl,(g[t[0]][t[1]],t)) 192 | else: 193 | print('NO') 194 | ``` 195 | ### 辅助栈 196 | - 快速堆猪:有三种输入1)push n n是整数(0<=0 <=20000),表示叠上一头重量是n斤的新猪2)pop表示将猪堆顶的猪赶走。如果猪堆没猪,就啥也不干3)min表示问现在猪堆里最轻的猪多重。如果猪堆没猪,就啥也不干 197 | ```python 198 | l,m=[],[] 199 | while True: 200 | try: 201 | inp=input().split() 202 | if inp[0]=='push': 203 | l.append(int(inp[1])) 204 | if len(m)==0 or m[-1]>=int(inp[1]): 205 | m.append(int(inp[1])) 206 | elif inp[0]=='pop' and l: 207 | if l.pop()==m[-1]: 208 | m.pop() 209 | elif inp[0]=='min' and l: 210 | print(m[-1]) 211 | except EOFError: 212 | break 213 | ``` 214 | ### 二分查找 215 | - 河中跳房子:在起点和终点之间,有N个岩石,每个岩石与起点的距离分别为Di。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M个岩石。确定移走这些岩石后,最长可能的最短跳跃距离是多少? 216 | ```python 217 | L,n,m=map(int,input().split()) 218 | l=[0]+[int(input()) for _ in range(n)]+[L] 219 | cn=L 220 | c=0 221 | do=(c+cn)/2 222 | while int(cn)-int(c)!=1: 223 | #print(c,cn) 224 | do=(c+cn)/2 225 | rm=0 226 | now=0 227 | for i in l[1:]: 228 | if i-nowm: 233 | cn=do 234 | break 235 | else: 236 | c=do 237 | print(int(cn)) 238 | ``` 239 | ### 双指针 240 | ## 综合杂乱代码 241 | - 滑雪 242 | ```python 243 | r,c=map(int,input().split()) 244 | l=[[float('inf')]*(c+2)]+[[float('inf')]+list(map(int,input().split()))+[float('inf')] for _ in range(r)]+[[float('inf')]*(c+2)] 245 | cl=[[0]*(c+2) for i in range(r+2)] 246 | tdl=[] 247 | def mov(tl): 248 | return [(tl[0]+1,tl[1]),(tl[0]-1,tl[1]),(tl[0],tl[1]+1),(tl[0],tl[1]-1)] 249 | for i in range(1,r+1): 250 | for j in range(1,c+1): 251 | if l[i-1][j]>=l[i][j] and l[i+1][j]>=l[i][j] and l[i][j-1]>=l[i][j] and l[i][j+1]>=l[i][j]: 252 | tdl.append((i,j)) 253 | cl[i][j]=1 254 | while tdl: 255 | td=tdl.pop() 256 | for i in mov(td): 257 | if 0l[td[0]][td[1]] and 1+cl[td[0]][td[1]]>cl[i[0]][i[1]]: 258 | cl[i[0]][i[1]]=1+cl[td[0]][td[1]] 259 | tdl.append(i) 260 | ma=0 261 | for i in cl: 262 | ma=max(ma,max(i)) 263 | print(max(ma,1)) 264 | ``` 265 | - 螃蟹采蘑菇 266 | ```python 267 | from collections import deque 268 | 269 | def mov(li): 270 | return [((li[0][0]+1,li[0][1]),(li[1][0]+1,li[1][1])),((li[0][0]-1,li[0][1]),(li[1][0]-1,li[1][1])),((li[0][0],li[0][1]+1),(li[1][0],li[1][1]+1)),((li[0][0],li[0][1]-1),(li[1][0],li[1][1]-1))] 271 | n=int(input()) 272 | st=[] 273 | l=[] 274 | for _ in range(n): 275 | lil=list(map(int,input().split())) 276 | while 5 in lil: 277 | st.append((_,lil.index(5))) 278 | lil[lil.index(5)]=0 279 | if 9 in lil: 280 | ed=(_,lil.index(9)) 281 | l.append(lil) 282 | st=tuple(st) 283 | tdl=deque() 284 | tdl.append(st) 285 | visited={st} 286 | #print(visited) 287 | ki=0 288 | while tdl: 289 | td=tdl.pop() 290 | for i in mov(td): 291 | if i not in visited and 0<=i[0][0]=len(cl): 343 | return True 344 | return any([dfs(visited|{j},i+1) for j in range(len(cl[i])) if cl[i][j]==1 and j not in visited]) 345 | for _ in range(n): 346 | nee=list(input()) 347 | cl=[[1 if s in li else 0 for li in l] for s in nee] 348 | # print(cl) 349 | if dfs(set(),0): 350 | print('YES') 351 | else: 352 | print('NO') 353 | ``` 354 | - 小偷背包 355 | ```python 356 | N,B=map(int,input().split()) 357 | vl=list(map(int,input().split())) 358 | wl=list(map(int,input().split())) 359 | l=[[0,v,w] for v,w in zip(vl,wl)] 360 | l.sort(reverse=True) 361 | def tr(r,li): 362 | if len(li)==1: 363 | if li[0][2]<=r: 364 | return li[0][1] 365 | else: 366 | return 0 367 | if li[0][2]<=r: 368 | return max(tr(r,li[1:]),li[0][1]+tr(r-li[0][2],li[1:])) 369 | else: 370 | return tr(r,li[1:]) 371 | print(tr(B,l)) 372 | ``` 373 | - 水淹七军 374 | ```python 375 | k=int(input()) 376 | def g(x): 377 | if hl[x[1]-1][x[2]]==-1 or hl[x[1]+1][x[2]]==-1 or hl[x[1]][x[2]-1]==-1 or hl[x[1]][x[2]+1]==-1: 378 | return True 379 | else: 380 | return False 381 | for _ in range(k): 382 | if _!=0: 383 | stup=input() 384 | cont=1 385 | m,n=map(int,input().split()) 386 | hl=[[False]*(n+2)]+[[False]+[-1]*n+[False] for _ in range(m)]+[[False]*(n+2)] 387 | l=[[False]*(n+2)]+[[False]+list(map(int,input().split()))+[False] for i in range(m)]+[[False]*(n+2)] 388 | gen_x,gen_y=map(int,input().split()) 389 | p=int(input()) 390 | need=[list(map(int,input().split())) for i in range(p)] 391 | high=l[gen_x][gen_y]+1 392 | hl[gen_x][gen_y]=True 393 | todolist = [(gen_x, gen_y)] 394 | wait = [] 395 | while cont0: 410 | high=wait[-1][0]+1 411 | todolist=[(wait[-1][1],wait[-1][2])] 412 | wait.pop() 413 | if any(hl[i[0]][i[1]] for i in need): 414 | print('Yes') 415 | else: 416 | print('No') 417 | ``` 418 | -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24XIEHaochen.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/cs101_cheatsheet_24XIEHaochen.docx -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_CAOYikai.md: -------------------------------------------------------------------------------- 1 | # Cheat Sheet 2 | ## python库 3 | ### 二分 4 | ```python 5 | import bisect 6 | 7 | a = [1, 2, 4, 4, 8] 8 | print(bisect.bisect_left(a, 4)) # 输出: 2 9 | 10 | print(bisect.bisect_right(a, 4)) # 输出: 4 11 | 12 | print(bisect.bisect(a, 4)) # 输出: 4 13 | ``` 14 | 15 | ### 优先队列 16 | 即该队列自动的保证顺序 17 | ```python 18 | import heapq 19 | 20 | data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0] 21 | heapq.heapify(data) 22 | print(data) # 输出: [0, 1, 2, 3, 9, 5, 4, 6, 8, 7] 23 | 24 | heapq.heappush(data, -5) 25 | print(data) # 输出: [-5, 0, 2, 3, 1, 5, 4, 6, 8, 7, 9] 26 | 27 | print(heapq.heappop(data)) # 输出: -5 28 | ``` 29 | 30 | ### 日期与时间 31 | ```python 32 | import calendar, datetime 33 | 34 | print(calendar.isleap(2020)) # 输出: True 35 | 36 | print(datetime.datetime(2023, 10, 5).weekday()) # 输出: 3 (星期四) 37 | ``` 38 | 39 | ### 数据结构 40 | ```python 41 | 42 | import collections 43 | 44 | # deque 45 | dq = collections.deque([1, 2, 3]) 46 | dq.append(4) 47 | print(dq) # 输出: deque([1, 2, 3, 4]) 48 | dq.appendleft(0) 49 | print(dq) # 输出: deque([0, 1, 2, 3, 4]) 50 | dq.pop() 51 | print(dq) # 输出: deque([0, 1, 2, 3]) 52 | dq.popleft() 53 | print(dq) # 输出: deque([1, 2, 3]) 54 | 55 | dd = collections.defaultdict(int) 56 | dd['a'] += 1 57 | print(dd) # 输出: defaultdict(, {'a': 1}) 58 | 59 | od = collections.OrderedDict() 60 | od['a'] = 1 61 | od['b'] = 2 62 | od['c'] = 3 63 | print(od) # 输出: OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 64 | 65 | Point = collections.namedtuple('Point', ['x', 'y']) 66 | p = Point(11, 22) 67 | print(p) # 输出: Point(x=11, y=22) 68 | print(p.x, p.y) # 输出: 11 22 69 | ``` 70 | 71 | 72 | ### 遍历 73 | ```python 74 | import itertools 75 | 76 | for item in itertools.product('AB', repeat=2): 77 | print(item) # 输出: ('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B') 78 | ``` 79 | 80 | ### 函数 81 | ```python 82 | import functools 83 | 84 | print(functools.reduce(lambda x, y: x + y, [1, 2, 3, 4])) # 输出: 10 85 | ``` 86 | 87 | ### 分数与有理数 88 | ```python 89 | import fractions, decimal 90 | 91 | frac = fractions.Fraction(1, 3) 92 | print(frac) # 输出: 1/3 93 | 94 | dec = decimal.Decimal('0.1') 95 | print(dec) # 输出: 0.1 96 | ``` 97 | 98 | ### 数学 99 | ```python 100 | import math 101 | 102 | print(math.ceil(4.2)) # 输出: 5 103 | 104 | print(math.floor(4.2)) # 输出: 4 105 | ``` 106 | 107 | ### 拷贝 108 | ```python 109 | import copy 110 | 111 | original = [1, 2, [3, 4]] 112 | copied = copy.deepcopy(original) 113 | print(copied) # 输出: [1, 2, [3, 4]] 114 | ``` 115 | 116 | ### 数组操作 117 | ```python 118 | squared = list(map(lambda x: x**2, [1, 2, 3, 4])) 119 | print(squared) # 输出: [1, 4, 9, 16] 120 | 121 | a = [1, 2, 3] 122 | b = ['a', 'b', 'c'] 123 | zipped = list(zip(a, b)) 124 | print(zipped) # 输出: [(1, 'a'), (2, 'b'), (3, 'c')] 125 | 126 | filtered = list(filter(lambda x: x > 2, [1, 2, 3, 4])) 127 | print(filtered) # 输出: [3, 4] 128 | 129 | enumerated = list(enumerate(['a', 'b', 'c'])) 130 | print(enumerated) # 输出: [(0, 'a'), (1, 'b'), (2, 'c')] 131 | ``` 132 | 133 | ## 算法 134 | 135 | ### dfs模板 136 | #### 连通域染色 137 | ```python 138 | directions = ((0, 1), (0, -1), (-1, 0), (1, 0), 139 | (1, -1), (1, 1), (-1, -1), (-1, 1)) 140 | 141 | def dfs(x, y): 142 | global n, m, color, board 143 | board[x][y] = color 144 | area = 1 145 | for d in directions: 146 | nx = x+d[0] 147 | ny = y+d[1] 148 | if any((nx < 0, ny < 0, nx >= n, ny >= m)): 149 | continue 150 | if board[nx][ny] == "W": 151 | area += dfs(nx, ny) 152 | return area 153 | ``` 154 | #### 水淹七军 155 | ```python 156 | def dfs_iterative(x, y, h, m, n, grid, water_height): 157 | stack = [(x, y)] 158 | water_height[x][y] = h 159 | 160 | while stack: 161 | cx, cy = stack.pop() 162 | 163 | for dx, dy in directions: 164 | nx = cx + dx 165 | ny = cy + dy 166 | if (0 <= nx < m and 0 <= ny < n and 167 | grid[nx][ny] < h and 168 | water_height[nx][ny] < h): 169 | water_height[nx][ny] = h 170 | stack.append((nx, ny)) 171 | ``` 172 | 173 | ### bfs模板 174 | #### 螃蟹采蘑菇 175 | ```python 176 | def bfs(n, grid): 177 | start, end = find_start_end(n, grid) 178 | q = deque([start]) 179 | visited = set() 180 | visited.add(tuple(start)) 181 | flag = False 182 | while q: 183 | if flag: 184 | break 185 | current = q.popleft() 186 | if end in current: 187 | flag = True 188 | break 189 | for dx, dy in directions: 190 | nx1, ny1 = current[0][0]+dx, current[0][1]+dy 191 | nx2, ny2 = current[1][0]+dx, current[1][1]+dy 192 | if 0 <= nx1 < n and 0 <= ny1 < n and 0 <= nx2 < n and 0 <= ny2 < n: 193 | if grid[nx1][ny1] != 1 and grid[nx2][ny2] != 1: 194 | next_state = [(nx1, ny1), (nx2, ny2)] 195 | if tuple(next_state) not in visited: 196 | visited.add(tuple(next_state)) 197 | q.append(next_state) 198 | return flag 199 | ``` 200 | 201 | ### 筛法 202 | ```python 203 | def euler_sieve(n): 204 | is_prime = [True] * (n + 1) 205 | primes = [] 206 | for i in range(2, n + 1): 207 | if is_prime[i]: 208 | primes.append(i) 209 | for p in primes: 210 | if i * p > n: 211 | break 212 | is_prime[i * p] = False 213 | if i % p == 0: 214 | break 215 | return primes 216 | 217 | n = 50 218 | print(euler_sieve(n)) # 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 219 | ``` 220 | 221 | ### dp 222 | #### 01背包 223 | ```python 224 | def knapsack(weights, values, capacity): 225 | n = len(weights) 226 | dp = [[0] * (capacity + 1) for _ in range(n + 1)] 227 | 228 | for i in range(1, n + 1): 229 | for w in range(1, capacity + 1): 230 | if weights[i - 1] <= w: 231 | dp[i][w] = max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1]) 232 | else: 233 | dp[i][w] = dp[i - 1][w] 234 | 235 | return dp[n][capacity] 236 | 237 | weights = [1, 2, 3, 4] 238 | values = [10, 20, 30, 40] 239 | capacity = 5 240 | print(knapsack(weights, values, capacity)) # 输出: 50 241 | ``` 242 | 243 | #### 完全背包 244 | ```python 245 | def knapsack_complete(weights, values, capacity): 246 | dp = [0] * (capacity + 1) 247 | for i in range(len(weights)): 248 | for w in range(weights[i], capacity + 1): 249 | dp[w] = max(dp[w], dp[w - weights[i]] + values[i]) 250 | return dp[capacity] 251 | 252 | weights = [1, 2, 3, 4] 253 | values = [10, 20, 30, 40] 254 | capacity = 5 255 | print(knapsack_complete(weights, values, capacity)) # 输出: 50 256 | ``` 257 | 258 | #### 必须装满的完全背包 259 | ```python 260 | def knapsack_complete_fill(weights, values, capacity): 261 | dp = [-float('inf')] * (capacity + 1) 262 | dp[0] = 0 263 | for i in range(len(weights)): 264 | for w in range(weights[i], capacity + 1): 265 | dp[w] = max(dp[w], dp[w - weights[i]] + values[i]) 266 | return dp[capacity] if dp[capacity] != -float('inf') else 0 267 | 268 | weights = [1, 2, 3, 4] 269 | values = [10, 20, 30, 40] 270 | capacity = 5 271 | print(knapsack_complete_fill(weights, values, capacity)) # 输出: 50 272 | ``` 273 | 274 | #### 多重背包(二进制优化) 275 | ```python 276 | def binary_optimized_multi_knapsack(weights, values, quantities, capacity): 277 | n = len(weights) 278 | items = [] 279 | # 将每个物品拆分成若干子物品 280 | for i in range(n): 281 | w, v, q = weights[i], values[i], quantities[i] 282 | k = 1 283 | while k < q: 284 | items.append((k * w, k * v)) 285 | q -= k 286 | k <<= 1 287 | if q > 0: 288 | items.append((q * w, q * v)) 289 | # 动态规划求解01背包问题 290 | dp = [0] * (capacity + 1) 291 | for w, v in items: 292 | for j in range(capacity, w - 1, -1): 293 | dp[j] = max(dp[j], dp[j - w] + v) 294 | return dp[capacity] 295 | 296 | weights = [1, 2, 3] 297 | values = [6, 10, 12] 298 | quantities = [10, 5, 3] 299 | capacity = 15 300 | 301 | print(binary_optimized_multi_knapsack(weights, values, quantities, capacity)) # 输出: 120 302 | ``` 303 | 304 | ### Dijkstra 305 | ```python 306 | import heapq 307 | 308 | def dijkstra(graph, start): 309 | n = len(graph) 310 | distances = {node: float('inf') for node in range(n)} 311 | distances[start] = 0 312 | priority_queue = [(0, start)] 313 | 314 | while priority_queue: 315 | current_distance, current_node = heapq.heappop(priority_queue) 316 | 317 | if current_distance > distances[current_node]: 318 | continue 319 | 320 | for neighbor, weight in graph[current_node]: 321 | distance = current_distance + weight 322 | 323 | if distance < distances[neighbor]: 324 | distances[neighbor] = distance 325 | heapq.heappush(priority_queue, (distance, neighbor)) 326 | 327 | return distances 328 | 329 | graph = { 330 | 0: [(1, 4), (2, 1)], 331 | 1: [(3, 1)], 332 | 2: [(1, 2), (3, 5)], 333 | 3: [] 334 | } 335 | 336 | start_node = 0 337 | print(dijkstra(graph, start_node)) # 输出: {0: 0, 1: 3, 2: 1, 3: 4} 338 | ``` 339 | #### 走山路(高度差为距离) 340 | ```python 341 | from heapq import heappop, heappush 342 | 343 | 344 | directions = ((1, 0), (-1, 0), (0, 1), (0, -1)) 345 | INF = float("inf") 346 | 347 | 348 | def dijkstra(start_x, start_y, end_x, end_y): 349 | global m, n, terrian 350 | if terrian[start_x][start_y] == "#" or terrian[end_x][end_y] == "#": 351 | return "NO" 352 | pq = [(0, start_x, start_y)] 353 | distance = [[INF]*n for _ in range(m)] 354 | distance[start_x][start_y] = 0 355 | 356 | while pq: 357 | d, x, y = heappop(pq) 358 | if x == end_x and y == end_y: 359 | return d 360 | for dx, dy in directions: 361 | nx, ny = x+dx, y+dy 362 | if 0 <= nx < m and 0 <= ny < n and terrian[nx][ny] != "#": 363 | nd = d+abs(terrian[nx][ny]-terrian[x][y]) 364 | if nd < distance[nx][ny]: 365 | distance[nx][ny] = nd 366 | heappush(pq, (nd, nx, ny)) 367 | return "NO" 368 | ``` 369 | 370 | ### Kadane算法 371 | #### 最大子序列 372 | ```python 373 | def max_subarray_sum(nums): 374 | max_sum = current_sum = nums[0] 375 | for num in nums[1:]: 376 | current_sum = max(num, current_sum + num) 377 | max_sum = max(max_sum, current_sum) 378 | return max_sum 379 | 380 | nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4] 381 | print(max_subarray_sum(nums)) # 输出: 6 382 | ``` 383 | #### 最大子矩阵 384 | 枚举`l~r`列的子式,按行求和后,求这些和的最大子序列即可。 385 | 386 | ### 最长上升子序列 387 | #### dp方法 388 | ```python 389 | def length_of_lis(nums): 390 | if not nums: 391 | return 0 392 | dp = [1] * len(nums) 393 | for i in range(1, len(nums)): 394 | for j in range(i): 395 | if nums[i] > nums[j]: 396 | dp[i] = max(dp[i], dp[j] + 1) 397 | return max(dp) 398 | 399 | nums = [10, 9, 2, 5, 3, 7, 101, 18] 400 | print(length_of_lis(nums)) # 输出: 4 401 | ``` 402 | 403 | #### 二分法 404 | ```python 405 | import bisect 406 | 407 | def length_of_lis_binary(nums): 408 | if not nums: 409 | return 0 410 | tails = [] 411 | for num in nums: 412 | pos = bisect.bisect_left(tails, num) 413 | if pos == len(tails): 414 | tails.append(num) 415 | else: 416 | tails[pos] = num 417 | return len(tails) 418 | 419 | nums = [10, 9, 2, 5, 3, 7, 101, 18] 420 | print(length_of_lis_binary(nums)) # 输出: 4 421 | ``` 422 | 423 | 424 | ### 其它 425 | #### 下一个全排列 426 | ```python 427 | def next_permutation(nums): 428 | i = len(nums) - 2 429 | while i >= 0 and nums[i] >= nums[i + 1]: 430 | i -= 1 431 | if i >= 0: 432 | j = len(nums) - 1 433 | while nums[j] <= nums[i]: 434 | j -= 1 435 | nums[i], nums[j] = nums[j], nums[i] 436 | nums[i + 1:] = reversed(nums[i + 1:]) 437 | return nums 438 | 439 | nums = [1, 2, 3] 440 | print(next_permutation(nums)) # 输出: [1, 3, 2] 441 | ``` 442 | 443 | #### Manacher算法 444 | ```python 445 | def manacher(s): 446 | s = '#' + '#'.join(s) + '#' 447 | n = len(s) 448 | p = [0] * n 449 | c = r = 0 450 | for i in range(n): 451 | mirr = 2 * c - i 452 | if i < r: 453 | p[i] = min(r - i, p[mirr]) 454 | while i + p[i] + 1 < n and i - p[i] - 1 >= 0 and s[i + p[i] + 1] == s[i - p[i] - 1]: 455 | p[i] += 1 456 | if i + p[i] > r: 457 | c, r = i, i + p[i] 458 | max_len, center_index = max((n, i) for i, n in enumerate(p)) 459 | return s[center_index - max_len:center_index + max_len].replace('#', '') 460 | 461 | s = "babad" 462 | print(manacher(s)) # 输出: "bab" 或 "aba" 463 | ``` -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_CAOYikai.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/cs101_cheatsheet_24_CAOYikai.pdf -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_CHENXuanzhi.txt: -------------------------------------------------------------------------------- 1 | 1.函数 2 | 1)二分查找 3 | import bisect 4 | loc=bisect.bisect_left(list,item) 5 | loc=bisect.bisect_right(list,item) 6 | 7 | 2)时间 8 | Import calendar, datetime 9 | Calendar.isleap(2020) 10 | Datetime.datetime(2023,10,15).weekday() 11 | 12 | 13 | 2.Tips 14 | 1)深拷贝 15 | from copy import deepcopy 16 | lcopy=deepcopy(l) 17 | 18 | 2)保留小数 19 | "{:.2f}".format(num) 20 | #或 21 | "%.2f" % num 22 | 23 | 3)建一个以每行输入的字符串为元素的列表: 24 | import sys 25 | sys.stdin.readlines() 26 | 27 | 4)遍历每一项的索引和值组成的元组(类似于dict.items()): 28 | for index,value in enumerate(list) 29 | 30 | 5)dfs→dp 31 | from functools import lru_cache 32 | @lru_cache(maxsize = None) 33 | 34 | 6)递归深度限制设置: 35 | sys.setrecursionlimit(...) 36 | 37 | 7)未知组数输入: 38 | While True: 39 | try: 40 | 41 | except EOFError: 42 | break 43 | 44 | 3.数据结构 45 | 1)defaultdict 46 | from collections import defaultdict 47 | a=defaultdict(list) 48 | 49 | 2)deque 50 | from collections import deque 51 | deque.append() 52 | deque.pop() 53 | deque.appendleft() 54 | deque.popleft() 55 | 56 | 3)heapq 57 | import heapq 58 | heapq.heapify(list) 59 | heapq.heappush(list,item) 60 | heapq.heappop(list) 61 | heapq.heappushpop(list,item) 62 | 63 | 4)set 64 | s.add() 65 | s.remove()/s.discard() 66 | s.clear() 67 | a|b:并集 68 | a&b:交集 69 | a-b:差 70 | 71 | 4.算法 72 | 1)欧拉筛 73 | def ES(n): 74 | isprime=[True for _ in range(n+1)] 75 | prime=[] 76 | for i in range(2,n+1): 77 | if isprime[i]: 78 | prime.append(i) 79 | for j in range(len(prime)): 80 | if i*prime[j]>n:break 81 | isprime[i*prime[j]]=False 82 | if i%prime[j]==0 :break 83 | 84 | return prime 85 | 2)dfs 86 | def dfs(x,y,i,j): 87 | stack=[(x,y)] 88 | while stack: 89 | cx,cy=stack.pop() 90 | if (cx,cy)==(i,j): 91 | return True 92 | for dx,dy in directions: 93 | nx,ny=cx+dx,cy+dy 94 | if 0<=nxnums[i]: 174 | nums[j],nums[i] = nums[i],nums[j] 175 | tmp=nums[len(nums)-1:i:-1] 176 | nums[i+1:]=tmp 177 | return nums 178 | else: 179 | nums.reverse() 180 | return nums 181 | print(NP([4,2,6,3])) 182 | 183 | 8)二分查找 184 | def bisect_left(a, x, lo=0, hi=None, *, key=None): 185 | if hi==None: 186 | hi=len(a) 187 | if key is None: 188 | while lo < hi: 189 | mid = (lo + hi) // 2 190 | if a[mid] < x: 191 | lo = mid + 1 192 | else: 193 | hi = mid 194 | else: 195 | while lo < hi: 196 | mid = (lo + hi) // 2 197 | if key(a[mid]) < key(x): 198 | lo = mid + 1 199 | else: 200 | hi = mid 201 | return lo 202 | 9)Kadane算法 203 | def kadane(v):#卡丹算法求最大子序列 204 | max_cur=0 205 | max_all=0 206 | for i in range(len(v)): 207 | max_cur=max(v[i],max_cur+v[i]) 208 | max_all=max(max_all,max_cur) 209 | return max_all 210 | 211 | #卡丹算法求最大子矩阵 212 | def qzh(mat,n,m):#前缀和 213 | qzh=[] 214 | for i in range(n): 215 | qzh.append([0]) 216 | for j in range(m): 217 | qzh[i].append(qzh[i][-1]+mat[i][j]) 218 | return qzh 219 | def kadane(a):#卡丹算法求最大子序列 220 | max_cur=0 221 | max_all=0 222 | for i in range(len(a)): 223 | max_cur=max(a[i],max_cur+a[i]) 224 | max_all=max(max_all,max_cur) 225 | return max_all 226 | def max_submat(qzh,n,m): 227 | #现在我要算每个对于左边界为l,右边界为r的,上下浮动和伸缩的一系列子矩阵的最大值 228 | maxn=0 229 | for l in range(1,m+1): 230 | for r in range(l,m): 231 | a=list(qzh[i][r]-qzh[i][l-1] for i in range(n)) 232 | maxn=max(maxn,kadane(a)) 233 | return(maxn) 234 | #主函数 235 | n,m=map(int,input().split())#行数:n,列数:m 236 | mat=[] 237 | for i in range(n): 238 | mat.append(list(map(int,input().split()))) 239 | qzh=qzh(mat,n,m) 240 | print(max_submat(qzh,n,m)) 241 | 242 | 10)归并排序 243 | def MergeSort(arr): 244 | if len(arr)<=1: return arr 245 | else: 246 | l,r=arr[:len(arr)//2],arr[len(arr)//2:] 247 | return Merge(MergeSort(l),MergeSort(r)) 248 | def Merge(l,r): 249 | res=[] 250 | i,j=0,0 251 | while i0: 275 | use_num = min(k,all_num) #处理最后剩不足2的幂的情形 276 | for t in range(T,use_num*time[i]-1,-1): 277 | dp[t] = max(dp[t-use_num*time[i]]+use_num*value[i],dp[t]) 278 | k *= 2 279 | all_num -= use_num 280 | 281 | 12)区间问题 282 | ①右端点排序:不相交区间,区间取点 283 | ②左端点排序:区间合并,区间覆盖,区间分组 284 | 285 | 13)单调栈 286 | class Solution: 287 | def trap(self, height: List[int]) -> int: 288 | stack = [] # 初始化一个空栈,用于存储柱子的索引 289 | water = 0 # 初始化水的总量为0 290 | for i in range(len(height)): # 遍历每个柱子 291 | while stack and height[i] > height[stack[-1]]: # 当栈不为空且当前柱子高于栈顶柱子时 292 | top = stack.pop() # 弹出栈顶柱子的索引 293 | if not stack: # 如果栈为空,说明没有左边的边界,无法形成水坑 294 | break 295 | distance = i - stack[-1] - 1 # 计算左右边界之间的距离 296 | bounded_height = min(height[i], height[stack[-1]]) - height[top] # 计算水坑的高度 297 | water += distance * bounded_height # 计算水坑的容量,并累加到总水量中 298 | stack.append(i) # 将当前柱子的索引压入栈中 299 | return water # 返回总的水容量 300 | 301 | 14)马拉车算法 302 | def manacher(s): 303 | # 1.预处理字符串 304 | t = '^#' + '#'.join(s) + '#$' # 字符间插入#,从而对于偶数子串也可以中心扩展 305 | n = len(t) # 得到新字符串长度 306 | P = [0] * n # P[i]表示以t[i]为中心的回文半径 307 | C, R = 0, 0 # C为当前回文中心,R为当前回文的右边界 308 | # 2.计算回文半径 309 | for i in range(1, n - 1): # i位置为中心 310 | # 如果 i 在 R 范围内,用对称位置的回文半径初始化 P[i] 311 | P[i] = min(R - i, P[2 * C - i]) if i < R else 0 312 | # 中心扩展,尝试扩展回文半径 313 | while t[i + P[i] + 1] == t[i - P[i] - 1]: 314 | P[i] += 1 315 | # 更新回文的中心和右边界 316 | if i + P[i] > R: 317 | C, R = i, i + P[i] 318 | # 3.找到最长回文 319 | max_len = max(P) # 最长回文半径 320 | center_index = P.index(max_len) # 最长回文对应的中心索引 321 | # 原始字符串中的起始索引 322 | start = (center_index - max_len) // 2 323 | return s[start:start + max_len] 324 | -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_FENGDiyin.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/cs101_cheatsheet_24_FENGDiyin.docx -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_HUANGHeming.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/cs101_cheatsheet_24_HUANGHeming.pdf -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_JIARongxu.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/cs101_cheatsheet_24_JIARongxu.pdf -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_JINMingxi.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/cs101_cheatsheet_24_JINMingxi.pdf -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_QIUZelin.md: -------------------------------------------------------------------------------- 1 | cheatsheet 2400011884 邱泽霖 2 | 3 | 队列操作 4 | 5 | ```python 6 | import queue 7 | q=queue.Queue() 8 | q.put('加入元素') 9 | a=q.get()#取出元素,先进先出 10 | while not q.empty():#判断是否有元素 11 | break 12 | ``` 13 | 14 | deque 15 | 16 | ```python 17 | from collections import deque 18 | deque.append() 19 | deque.appendleft() 20 | deque.pop() 21 | deque.popleft() 22 | ``` 23 | 24 | Time and Date 25 | 26 | ```python 27 | import calendar, datetime 28 | print(calander.isleap(2020)) 29 | print(datetime.datetime(2023,10,5).weekday())#输出星期几[0,星期一] 30 | ``` 31 | 32 | heapq 33 | 34 | ```python 35 | import heapq 36 | l=[1,2,3,4] 37 | l.heapify() 38 | l.heappush(5) 39 | #若需要最大堆则使用相反数 40 | ``` 41 | 42 | permutation 43 | 44 | ```python 45 | from itertools import permutations 46 | for i in permutations([1,2,3,4]): 47 | print(i) 48 | #dfs写法 49 | def dfs(n,path,used,res): 50 | if len(path)==n: 51 | res.append(path[:]) 52 | return 53 | for i in range(1,n+1): 54 | if not used[i]: 55 | used[i]=True 56 | path.append(i) 57 | dfs(n,path,used,res) 58 | path.pop() 59 | used[i]=False 60 | def print_permutations(n): 61 | res=[] 62 | dfs(n,[],[False]*(n+1),res) 63 | for perm in sorted(res): 64 | print(' '.join(map(str,perm))) 65 | ``` 66 | 67 | defaultdict 68 | 69 | ```python 70 | from collections import defaultdict 71 | a=defaultdict(int) 72 | ``` 73 | 74 | 冒泡排序 75 | 76 | ```python 77 | list=[1,4,5,9,3,5,2,6] 78 | for i in range(len(list)): 79 | for j in range(i): 80 | if list[i]0: 191 | print(min(tmin)) 192 | else: 193 | print("Oop!") 194 | ``` 195 | 196 | dijkstra 197 | 198 | ```python 199 | import heapq 200 | def find_min_cost_path(n,m,mat,queries): 201 | directions=[(1,0),(0,1),(0,-1),(-1,0)] 202 | results=[] 203 | for x,y,xx,yy in queries: 204 | if mat[x][y] == '#' or mat[xx][yy]=='#': 205 | results.append('NO') 206 | continue 207 | dist={(x,y):0} 208 | heap=[(0,x,y)] 209 | found=False 210 | while heap: 211 | cost,i,j=heapq.heappop(heap) 212 | if (i,j)==(xx,yy): 213 | results.append(cost) 214 | found=True 215 | break 216 | for di,dj in directions: 217 | ni,nj=i+di,j+dj 218 | if 0<=nidist[x][y]+abs(a[nx][ny]-a[x][y]): 18 | dist[nx][ny]=dist[x][y]+abs(a[nx][ny]-a[x][y]) 19 | heapq.heappush(pq,(cost+abs(a[nx][ny]-a[x][y]),nx,ny)) 20 | return float("inf") 21 | ``` 22 | 23 | 利用heapq简化存入取出的过程! 24 | 25 | ### Dilworth's theorem 26 | 27 | 最常见的应用:最小完整覆盖全数组的上升子序列数等于最长非上升子序列的长度,这类的! 28 | 29 | ### 二分查找模板 30 | 31 | bisect_left: 32 | 33 | ```python 34 | lo,hi=0,len(a) 35 | while lo < hi: 36 | mid = (lo + hi) // 2 37 | if a[mid] < x: 38 | lo = mid + 1 39 | else: 40 | hi = mid 41 | ``` 42 | 43 | bisect_right: 44 | 45 | ```python 46 | lo,hi=0,len(a) 47 | while lo < hi: 48 | mid = (lo + hi) // 2 49 | if x < a[mid]: 50 | hi = mid 51 | else: 52 | lo = mid + 1 53 | ``` 54 | 55 | ### python中用format保留小数位数的用法 56 | 57 | ```python 58 | # 保留两位小数 59 | number = 3.14159 60 | formatted_number = "{:.2f}".format(number) 61 | print(formatted_number) # 输出: 3.14 62 | ``` 63 | 64 | ### 哈希表 65 | 66 | 求得一个数组最长的和为0的连续子序列的方法(实例为求最长平均值为a的字串) 67 | 68 | ```python 69 | def longest_subarray_with_avg(arr, a): 70 | # 步骤 1: 将每个元素减去a 71 | diff = [x - a for x in arr] 72 | 73 | # 步骤 2: 使用哈希表存储前缀和 74 | prefix_sum = 0 75 | prefix_map = {0: -1} # 前缀和为0时,起始索引为-1 76 | max_len = 0 77 | start_index = -1 78 | 79 | # 步骤 3: 遍历数组并计算前缀和 80 | for i in range(len(diff)): 81 | prefix_sum += diff[i] 82 | 83 | # 步骤 4: 如果前缀和已经出现过,计算子数组的长度 84 | if prefix_sum in prefix_map: 85 | length = i - prefix_map[prefix_sum] 86 | if length > max_len: 87 | max_len = length 88 | start_index = prefix_map[prefix_sum] + 1 89 | else: 90 | prefix_map[prefix_sum] = i 91 | 92 | # 返回最长子数组 93 | if max_len > 0: 94 | return arr[start_index:start_index + max_len] 95 | else: 96 | return [] 97 | ``` 98 | 99 | ### 利用二分查找求最长下降子序列 100 | 101 | ```python 102 | import bisect 103 | 104 | k = int(input()) 105 | a = list(map(int, input().split())) 106 | 107 | # 反转数组来模拟下降子序列问题 108 | sub = [] 109 | 110 | for i in range(k): 111 | # 由于我们在寻找递增子序列的 "位置",所以我们在 sub 中寻找 "大于" 当前元素的位置 112 | pos = bisect.bisect_right(sub, a[i]) # 使用 bisect_right 来模拟下降序列的插入位置 113 | 114 | if pos < len(sub): 115 | sub[pos] = a[i] # 更新该位置的值 116 | else: 117 | sub.append(a[i]) # 如果没有找到合适位置,说明我们可以增加一个新的元素 118 | 119 | # 输出最长下降子序列的长度 120 | print(len(sub)) 121 | 122 | ``` 123 | 124 | -------------------------------------------------------------------------------- /cheatsheet/cs101_cheatsheet_24_ZHANGJunlong.md: -------------------------------------------------------------------------------- 1 | 2 | # Cheatsheet 3 | 4 | ## 1. Dijkstra 算法(用堆来实现) 5 | ```python 6 | import heapq 7 | m, n, p = map(int, input().split()) 8 | l = [input().split() for _ in range(m)] 9 | di = [(0, 1), (0, -1), (1, 0), (-1, 0)] 10 | 11 | def solve(x1, y1, x2, y2): 12 | heap = [] 13 | la = [[float('inf')] * n for _ in range(m)] 14 | if l[x1][y1] == '#' or l[x2][y2] == '#': 15 | return 'NO' 16 | la[x1][y1] = 0 17 | heapq.heappush(heap, (0, x1, y1)) 18 | while heap: 19 | d, x, y = heapq.heappop(heap) 20 | if x == x2 and y == y2: 21 | return d 22 | k = int(l[x][y]) 23 | for dx, dy in di: 24 | nx, ny = dx + x, dy + y 25 | if 0 <= nx < m and 0 <= ny < n and l[nx][ny] != '#': 26 | if la[nx][ny] > d + abs(k - int(l[nx][ny])): 27 | la[nx][ny] = d + abs(k - int(l[nx][ny])) 28 | heapq.heappush(heap, (la[nx][ny], nx, ny)) 29 | return 'NO' 30 | 31 | for _ in range(p): 32 | x1, y1, x2, y2 = map(int, input().split()) 33 | print(solve(x1, y1, x2, y2)) 34 | ``` 35 | 36 | ## 2. 并查集 + 路径压缩优化 37 | ```python 38 | def f(x): 39 | if x != s[x]: 40 | s[x] = f(s[x]) 41 | return s[x] 42 | ``` 43 | 44 | ## 3. 将一个数组划分为 k 份,求最小最大和(用二分优化暴力查找) 45 | ```python 46 | while start < end: 47 | t = (start + end) // 2 48 | if can(t): 49 | end = t 50 | else: 51 | start = t + 1 52 | print(end) 53 | ``` 54 | 55 | ## 4. 超级源点,BFS 水波扩展优化 56 | ```python 57 | m, n = len(grid), len(grid[0]) 58 | fresh = 0 59 | q = [] 60 | for i, row in enumerate(grid): 61 | for j, x in enumerate(row): 62 | if x == 1: 63 | fresh += 1 64 | elif x == 2: 65 | q.append((i, j)) # 一开始的预处理 66 | 67 | ans = 0 68 | while q and fresh: 69 | ans += 1 70 | tmp = q 71 | q = [] 72 | for x, y in tmp: 73 | for i, j in ((x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)): 74 | if 0 <= i < m and 0 <= j < n and grid[i][j] == 1: 75 | fresh -= 1 76 | grid[i][j] = 2 77 | q.append((i, j)) 78 | return -1 if fresh else ans 79 | ``` 80 | 81 | ## 5. 求所有排列时防止重复 82 | ```python 83 | s = set() 84 | for i in range(index, n): 85 | if candidates[i] in s: 86 | continue 87 | s.add(candidates[i]) 88 | k = sum1 + candidates[i] 89 | ``` 90 | 91 | 或者: 92 | ```python 93 | if i > index and candidates[i - 1] == candidates[i]: 94 | continue 95 | ``` 96 | 97 | ## 6. 贪心后悔解法 98 | ```python 99 | import heapq 100 | 101 | def max_potions(n, potions): 102 | health = 0 103 | consumed = [] 104 | for potion in potions: 105 | health += potion 106 | heapq.heappush(consumed, potion) 107 | if health < 0: 108 | if consumed: 109 | health -= heapq.heappop(consumed) 110 | return len(consumed) 111 | ``` 112 | 113 | ## 7. 递归改缓存 114 | ```python 115 | from functools import lru_cache 116 | 117 | @lru_cache(maxsize=None) 118 | def func(...): 119 | pass 120 | ``` 121 | 122 | ## 8. 辅助栈同时操作,记录最小或最大 123 | ... 124 | 125 | ## 9. 单词拆分之类的也可以用递归(加缓存) 126 | ... 127 | 128 | ## 10. 不想交的线可以转化为公共子序列 129 | ... 130 | 131 | ## 11. 最大正方形:确定右下角,取周围三个最小 + 1 132 | ```python 133 | for i in range(m): 134 | if matrix[0][i] == '1': 135 | la[0][i] = 1 136 | ans = 1 137 | for i in range(1, n): 138 | if matrix[i][0] == '1': 139 | la[i][0] = 1 140 | ans = max(ans, la[i][0]) 141 | for j in range(1, m): 142 | if matrix[i][j] == '1': 143 | la[i][j] = min(la[i-1][j], la[i-1][j-1], la[i][j-1]) + 1 144 | ans = max(ans, la[i][j]) 145 | return ans**2 146 | ``` 147 | 148 | ## 12. 小游戏方向升维 149 | ... 150 | 151 | ## 13. 宠物精灵之收服(三维问题) 152 | ```python 153 | n, m, k = map(int, input().split()) 154 | la = [[-1] * (m + 1) for _ in range(k + 1)] 155 | la[0][m] = n 156 | for q in range(1, k + 1): 157 | a, b = map(int, input().split()) 158 | for j in range(m + 1): 159 | for i in range(q, 0, -1): 160 | if j + b <= m and la[i-1][j+b] != -1: 161 | la[i][j] = max(la[i-1][j+b] - a, la[i][j]) 162 | 163 | def solve(): 164 | for i in range(k, -1, -1): 165 | for j in range(m, -1, -1): 166 | if la[i][j] != -1: 167 | print(i, j) 168 | return 169 | solve() 170 | ``` 171 | 172 | ## 14. 差分化(区间操作) 173 | ... 174 | 175 | ## 15. 三数之和(双指针) 176 | ```python 177 | nums.sort() 178 | for i in range(n-2): 179 | if i > 0 and nums[i] == nums[i-1]: 180 | continue 181 | left, right = i + 1, n - 1 182 | k = -nums[i] 183 | while left < right: 184 | if nums[left] + nums[right] == k: 185 | ans.append([nums[i], nums[left], nums[right]]) 186 | left += 1 187 | while nums[left] == nums[left-1] and left < right: 188 | left += 1 189 | elif nums[left] + nums[right] > k: 190 | right -= 1 191 | else: 192 | left += 1 193 | ``` 194 | 195 | ... (More sections follow) 196 | 197 | ## 16. 用栈实现字符串的解码 198 | ```python 199 | stack = [] 200 | res, multi = '', 0 201 | for i in s: 202 | if i == '[': 203 | stack.append((res, multi)) 204 | res, multi = '', 0 205 | elif i == ']': 206 | res1, multi1 = stack.pop() 207 | res = res1 + multi1 * res 208 | elif '0' <= i <= '9': 209 | multi = multi * 10 + int(i) 210 | else: 211 | res += i 212 | return res 213 | ``` 214 | 215 | ## 17. 在不单独创一个组的情况下将从 i 到 j 的数 reverse 216 | ```python 217 | def reverse(nums, i, j): 218 | while i < j: 219 | nums[i], nums[j] = nums[j], nums[i] 220 | i += 1 221 | j -= 1 222 | 223 | # 关键代码处理 224 | for i in range(n - 2, -1, -1): 225 | if nums[i] < nums[i + 1]: 226 | firstIndex = i 227 | break 228 | if firstIndex == -1: 229 | reverse(nums, 0, n - 1) 230 | return 231 | secondIndex = -1 232 | for i in range(n - 1, firstIndex, -1): 233 | if nums[i] > nums[firstIndex]: 234 | secondIndex = i 235 | break 236 | nums[firstIndex], nums[secondIndex] = nums[secondIndex], nums[firstIndex] 237 | reverse(nums, firstIndex + 1, n - 1) 238 | ``` 239 | 240 | ## 18. 双指针,不额外开创空间的情况下将同类数分在一起 241 | ```python 242 | start = 0 243 | for i in range(n): 244 | if nums[i] == 0: 245 | nums[i], nums[start] = nums[start], nums[i] 246 | start += 1 247 | for j in range(start, n): 248 | if nums[j] == 1: 249 | nums[j], nums[start] = nums[start], nums[j] 250 | start += 1 251 | ``` 252 | 253 | ## 19. Counter 使用 254 | ```python 255 | l = Counter(nums) 256 | a = l.most_common(1) # 1 表示返回个数(返回的是元组) 257 | 258 | # 对 Counter 形成的字典进行排序 259 | l = sorted(l.items()) # 默认以 key 排序 260 | sorted_items = sorted(counter.items(), key=lambda x: x[1], reverse=True) # 按 value 排序 261 | ``` 262 | 263 | ## 20. 异或操作 264 | - 有结合性,且 a^0 = a, a^a = 0 265 | 266 | ## 21. 跳跃游戏 2 267 | ```python 268 | n = len(nums) 269 | end, k, far, ans = 0, 0, 0, 0 270 | for i in range(n - 1): 271 | far = max(far, i + nums[i]) 272 | if i == end: 273 | end = far 274 | ans += 1 275 | return ans 276 | ``` 277 | 278 | ## 22. 跳跃游戏 1 279 | ```python 280 | n, rightmost = len(nums), 0 281 | for i in range(n): 282 | if i <= rightmost: 283 | rightmost = max(rightmost, i + nums[i]) 284 | if rightmost >= n - 1: 285 | return True 286 | return False 287 | ``` 288 | 289 | ## 23. 划分字母区间 290 | ```python 291 | l = defaultdict(int) 292 | n = len(s) 293 | for i in range(n): 294 | l[s[i]] = i 295 | k = 0 296 | end = 0 297 | start = 0 298 | ans = [] 299 | while k < n: 300 | end = max(l[s[k]], end) 301 | if k == end: 302 | ans.append(end - start + 1) 303 | start = k + 1 304 | k += 1 305 | ``` 306 | 307 | ## 24. 双指针实现求长度最短的子数组(有 DP 的思想) 308 | ```python 309 | while e < n: 310 | k += nums[e] 311 | while k >= target: 312 | ans = min(ans, e - s + 1) 313 | k -= nums[s] 314 | s += 1 315 | e += 1 316 | ``` 317 | 318 | ## 25. 滑动窗口(仅关键部分) 319 | ```python 320 | for i in range(k, len(nums)): 321 | while q and nums[q[-1]] <= nums[i]: 322 | q.pop() 323 | q.append(i) 324 | while q[0] <= i - k: 325 | q.popleft() 326 | la.append(nums[q[0]]) 327 | ``` 328 | 329 | ## 26. 和为 k 的子数组 330 | ```python 331 | ans = s = 0 332 | cnt = defaultdict(int) 333 | cnt[0] = 1 # s[0] = 0 单独统计 334 | for x in nums: 335 | s += x 336 | ans += cnt[s - k] 337 | cnt[s] += 1 338 | return ans 339 | ``` 340 | 341 | ## 27. 旋转矩阵 342 | ```python 343 | rows, columns = len(matrix), len(matrix[0]) 344 | visited = [[False] * columns for _ in range(rows)] 345 | total = rows * columns 346 | order = [0] * total 347 | directions = [[0, 1], [1, 0], [0, -1], [-1, 0]] 348 | row, column = 0, 0 349 | directionIndex = 0 350 | for i in range(total): 351 | order[i] = matrix[row][column] 352 | visited[row][column] = True 353 | nextRow, nextColumn = row + directions[directionIndex][0], column + directions[directionIndex][1] 354 | if not (0 <= nextRow < rows and 0 <= nextColumn < columns and not visited[nextRow][nextColumn]): 355 | directionIndex = (directionIndex + 1) % 4 356 | row += directions[directionIndex][0] 357 | column += directions[directionIndex][1] 358 | return order 359 | ``` 360 | 361 | ## 28. 整数划分问题:确定上界的组合 362 | ```python 363 | n = int(input()) 364 | l = [1] * (n + 1) 365 | for i in range(1, n): 366 | for j in range(i + 1, n + 1): 367 | l[j] = l[j] + l[j - i - 1] 368 | print(l[n]) 369 | ``` 370 | 371 | ## 29. 以一点为单位的 DP 372 | - 一般用前 i 个来弄比较好。 373 | - 但如果是多维的,只能用第 i 个,因为要考虑尾部是否可以合并。 374 | 375 | ## 30. 修改递归深度 376 | ```python 377 | import sys 378 | sys.setrecursionlimit(20000) 379 | ``` 380 | -------------------------------------------------------------------------------- /cheatsheet/plycheetsheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/plycheetsheet.pdf -------------------------------------------------------------------------------- /cheatsheet/python_cheating_paper_24_ZNEGSiyuan.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/cheatsheet/python_cheating_paper_24_ZNEGSiyuan.docx -------------------------------------------------------------------------------- /code/assign_stu_to_ta.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | df = pd.read_excel('xkmd-20240919.xls') 4 | df_schools = df['系所名称'].value_counts().reset_index() 5 | df_schools.columns = ['系所名称', 'Count'] 6 | #print(df_schools) 7 | 8 | fPlot = False 9 | if fPlot: 10 | import itertools 11 | #print(*df_schools.loc[:, ['所属院系']].values) 12 | #print(*df_schools.loc[:, ['Count']].values) 13 | labels = list(itertools.chain(*df_schools.loc[:, ['系所名称']].values)) 14 | sizes = list(itertools.chain(*df_schools.loc[:, ['Count']].values)) 15 | 16 | import matplotlib.pyplot as plt 17 | plt.rcParams['font.family'] = ['Heiti TC'] 18 | 19 | fig, ax = plt.subplots(figsize=(20, 20)) 20 | ax.pie(sizes, labels=labels, autopct='%1.1f%%') 21 | 22 | plt.title(label="2024/9/19 选课院系分布", 23 | fontsize=20, 24 | loc="left", 25 | color="green") 26 | plt.show() 27 | import sys; sys.exit(0) 28 | 29 | # 按照年级、院系和是否留学生排序 30 | df.sort_values(['学号', '系所名称', '专业名称'], inplace=True) 31 | 32 | # 初始化助教列表,这里以0到m-1的数字代表每位助教 33 | TAs = ["涂程颖", "罗熙佑", "刘昊文", "熊江凯", "王嘉林"] 34 | m = len(TAs) 35 | assistants = list(range(m)) 36 | 37 | # 为每个助教创建空字典,存储其管理的学生信息 38 | assistant_students = {assistant: [] for assistant in assistants} 39 | 40 | # 按排序后的顺序,将学生平均分配给助教 41 | for i, student in enumerate(df.itertuples()): 42 | assistant_students[i%m].append((student.学号, student.姓名, student.系所名称, student.专业名称)) 43 | 44 | with pd.ExcelWriter("assistant_students.xlsx", engine='xlsxwriter') as writer: 45 | for assistant, students in assistant_students.items(): 46 | #print(f'助教 {TAs[assistant]} 管理的学生:') 47 | #for student in students: 48 | # print('\t {},{},{},{}'.format(*student)) 49 | 50 | df = pd.DataFrame(data=students, columns=['学号', '姓名', '系所名称', '专业名称']) 51 | df.to_excel(writer, sheet_name=TAs[assistant], index=False) 52 | 53 | # auto-adjust-excel-column-widths 54 | # ref: https://stackoverflow.com/questions/17326973/is-there-a-way-to-auto-adjust-excel-column-widths-with-pandas-excelwriter 55 | # If you get AttributeError: 'Worksheet' object has no attribute 'set_column', you may be missing XlsxWriter and 56 | # pandas is falling back on openpyxl. pip install XlsxWriter should solve it 57 | for idx, col in enumerate(df): # loop through all columns 58 | series = df[col] 59 | max_len = max(( 60 | series.astype(str).map(len).max(), # len of largest item 61 | len(str(series.name)) # len of column name/header 62 | )) + 8 # adding a little extra space 63 | writer.sheets[TAs[assistant]].set_column(idx, idx, max_len) # set column width 64 | 65 | -------------------------------------------------------------------------------- /code/college_distribution.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | df = pd.read_excel('studentListInCourse-20240907.xls') 4 | df_schools = df['所属院系'].value_counts().reset_index() 5 | df_schools.columns = ['所属院系', 'Count'] 6 | #print(df_schools) 7 | 8 | import itertools 9 | #print(*df_schools.loc[:, ['所属院系']].values) 10 | #print(*df_schools.loc[:, ['Count']].values) 11 | labels = list(itertools.chain(*df_schools.loc[:, ['所属院系']].values)) 12 | sizes = list(itertools.chain(*df_schools.loc[:, ['Count']].values)) 13 | 14 | import matplotlib.pyplot as plt 15 | plt.rcParams['font.family'] = ['Heiti TC'] 16 | 17 | fig, ax = plt.subplots(figsize=(15, 15)) 18 | ax.pie(sizes, labels=labels, autopct='%1.1f%%') 19 | 20 | plt.title(label="2024/9/7 选课院系分布", 21 | fontsize=20, 22 | loc="left", 23 | color="green") 24 | plt.show() 25 | -------------------------------------------------------------------------------- /code/fortune.py: -------------------------------------------------------------------------------- 1 | # 参考 https://blog.csdn.net/pythonwyw123321/article/details/136659699 2 | import random 3 | 4 | # 定义随机函数 5 | def get_random_int(a, b): 6 | return random.randint(a, b) 7 | 8 | # 运势权重列表 9 | weights = [2, 4, 15, 15, 16, 16, 25, 7, 5] 10 | # 运势名称 11 | fortunes = [ 12 | "宇宙超级凶", "大凶", "中平", "小平", 13 | "小凶", "中吉", "小吉", "超级吉", "中凶" 14 | ] 15 | 16 | # 宜做的事情列表 17 | yi_list = [ 18 | ["宜:诸事不宜"] * 4, 19 | ["宜:装弱", "宜:窝在家里", "宜:刷题", "宜:吃饭"], 20 | ["宜:刷题", "宜:开电脑", "宜:写作业", "宜:睡觉"], 21 | ["宜:发朋友圈", "宜:出去玩", "宜:打游戏", "宜:吃饭"], 22 | ["宜:学习", "宜:研究Ruby", "宜:研究c#", "宜:玩游戏"], 23 | ["宜:膜拜大神", "宜:扶老奶奶过马路", "宜:玩网游", "宜:喝可乐"], 24 | ["宜:吃东西", "宜:打sdvx", "宜:打开洛谷", "宜:出行"], 25 | ["宜:写程序", "宜:刷题", "宜:偷塔", "宜:上CSDN"], 26 | ["宜:扶老奶奶过马路", "宜:上课", "宜:写作业", "宜:写程序"] 27 | ] 28 | 29 | # 宜做的事情解释列表 30 | yi_shi_list = [ 31 | [""] * 4, 32 | ["谦虚最好了", "不出门没有危险", "直接AC", "吃的饱饱的再学习"], 33 | ["一次AC", "发现电脑死机了", "全对", "睡足了再学习"], 34 | ["点赞量破百", "真开心", "十连胜", "吃饱了"], 35 | ["都会", "有了新发现", "发现新大陆", "直接胜利"], 36 | ["接受神之沐浴", "增加RP", "犹如神助", "真好喝"], 37 | ["吃饱了", "今天状态好", "发现AC的题变多了", "路途顺畅"], 38 | ["不会报错", "直接TLE", "胜利", "发现粉丝涨了200个"], 39 | ["增加RP", "听懂了", "都会", "没有Bug"] 40 | ] 41 | 42 | # 忌做的事情列表 43 | ji_list = [ 44 | ["忌:诸事不宜"] * 4, 45 | ["忌:打sdvx", "忌:出行", "忌:玩手机", "忌:吃方便面"], 46 | ["忌:关电脑", "忌:开挂", "忌:纳财", "忌:考试"], 47 | ["忌:膜拜大神", "忌:评论", "忌:研究Java", "忌:吃方便面"], 48 | ["忌:发朋友圈", "忌:打开洛谷", "忌:研究C++", "忌:出行"], 49 | ["忌:探险", "忌:发视频", "忌:发博客", "忌:给别人点赞"], 50 | ["忌:写程序", "忌:使用Unity打包exe", "忌:装弱", "忌:打开CSDN"], 51 | ["忌:点开wx", "忌:刷题", "忌:打吃鸡", "忌:和别人分享你的程序"], 52 | ["忌:纳财", "忌:写程序超过500行", "忌:断网", "忌:检测Bug"] 53 | ] 54 | 55 | # 忌做的事情解释列表 56 | ji_shi_list = [ 57 | [""] * 4, 58 | ["今天状态不好", "路途也许坎坷", "好家伙,直接死机", "没有调味料"], 59 | ["死机了", "被制裁", "你没有财运", "没及格"], 60 | ["被人嘲笑", "被喷", "心态崩溃", "只有一包调味料"], 61 | ["被人当成买面膜的", "大凶", "五行代码198个报错", "路途坎坷"], 62 | ["你失踪了", "被人喷", "阅读量1", "被人嘲笑"], 63 | ["报错19999+", "电脑卡死,发现刚才做的demo全没了", "被人看穿", "被人陷害"], 64 | ["被人陷害", "WA", "被队友炸死", "别人发现了Bug"], 65 | ["没有财运", "99+报错", "连不上了", "503个Bug"] 66 | ] 67 | 68 | # 计算权重总和 69 | total_weight = sum(weights) 70 | # 生成随机数 71 | random_value = random.randint(0, total_weight) 72 | fortune_index = 0 73 | 74 | # 根据权重选择运势 75 | for weight in weights: 76 | if random_value <= weight: 77 | break 78 | random_value -= weight 79 | fortune_index += 1 80 | 81 | # 输出运势结果 82 | print("\t\t你的运势是:") 83 | print("\t\t" + fortunes[fortune_index]) 84 | for idx, name in enumerate(fortunes): 85 | if name == fortunes[fortune_index]: 86 | print("\t" + yi_list[idx][get_random_int(0, 3)], end="") 87 | print("\t" + ji_list[idx][get_random_int(0, 3)]) 88 | print("\t" + yi_shi_list[idx][get_random_int(0, 3)], end="") 89 | print("\t" + ji_shi_list[idx][get_random_int(0, 3)]) 90 | break 91 | -------------------------------------------------------------------------------- /code/sendEmail.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | df = pd.read_excel('studentListInCourse-20240907.xls') 4 | student_id = df['学号'].tolist() 5 | 6 | sent_id = { 7 | 1900012178, 2000013361, 2000013372, 2100011745, 2100011800, 2100013281, 2100013359, 2100013383, 2100014523, 2100015521, 8 | 2100015873, 2100015889, 2100016964, 2100017469, 2100017761, 2100017785, 2200011753, 2200011806, 2200013427, 2200013432, 9 | 2200013707, 2200013712, 2200015155, 2200015455, 2200015872, 2200017856, 2200018112, 2300010821, 2300011759, 2300012256, 10 | 2300013310, 2300013714, 2300015492, 2300016613, 2300016641, 2300017406, 2300017409, 2300017460, 2300017745, 2300017753, 11 | 2300017808, 2300018124, 2300018216, 2300019005, 2300091602, 2300091605, 2300093006, 2300093007, 2300093008, 2400010608, 12 | 2400010615, 2400010620, 2400010735, 2400010740, 2400010756, 2400010762, 2400010771, 2400010820, 2400010844, 2400010879, 13 | 2400010955, 2400010982, 2400010985, 2400010992, 2400011010, 2400011015, 2400011024, 2400011033, 2400011044, 2400011047, 14 | 2400011066, 2400011103, 2400011111, 2400011118, 2400011165, 2400011178, 2400011221, 2400011225, 2400011226, 2400011234, 15 | 2400011245, 2400011256, 2400011308, 2400011337, 2400011347, 2400011402, 2400011409, 2400011410, 2400011416, 2400011417, 16 | 2400011418, 2400011419, 2400011420, 2400011423, 2400011424, 2400011425, 2400011426, 2400011428, 2400011429, 2400011430, 17 | 2400011431, 2400011432, 2400011433, 2400011435, 2400011437, 2400011440, 2400011441, 2400011444, 2400011446, 2400011450, 18 | 2400011451, 2400011453, 2400011454, 2400011455, 2400011456, 2400011459, 2400011461, 2400011462, 2400011465, 2400011468, 19 | 2400011470, 2400011473, 2400011474, 2400011477, 2400011483, 2400011484, 2400011486, 2400011489, 2400011490, 2400011491, 20 | 2400011494, 2400011496, 2400011497, 2400011498, 2400011501, 2400011503, 2400011504, 2400011505, 2400011510, 2400011514, 21 | 2400011516, 2400011524, 2400011545, 2400011546, 2400011559, 2400011611, 2400011705, 2400011707, 2400011708, 2400011709, 22 | 2400011714, 2400011716, 2400011717, 2400011722, 2400011727, 2400011732, 2400011735, 2400011738, 2400011740, 2400011749, 23 | 2400011753, 2400011754, 2400011759, 2400011762, 2400011766, 2400011768, 2400011769, 2400011770, 2400011772, 2400011777, 24 | 2400011778, 2400011782, 2400011784, 2400011785, 2400011787, 2400011788, 2400011789, 2400011794, 2400011795, 2400011806, 25 | 2400011811, 2400011813, 2400011851, 2400011852, 2400011855, 2400011858, 2400011862, 2400011876, 2400011880, 2400011884, 26 | 2400012131, 2400012133, 2400012139, 2400012151, 2400012257, 2400012260, 2400012261, 2400012262, 2400012280, 2400012282, 27 | 2400012414, 2400012417, 2400012424, 2400012433, 2400012443, 2400012557, 2400012560, 2400012601, 2400012605, 2400012619, 28 | 2400013254, 2400013260, 2400013262, 2400013305, 2400013310, 2400013331, 2400013403, 2400013411, 2400013418, 2400013420, 29 | 2400013424, 2400013510, 2400013761, 2400015416, 2400015804, 2400015830, 2400015896, 2400016607, 2400016617, 2400016635, 30 | 2400016640, 2400016642, 2400016644, 2400017431, 2400017712, 2400091007, 2400093016, 2410306105, 2200016815, 2300012657, 31 | 2300016915, 2300017439, 2400010629, 2400010981, 2400011016, 2400011020, 2400011025, 2400011046, 2400011049, 2400011112, 32 | 2400011114, 2400011157, 2400011176, 2400011182, 2400011205, 2400011220, 2400011229, 2400011411, 2400011413, 2400011445, 33 | 2400011447, 2400011457, 2400011466, 2400011492, 2400011507, 2400011574, 2400011721, 2400011737, 2400011878, 2400012110, 34 | 2400012143, 2400012149, 2400012403, 2400012554, 2400013320, 2400013414, 2400015881, 2400016620, 2400017745, 2400017773, 35 | 2400017852, 2410120125, 2100017405, 2300013411, 2300017766, 2300017770, 2400010622, 2400010759, 2400010951, 2400010952, 36 | 2400010967, 2400011005, 2400011009, 2400011014, 2400011018, 2400011026, 2400011031, 2400011036, 2400011062, 2400011107, 37 | 2400011125, 2400011128, 2400011158, 2400011168, 2400011171, 2400011203, 2400011214, 2400011237, 2400011241, 2400011248, 38 | 2400011258, 2400011340, 2400011481, 2400011533, 2400011713, 2400011763, 2400011771, 2400011868, 2400012113, 2400012124, 39 | 2400012154, 2400012266, 2400012402, 2400012421, 2400012425, 2400012618, 2400013405, 2400013417, 2400013422, 2400013774, 40 | 2400015853, 2400015888, 2400016627, 2400016634, 2400017729, 2400018908, 2400019409, 2400090102, 2400092704, 2300014219, 41 | 2400010621, 2400010973, 2400010974, 2400010988, 2400010989, 2400010998, 2400011028, 2400011050, 2400011060, 2400011131, 42 | 2400011162, 2400011172, 2400011185, 2400011186, 2400011239, 2400011499, 2400011509, 2400012405, 2400012561, 2400012562, 43 | 2400012609, 2400012659, 2400013426, 2400013765, 2400015832, 2400015840, 2400015844, 2400015857, 2400015863, 2400015873, 44 | 2400016606, 2400016624, 2400016638, 2400016647, 2400016661, 2400017772, 2400010964, 2400010975, 2400010996, 2400011001, 45 | 2400011011, 2400011041, 2400011059, 2400011064, 2400011210, 2400011257, 2400011260, 2400012120, 2400012148, 2400012304, 46 | 2400012434, 2400012508, 2400012510, 2400012511, 2400013275, 2400013322, 2400013404, 2400013406, 2400013408, 2400013763, 47 | 2400017474, 2400017706, 2400018708, 2300018117, 2400010961, 2400011004, 2400011037, 2400011058, 2400011127, 2400011211, 48 | 2400011236, 2400011339, 2400012119, 2400012144, 2400012277, 2400012288, 2400012438, 2400012563, 2400012613, 2400013273, 49 | 2400013317, 2400016619, 2400017854, 2400017856, 2400091004, 2400091103, 2000094627, 2300014954, 2400011231, 2400011870, 50 | 2400012281, 2400013319, 2400017824, 2400090105, 2400013330, 2400016660, 2400017740, 2400018909, 2200017446, 2400011318, 51 | 2400011513, 2400011723, 2400012251, 2400012252, 2400012564, 2400012623, 2400012625, 2400013306, 2400013328, 2400016633, 52 | 2400016657, 2400017708, 2400017744, 2400017775, 2400017777, 2400017837, 2400017848, 2400017849, 2400017859, 2400091002, 53 | 2400093004, 2400094604, 2400098602, 2100017479, 2300014927, 2300017728, 2400010991, 2400011045, 2400011223, 2400011469, 54 | 2400011820, 2400011821, 2400011853, 2400011869, 2400011882, 2400012153, 2400012259, 2400012289, 2400012297, 2400012300, 55 | 2400012656, 2400013562, 2400013563, 2400015878, 2400016650, 2400017437, 2400018739, 2400090106, 2400090107, 2400091102, 56 | 2400091105, 2400094627, 2300012257, 2400010859, 2400011311, 2400011326, 2400011859, 2400011883, 2400012126, 2400012439, 57 | 2400012440, 2400012603, 2400012658, 2400017799, 2400018911, 2410307406 58 | 59 | 60 | } 61 | 62 | print(len(sent_id)) 63 | 64 | res1 = [] 65 | res2 = [] 66 | for i in student_id: 67 | if i in sent_id: 68 | continue 69 | 70 | res2.append(i) 71 | if i < 2e9: 72 | res1.append(f"{i}@pku.edu.cn") 73 | else: 74 | res1.append(f"{i}@stu.pku.edu.cn") 75 | 76 | print(','.join(res1)) 77 | print(', '.join(map(str, res2))) 78 | 79 | ''' 80 | 我是mac机器,可以这样发送,但是北大邮箱总把收到的邮件归到Spam里面。 81 | (cat mail.txt; uuencode 20230820-Wechat.jpg 20230820-Wechat.jpg)|mail -s "202308 计算概论(B)(12班)课程微信群" x@pku.edu.cn 82 | 83 | 所以我现在是程序输出要发送同学的邮箱地址列表,拷贝下来,在浏览器邮件里面发送。 84 | ''' 85 | -------------------------------------------------------------------------------- /code/testing_code.py: -------------------------------------------------------------------------------- 1 | # ZHANG Yuxuan 2 | import subprocess 3 | import difflib 4 | import os 5 | import sys 6 | 7 | def test_code(script_path, infile, outfile): 8 | command = ["python", script_path] # 使用Python解释器运行脚本 9 | with open(infile, 'r') as fin, open(outfile, 'r') as fout: 10 | expected_output = fout.read().strip() 11 | # 启动一个新的子进程来运行指定的命令 12 | process = subprocess.Popen(command, stdin=fin, stdout=subprocess.PIPE) 13 | actual_output, _ = process.communicate() 14 | if actual_output.decode().strip() == expected_output: 15 | return True 16 | else: 17 | print(f"Output differs for {infile}:") 18 | diff = difflib.unified_diff( 19 | expected_output.splitlines(), 20 | actual_output.decode().splitlines(), 21 | fromfile='Expected', tofile='Actual', lineterm='' 22 | ) 23 | print('\n'.join(diff)) 24 | return False 25 | 26 | 27 | if __name__ == "__main__": 28 | # 检查命令行参数的数量 29 | if len(sys.argv) != 2: 30 | print("Usage: python testing_code.py ") 31 | sys.exit(1) 32 | 33 | # 获取文件名 34 | script_path = sys.argv[1] 35 | 36 | #script_path = "class.py" # 你的Python脚本路径 37 | #test_cases = ["d.in"] # 输入文件列表 38 | #expected_outputs = ["d.out"] # 预期输出文件列表 39 | # 获取当前目录下的所有文件 40 | files = os.listdir('.') 41 | 42 | # 筛选出 .in 和 .out 文件 43 | test_cases = [f for f in files if f.endswith('.in')] 44 | test_cases = sorted(test_cases, key=lambda x: int(x.split('.')[0])) 45 | #print(test_cases) 46 | expected_outputs = [f for f in files if f.endswith('.out')] 47 | expected_outputs = sorted(expected_outputs, key=lambda x: int(x.split('.')[0])) 48 | #print(expected_outputs) 49 | 50 | for infile, outfile in zip(test_cases, expected_outputs): 51 | if not test_code(script_path, infile, outfile): 52 | break 53 | -------------------------------------------------------------------------------- /homework/assignment1.md: -------------------------------------------------------------------------------- 1 | # Assignment #1: 自主学习 2 | 3 | Updated 0110 GMT+8 Sep 10, 2024 4 | 5 | 2024 fall, Complied by ==同学的姓名、院系== 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)课程网站是Canvas平台, https://pku.instructure.com, 学校通知9月19日导入选课名单后启用。**作业写好后,保留在自己手中,待9月20日提交。** 14 | 15 | 提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 16 | 17 | 3)如果不能在截止前提交作业,请写明原因。 18 | 19 | 20 | 21 | ## 1. 题目 22 | 23 | ### 02733: 判断闰年 24 | 25 | http://cs101.openjudge.cn/practice/02733/ 26 | 27 | 28 | 29 | 思路: 30 | 31 | 32 | 33 | ##### 代码 34 | 35 | ```python 36 | # 37 | 38 | ``` 39 | 40 | 41 | 42 | 代码运行截图 ==(至少包含有"Accepted")== 43 | 44 | 45 | 46 | 47 | 48 | ### 02750: 鸡兔同笼 49 | 50 | http://cs101.openjudge.cn/practice/02750/ 51 | 52 | 53 | 54 | 思路: 55 | 56 | 57 | 58 | ##### 代码 59 | 60 | ```python 61 | # 62 | 63 | ``` 64 | 65 | 66 | 67 | 代码运行截图 ==(至少包含有"Accepted")== 68 | 69 | 70 | 71 | 72 | 73 | ### 50A. Domino piling 74 | 75 | greedy, math, 800, http://codeforces.com/problemset/problem/50/A 76 | 77 | 78 | 79 | 思路: 80 | 81 | 82 | 83 | ##### 代码 84 | 85 | ```python 86 | # 87 | 88 | ``` 89 | 90 | 91 | 92 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 93 | 94 | 95 | 96 | 97 | 98 | ### 1A. Theatre Square 99 | 100 | math, 1000, https://codeforces.com/problemset/problem/1/A 101 | 102 | 103 | 104 | 思路: 105 | 106 | 107 | 108 | ##### 代码 109 | 110 | ```python 111 | # 112 | 113 | ``` 114 | 115 | 116 | 117 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 118 | 119 | 120 | 121 | 122 | 123 | ### 112A. Petya and Strings 124 | 125 | implementation, strings, 1000, http://codeforces.com/problemset/problem/112/A 126 | 127 | 128 | 129 | 思路: 130 | 131 | 132 | 133 | ##### 代码 134 | 135 | ```python 136 | # 137 | 138 | ``` 139 | 140 | 141 | 142 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 143 | 144 | 145 | 146 | 147 | 148 | ### 231A. Team 149 | 150 | bruteforce, greedy, 800, http://codeforces.com/problemset/problem/231/A 151 | 152 | 153 | 154 | 思路: 155 | 156 | 157 | 158 | ##### 代码 159 | 160 | ```python 161 | # 162 | 163 | ``` 164 | 165 | 166 | 167 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 168 | 169 | 170 | 171 | 172 | 173 | ## 2. 学习总结和收获 174 | 175 | ==如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。== 176 | 177 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /homework/assignment2.md: -------------------------------------------------------------------------------- 1 | # Assignment #2: 语法练习 2 | 3 | Updated 0126 GMT+8 Sep 24, 2024 4 | 5 | 2024 fall, Complied by ==同学的姓名、院系== 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)课程网站是Canvas平台, https://pku.instructure.com, 学校通知9月19日导入选课名单后启用。**作业写好后,保留在自己手中,待9月20日提交。** 14 | 15 | 提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 16 | 17 | 3)如果不能在截止前提交作业,请写明原因。 18 | 19 | 20 | 21 | ## 1. 题目 22 | 23 | ### 263A. Beautiful Matrix 24 | 25 | https://codeforces.com/problemset/problem/263/A 26 | 27 | 28 | 29 | 思路: 30 | 31 | 32 | 33 | ##### 代码 34 | 35 | ```python 36 | # 37 | 38 | ``` 39 | 40 | 41 | 42 | 代码运行截图 ==(至少包含有"Accepted")== 43 | 44 | 45 | 46 | 47 | 48 | ### 1328A. Divisibility Problem 49 | 50 | https://codeforces.com/problemset/problem/1328/A 51 | 52 | 53 | 54 | 思路: 55 | 56 | 57 | 58 | ##### 代码 59 | 60 | ```python 61 | # 62 | 63 | ``` 64 | 65 | 66 | 67 | 代码运行截图 ==(至少包含有"Accepted")== 68 | 69 | 70 | 71 | 72 | 73 | ### 427A. Police Recruits 74 | 75 | https://codeforces.com/problemset/problem/427/A 76 | 77 | 78 | 79 | 思路: 80 | 81 | 82 | 83 | ##### 代码 84 | 85 | ```python 86 | # 87 | 88 | ``` 89 | 90 | 91 | 92 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 93 | 94 | 95 | 96 | 97 | 98 | ### 02808: 校门外的树 99 | 100 | http://cs101.openjudge.cn/practice/02808/ 101 | 102 | 103 | 104 | 思路: 105 | 106 | 107 | 108 | ##### 代码 109 | 110 | ```python 111 | # 112 | 113 | ``` 114 | 115 | 116 | 117 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 118 | 119 | 120 | 121 | 122 | 123 | ### sy60: 水仙花数II 124 | 125 | https://sunnywhy.com/sfbj/3/1/60 126 | 127 | 128 | 129 | 思路: 130 | 131 | 132 | 133 | ##### 代码 134 | 135 | ```python 136 | # 137 | 138 | ``` 139 | 140 | 141 | 142 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 143 | 144 | 145 | 146 | 147 | 148 | ### 01922: Ride to School 149 | 150 | http://cs101.openjudge.cn/practice/01922/ 151 | 152 | 153 | 154 | 思路: 155 | 156 | 157 | 158 | ##### 代码 159 | 160 | ```python 161 | # 162 | 163 | ``` 164 | 165 | 166 | 167 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 168 | 169 | 170 | 171 | 172 | 173 | ## 2. 学习总结和收获 174 | 175 | ==如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。== 176 | 177 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /homework/assignment3.md: -------------------------------------------------------------------------------- 1 | # Assign #3: Oct Mock Exam暨选做题目满百 2 | 3 | Updated 1537 GMT+8 Oct 10, 2024 4 | 5 | 2024 fall, Complied by Hongfei Yan==(请改为同学的姓名、院系)== 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)Oct⽉考: AC6==(请改为同学的通过数)== 。考试题⽬都在“题库(包括计概、数算题目)”⾥⾯,按照数字题号能找到,可以重新提交。作业中提交⾃⼰最满意版本的代码和截图。 12 | 13 | 2)请把每个题目解题思路(可选),源码Python, 或者C++/C(已经在Codeforces/Openjudge上AC),截图(包含Accepted, 学号),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 14 | 15 | 3)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、作业评论有md或者doc。 16 | 17 | 4)如果不能在截止前提交作业,请写明原因。 18 | 19 | 20 | 21 | ## 1. 题目 22 | 23 | ### E28674:《黑神话:悟空》之加密 24 | 25 | http://cs101.openjudge.cn/practice/28674/ 26 | 27 | 28 | 29 | 思路: 30 | 31 | 32 | 33 | 代码 34 | 35 | ```python 36 | 37 | 38 | ``` 39 | 40 | 41 | 42 | 代码运行截图 ==(至少包含有"Accepted")== 43 | 44 | 45 | 46 | 47 | 48 | ### E28691: 字符串中的整数求和 49 | 50 | http://cs101.openjudge.cn/practice/28691/ 51 | 52 | 53 | 54 | 思路: 55 | 56 | 57 | 58 | 代码 59 | 60 | ```python 61 | 62 | 63 | ``` 64 | 65 | 66 | 67 | 代码运行截图 ==(至少包含有"Accepted")== 68 | 69 | 70 | 71 | 72 | 73 | ### M28664: 验证身份证号 74 | 75 | http://cs101.openjudge.cn/practice/28664/ 76 | 77 | 78 | 79 | 思路: 80 | 81 | 82 | 83 | 代码 84 | 85 | ```python 86 | 87 | 88 | ``` 89 | 90 | 91 | 92 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 93 | 94 | 95 | 96 | 97 | 98 | ### M28678: 角谷猜想 99 | 100 | http://cs101.openjudge.cn/practice/28678/ 101 | 102 | 103 | 104 | 思路: 105 | 106 | 107 | 108 | 代码 109 | 110 | ```python 111 | 112 | 113 | ``` 114 | 115 | 116 | 117 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 118 | 119 | 120 | 121 | 122 | 123 | ### M28700: 罗马数字与整数的转换 124 | 125 | http://cs101.openjudge.cn/practice/28700/ 126 | 127 | 128 | 129 | 思路: 130 | 131 | 132 | 133 | ##### 代码 134 | 135 | ```python 136 | # 137 | 138 | ``` 139 | 140 | 141 | 142 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 143 | 144 | 145 | 146 | 147 | 148 | ### *T25353: 排队 (选做) 149 | 150 | http://cs101.openjudge.cn/practice/25353/ 151 | 152 | 153 | 154 | 思路: 155 | 156 | 157 | 158 | 代码 159 | 160 | ```python 161 | 162 | 163 | ``` 164 | 165 | 166 | 167 | 代码运行截图 ==(AC代码截图,至少包含有"Accepted")== 168 | 169 | 170 | 171 | 172 | 173 | ## 2. 学习总结和收获 174 | 175 | ==如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。== 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /homework/assignment4.md: -------------------------------------------------------------------------------- 1 | # Assignment #4: T-primes + 贪心 2 | 3 | Updated 0337 GMT+8 Oct 15, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### 34B. Sale 22 | 23 | greedy, sorting, 900, https://codeforces.com/problemset/problem/34/B 24 | 25 | 26 | 27 | 思路: 28 | 29 | 30 | 31 | 代码 32 | 33 | ```python 34 | # 35 | 36 | ``` 37 | 38 | 39 | 40 | 代码运行截图 (至少包含有"Accepted") 41 | 42 | 43 | 44 | 45 | 46 | ### 160A. Twins 47 | 48 | greedy, sortings, 900, https://codeforces.com/problemset/problem/160/A 49 | 50 | 思路: 51 | 52 | 53 | 54 | 代码 55 | 56 | ```python 57 | 58 | 59 | ``` 60 | 61 | 62 | 63 | 代码运行截图 ==(至少包含有"Accepted")== 64 | 65 | 66 | 67 | 68 | 69 | ### 1879B. Chips on the Board 70 | 71 | constructive algorithms, greedy, 900, https://codeforces.com/problemset/problem/1879/B 72 | 73 | 思路: 74 | 75 | 76 | 77 | 代码 78 | 79 | ```python 80 | 81 | 82 | ``` 83 | 84 | 85 | 86 | 代码运行截图 (至少包含有"Accepted") 87 | 88 | 89 | 90 | 91 | 92 | ### 158B. Taxi 93 | 94 | *special problem, greedy, implementation, 1100, https://codeforces.com/problemset/problem/158/B 95 | 96 | 思路: 97 | 98 | 99 | 100 | 代码 101 | 102 | ```python 103 | 104 | 105 | ``` 106 | 107 | 108 | 109 | 代码运行截图 (至少包含有"Accepted") 110 | 111 | 112 | 113 | 114 | 115 | ### *230B. T-primes(选做) 116 | 117 | binary search, implementation, math, number theory, 1300, http://codeforces.com/problemset/problem/230/B 118 | 119 | 思路: 120 | 121 | 122 | 123 | 代码 124 | 125 | ```python 126 | 127 | 128 | ``` 129 | 130 | 131 | 132 | 代码运行截图 (至少包含有"Accepted") 133 | 134 | 135 | 136 | 137 | 138 | ### *12559: 最大最小整数 (选做) 139 | 140 | greedy, strings, sortings, http://cs101.openjudge.cn/practice/12559 141 | 142 | 思路: 143 | 144 | 145 | 146 | 代码 147 | 148 | ```python 149 | 150 | 151 | ``` 152 | 153 | 154 | 155 | 代码运行截图 (至少包含有"Accepted") 156 | 157 | 158 | 159 | 160 | 161 | ## 2. 学习总结和收获 162 | 163 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 164 | 165 | 166 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /homework/assignment5.md: -------------------------------------------------------------------------------- 1 | # Assignment #5: Greedy穷举Implementation 2 | 3 | Updated 1939 GMT+8 Oct 21, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### 04148: 生理周期 22 | 23 | brute force, http://cs101.openjudge.cn/practice/04148 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### 18211: 军备竞赛 44 | 45 | greedy, two pointers, http://cs101.openjudge.cn/practice/18211 46 | 47 | 思路: 48 | 49 | 50 | 51 | 代码: 52 | 53 | ```python 54 | 55 | ``` 56 | 57 | 58 | 59 | 代码运行截图 ==(至少包含有"Accepted")== 60 | 61 | 62 | 63 | 64 | 65 | ### 21554: 排队做实验 66 | 67 | greedy, http://cs101.openjudge.cn/practice/21554 68 | 69 | 思路: 70 | 71 | 72 | 73 | 代码: 74 | 75 | ```python 76 | 77 | ``` 78 | 79 | 80 | 81 | 代码运行截图 (至少包含有"Accepted") 82 | 83 | 84 | 85 | 86 | 87 | ### 01008: Maya Calendar 88 | 89 | implementation, http://cs101.openjudge.cn/practice/01008/ 90 | 91 | 思路: 92 | 93 | 94 | 95 | 代码: 96 | 97 | ```python 98 | 99 | ``` 100 | 101 | 102 | 103 | 代码运行截图 (至少包含有"Accepted") 104 | 105 | 106 | 107 | 108 | 109 | ### 545C. Woodcutters 110 | 111 | dp, greedy, 1500, https://codeforces.com/problemset/problem/545/C 112 | 113 | 思路: 114 | 115 | 116 | 117 | 代码: 118 | 119 | ```python 120 | 121 | ``` 122 | 123 | 124 | 125 | 代码运行截图 (至少包含有"Accepted") 126 | 127 | 128 | 129 | 130 | 131 | ### 01328: Radar Installation 132 | 133 | greedy, http://cs101.openjudge.cn/practice/01328/ 134 | 135 | 思路: 136 | 137 | 138 | 139 | 代码: 140 | 141 | ```python 142 | 143 | ``` 144 | 145 | 146 | 147 | 代码运行截图 (至少包含有"Accepted") 148 | 149 | 150 | 151 | 152 | 153 | ## 2. 学习总结和收获 154 | 155 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /homework/assignment6.md: -------------------------------------------------------------------------------- 1 | # Assignment #6: Recursion and DP 2 | 3 | Updated 2201 GMT+8 Oct 29, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### sy119: 汉诺塔 22 | 23 | recursion, https://sunnywhy.com/sfbj/4/3/119 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### sy132: 全排列I 44 | 45 | recursion, https://sunnywhy.com/sfbj/4/3/132 46 | 47 | 思路: 48 | 49 | 50 | 51 | 代码: 52 | 53 | ```python 54 | 55 | ``` 56 | 57 | 58 | 59 | 代码运行截图 ==(至少包含有"Accepted")== 60 | 61 | 62 | 63 | 64 | 65 | ### 02945: 拦截导弹 66 | 67 | dp, http://cs101.openjudge.cn/2024fallroutine/02945 68 | 69 | 思路: 70 | 71 | 72 | 73 | 代码: 74 | 75 | ```python 76 | 77 | ``` 78 | 79 | 80 | 81 | 代码运行截图 (至少包含有"Accepted") 82 | 83 | 84 | 85 | 86 | 87 | ### 23421: 小偷背包 88 | 89 | dp, http://cs101.openjudge.cn/practice/23421 90 | 91 | 思路: 92 | 93 | 94 | 95 | 代码: 96 | 97 | ```python 98 | 99 | ``` 100 | 101 | 102 | 103 | 代码运行截图 (至少包含有"Accepted") 104 | 105 | 106 | 107 | 108 | 109 | ### 02754: 八皇后 110 | 111 | dfs and similar, http://cs101.openjudge.cn/practice/02754 112 | 113 | 思路: 114 | 115 | 116 | 117 | 代码: 118 | 119 | ```python 120 | 121 | ``` 122 | 123 | 124 | 125 | 代码运行截图 (至少包含有"Accepted") 126 | 127 | 128 | 129 | 130 | 131 | ### 189A. Cut Ribbon 132 | 133 | brute force, dp 1300 https://codeforces.com/problemset/problem/189/A 134 | 135 | 思路: 136 | 137 | 138 | 139 | 代码: 140 | 141 | ```python 142 | 143 | ``` 144 | 145 | 146 | 147 | 代码运行截图 (至少包含有"Accepted") 148 | 149 | 150 | 151 | 152 | 153 | ## 2. 学习总结和收获 154 | 155 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /homework/assignment7.md: -------------------------------------------------------------------------------- 1 | # Assignment #7: Nov Mock Exam立冬 2 | 3 | Updated 1646 GMT+8 Nov 7, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)⽉考: AC6(请改为同学的通过数) 。考试题⽬都在“题库(包括计概、数算题目)”⾥⾯,按照数字题号能找到,可以重新提交。作业中提交⾃⼰最满意版本的代码和截图。 12 | 13 | 2)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 14 | 15 | 3)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 16 | 17 | 4)如果不能在截止前提交作业,请写明原因。 18 | 19 | 20 | 21 | ## 1. 题目 22 | 23 | ### E07618: 病人排队 24 | 25 | sorttings, http://cs101.openjudge.cn/practice/07618/ 26 | 27 | 思路: 28 | 29 | 30 | 31 | 代码: 32 | 33 | ```python 34 | 35 | ``` 36 | 37 | 38 | 39 | 代码运行截图 (至少包含有"Accepted") 40 | 41 | 42 | 43 | 44 | 45 | ### E23555: 节省存储的矩阵乘法 46 | 47 | implementation, matrices, http://cs101.openjudge.cn/practice/23555/ 48 | 49 | 思路: 50 | 51 | 52 | 53 | 代码: 54 | 55 | ```python 56 | 57 | ``` 58 | 59 | 60 | 61 | 代码运行截图 ==(至少包含有"Accepted")== 62 | 63 | 64 | 65 | 66 | 67 | ### M18182: 打怪兽 68 | 69 | implementation/sortings/data structures, http://cs101.openjudge.cn/practice/18182/ 70 | 71 | 思路: 72 | 73 | 74 | 75 | 代码: 76 | 77 | ```python 78 | 79 | ``` 80 | 81 | 82 | 83 | 代码运行截图 (至少包含有"Accepted") 84 | 85 | 86 | 87 | 88 | 89 | ### M28780: 零钱兑换3 90 | 91 | dp, http://cs101.openjudge.cn/practice/28780/ 92 | 93 | 思路: 94 | 95 | 96 | 97 | 代码: 98 | 99 | ```python 100 | 101 | ``` 102 | 103 | 104 | 105 | 代码运行截图 (至少包含有"Accepted") 106 | 107 | 108 | 109 | 110 | 111 | ### T12757: 阿尔法星人翻译官 112 | 113 | implementation, http://cs101.openjudge.cn/practice/12757 114 | 115 | 思路: 116 | 117 | 118 | 119 | 代码: 120 | 121 | ```python 122 | 123 | ``` 124 | 125 | 126 | 127 | 代码运行截图 (至少包含有"Accepted") 128 | 129 | 130 | 131 | 132 | 133 | ### T16528: 充实的寒假生活 134 | 135 | greedy/dp, cs10117 Final Exam, http://cs101.openjudge.cn/practice/16528/ 136 | 137 | 思路: 138 | 139 | 140 | 141 | 代码: 142 | 143 | ```python 144 | 145 | ``` 146 | 147 | 148 | 149 | 代码运行截图 (至少包含有"Accepted") 150 | 151 | 152 | 153 | 154 | 155 | ## 2. 学习总结和收获 156 | 157 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 158 | 159 | 160 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /homework/assignment8.md: -------------------------------------------------------------------------------- 1 | # Assignment #8: 田忌赛马来了 2 | 3 | Updated 1021 GMT+8 Nov 12, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### 12558: 岛屿周⻓ 22 | 23 | matices, http://cs101.openjudge.cn/practice/12558/ 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### LeetCode54.螺旋矩阵 44 | 45 | matrice, https://leetcode.cn/problems/spiral-matrix/ 46 | 47 | 与OJ这个题目一样的 18106: 螺旋矩阵,http://cs101.openjudge.cn/practice/18106 48 | 49 | 思路: 50 | 51 | 52 | 53 | 代码: 54 | 55 | ```python 56 | 57 | ``` 58 | 59 | 60 | 61 | 代码运行截图 ==(至少包含有"Accepted")== 62 | 63 | 64 | 65 | 66 | 67 | ### 04133:垃圾炸弹 68 | 69 | matrices, http://cs101.openjudge.cn/practice/04133/ 70 | 71 | 思路: 72 | 73 | 74 | 75 | 代码: 76 | 77 | ```python 78 | 79 | ``` 80 | 81 | 82 | 83 | 代码运行截图 (至少包含有"Accepted") 84 | 85 | 86 | 87 | 88 | 89 | ### LeetCode376.摆动序列 90 | 91 | greedy, dp, https://leetcode.cn/problems/wiggle-subsequence/ 92 | 93 | 与OJ这个题目一样的,26976:摆动序列, http://cs101.openjudge.cn/routine/26976/ 94 | 95 | 思路: 96 | 97 | 98 | 99 | 代码: 100 | 101 | ```python 102 | 103 | ``` 104 | 105 | 106 | 107 | 代码运行截图 (至少包含有"Accepted") 108 | 109 | 110 | 111 | 112 | 113 | ### CF455A: Boredom 114 | 115 | dp, 1500, https://codeforces.com/contest/455/problem/A 116 | 117 | 思路: 118 | 119 | 120 | 121 | 代码: 122 | 123 | ```python 124 | 125 | ``` 126 | 127 | 128 | 129 | 代码运行截图 (至少包含有"Accepted") 130 | 131 | 132 | 133 | 134 | 135 | ### 02287: Tian Ji -- The Horse Racing 136 | 137 | greedy, dfs http://cs101.openjudge.cn/practice/02287 138 | 139 | 思路: 140 | 141 | 142 | 143 | 代码: 144 | 145 | ```python 146 | 147 | ``` 148 | 149 | 150 | 151 | 代码运行截图 (至少包含有"Accepted") 152 | 153 | 154 | 155 | 156 | 157 | ## 2. 学习总结和收获 158 | 159 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 160 | 161 | 162 | 163 | 164 | 165 | -------------------------------------------------------------------------------- /homework/assignment9.md: -------------------------------------------------------------------------------- 1 | # Assignment #9: dfs, bfs, & dp 2 | 3 | Updated 2107 GMT+8 Nov 19, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### 18160: 最大连通域面积 22 | 23 | dfs similar, http://cs101.openjudge.cn/practice/18160 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### 19930: 寻宝 44 | 45 | bfs, http://cs101.openjudge.cn/practice/19930 46 | 47 | 思路: 48 | 49 | 50 | 51 | 代码: 52 | 53 | ```python 54 | 55 | ``` 56 | 57 | 58 | 59 | 代码运行截图 ==(至少包含有"Accepted")== 60 | 61 | 62 | 63 | 64 | 65 | ### 04123: 马走日 66 | 67 | dfs, http://cs101.openjudge.cn/practice/04123 68 | 69 | 思路: 70 | 71 | 72 | 73 | 代码: 74 | 75 | ```python 76 | 77 | ``` 78 | 79 | 80 | 81 | 代码运行截图 (至少包含有"Accepted") 82 | 83 | 84 | 85 | 86 | 87 | ### sy316: 矩阵最大权值路径 88 | 89 | dfs, https://sunnywhy.com/sfbj/8/1/316 90 | 91 | 思路: 92 | 93 | 94 | 95 | 代码: 96 | 97 | ```python 98 | 99 | ``` 100 | 101 | 102 | 103 | 代码运行截图 (至少包含有"Accepted") 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | ### LeetCode62.不同路径 112 | 113 | dp, https://leetcode.cn/problems/unique-paths/ 114 | 115 | 思路: 116 | 117 | 118 | 119 | 代码: 120 | 121 | ```python 122 | 123 | ``` 124 | 125 | 126 | 127 | 代码运行截图 (至少包含有"Accepted") 128 | 129 | 130 | 131 | 132 | 133 | ### sy358: 受到祝福的平方 134 | 135 | dfs, dp, https://sunnywhy.com/sfbj/8/3/539 136 | 137 | 思路: 138 | 139 | 140 | 141 | 代码: 142 | 143 | ```python 144 | 145 | ``` 146 | 147 | 148 | 149 | 代码运行截图 (至少包含有"Accepted") 150 | 151 | 152 | 153 | 154 | 155 | ## 2. 学习总结和收获 156 | 157 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 158 | 159 | 160 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /homework/assignmentA.md: -------------------------------------------------------------------------------- 1 | # Assignment #A: dp & bfs 2 | 3 | Updated 2 GMT+8 Nov 25, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### LuoguP1255 数楼梯 22 | 23 | dp, bfs, https://www.luogu.com.cn/problem/P1255 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### 27528: 跳台阶 44 | 45 | dp, http://cs101.openjudge.cn/practice/27528/ 46 | 47 | 思路: 48 | 49 | 50 | 51 | 代码: 52 | 53 | ```python 54 | 55 | ``` 56 | 57 | 58 | 59 | 代码运行截图 ==(至少包含有"Accepted")== 60 | 61 | 62 | 63 | 64 | 65 | ### 474D. Flowers 66 | 67 | dp, https://codeforces.com/problemset/problem/474/D 68 | 69 | 思路: 70 | 71 | 72 | 73 | 代码: 74 | 75 | ```python 76 | 77 | ``` 78 | 79 | 80 | 81 | 代码运行截图 (至少包含有"Accepted") 82 | 83 | 84 | 85 | 86 | 87 | ### LeetCode5.最长回文子串 88 | 89 | dp, two pointers, string, https://leetcode.cn/problems/longest-palindromic-substring/ 90 | 91 | 思路: 92 | 93 | 94 | 95 | 代码: 96 | 97 | ```python 98 | 99 | ``` 100 | 101 | 102 | 103 | 代码运行截图 (至少包含有"Accepted") 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | ### 12029: 水淹七军 112 | 113 | bfs, dfs, http://cs101.openjudge.cn/practice/12029/ 114 | 115 | 思路: 116 | 117 | 118 | 119 | 代码: 120 | 121 | ```python 122 | 123 | ``` 124 | 125 | 126 | 127 | 代码运行截图 (至少包含有"Accepted") 128 | 129 | 130 | 131 | 132 | 133 | ### 02802: 小游戏 134 | 135 | bfs, http://cs101.openjudge.cn/practice/02802/ 136 | 137 | 思路: 138 | 139 | 140 | 141 | 代码: 142 | 143 | ```python 144 | 145 | ``` 146 | 147 | 148 | 149 | 代码运行截图 (至少包含有"Accepted") 150 | 151 | 152 | 153 | 154 | 155 | ## 2. 学习总结和收获 156 | 157 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 158 | 159 | 160 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /homework/assignmentB.md: -------------------------------------------------------------------------------- 1 | # Assignment #B: Dec Mock Exam大雪前一天 2 | 3 | Updated 1649 GMT+8 Dec 5, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)⽉考: AC6(请改为同学的通过数) 。考试题⽬都在“题库(包括计概、数算题目)”⾥⾯,按照数字题号能找到,可以重新提交。作业中提交⾃⼰最满意版本的代码和截图。 12 | 13 | 2)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 14 | 15 | 3)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 16 | 17 | 4)如果不能在截止前提交作业,请写明原因。 18 | 19 | 20 | 21 | ## 1. 题目 22 | 23 | ### E22548: 机智的股民老张 24 | 25 | http://cs101.openjudge.cn/practice/22548/ 26 | 27 | 思路: 28 | 29 | 30 | 31 | 代码: 32 | 33 | ```python 34 | 35 | ``` 36 | 37 | 38 | 39 | 代码运行截图 (至少包含有"Accepted") 40 | 41 | 42 | 43 | 44 | 45 | ### M28701: 炸鸡排 46 | 47 | greedy, http://cs101.openjudge.cn/practice/28701/ 48 | 49 | 思路: 50 | 51 | 52 | 53 | 代码: 54 | 55 | ```python 56 | 57 | ``` 58 | 59 | 60 | 61 | 代码运行截图 ==(至少包含有"Accepted")== 62 | 63 | 64 | 65 | 66 | 67 | ### M20744: 土豪购物 68 | 69 | dp, http://cs101.openjudge.cn/practice/20744/ 70 | 71 | 思路: 72 | 73 | 74 | 75 | 代码: 76 | 77 | ```python 78 | 79 | ``` 80 | 81 | 82 | 83 | 代码运行截图 (至少包含有"Accepted") 84 | 85 | 86 | 87 | 88 | 89 | ### T25561: 2022决战双十一 90 | 91 | brute force, dfs, http://cs101.openjudge.cn/practice/25561/ 92 | 93 | 思路: 94 | 95 | 96 | 97 | 代码: 98 | 99 | ```python 100 | 101 | ``` 102 | 103 | 104 | 105 | 代码运行截图 (至少包含有"Accepted") 106 | 107 | 108 | 109 | 110 | 111 | ### T20741: 两座孤岛最短距离 112 | 113 | dfs, bfs, http://cs101.openjudge.cn/practice/20741/ 114 | 115 | 思路: 116 | 117 | 118 | 119 | 代码: 120 | 121 | ```python 122 | 123 | ``` 124 | 125 | 126 | 127 | 代码运行截图 (至少包含有"Accepted") 128 | 129 | 130 | 131 | 132 | 133 | ### T28776: 国王游戏 134 | 135 | greedy, http://cs101.openjudge.cn/practice/28776 136 | 137 | 思路: 138 | 139 | 140 | 141 | 代码: 142 | 143 | ```python 144 | 145 | ``` 146 | 147 | 148 | 149 | 代码运行截图 (至少包含有"Accepted") 150 | 151 | 152 | 153 | 154 | 155 | ## 2. 学习总结和收获 156 | 157 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 158 | 159 | 160 | 161 | 162 | 163 | -------------------------------------------------------------------------------- /homework/assignmentC.md: -------------------------------------------------------------------------------- 1 | # Assignment #C: 五味杂陈 2 | 3 | Updated 1148 GMT+8 Dec 10, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### 1115. 取石子游戏 22 | 23 | dfs, https://www.acwing.com/problem/content/description/1117/ 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### 25570: 洋葱 44 | 45 | Matrices, http://cs101.openjudge.cn/practice/25570 46 | 47 | 思路: 48 | 49 | 50 | 51 | 代码: 52 | 53 | ```python 54 | 55 | ``` 56 | 57 | 58 | 59 | 代码运行截图 ==(至少包含有"Accepted")== 60 | 61 | 62 | 63 | 64 | 65 | ### 1526C1. Potions(Easy Version) 66 | 67 | greedy, dp, data structures, brute force, *1500, https://codeforces.com/problemset/problem/1526/C1 68 | 69 | 思路: 70 | 71 | 72 | 73 | 代码: 74 | 75 | ```python 76 | 77 | ``` 78 | 79 | 80 | 81 | 代码运行截图 (至少包含有"Accepted") 82 | 83 | 84 | 85 | 86 | 87 | ### 22067: 快速堆猪 88 | 89 | 辅助栈,http://cs101.openjudge.cn/practice/22067/ 90 | 91 | 思路: 92 | 93 | 94 | 95 | 代码: 96 | 97 | ```python 98 | 99 | ``` 100 | 101 | 102 | 103 | 代码运行截图 (至少包含有"Accepted") 104 | 105 | 106 | 107 | 108 | 109 | ### 20106: 走山路 110 | 111 | Dijkstra, http://cs101.openjudge.cn/practice/20106/ 112 | 113 | 思路: 114 | 115 | 116 | 117 | 代码: 118 | 119 | ```python 120 | 121 | ``` 122 | 123 | 124 | 125 | 代码运行截图 (至少包含有"Accepted") 126 | 127 | 128 | 129 | 130 | 131 | ### 04129: 变换的迷宫 132 | 133 | bfs, http://cs101.openjudge.cn/practice/04129/ 134 | 135 | 思路: 136 | 137 | 138 | 139 | 代码: 140 | 141 | ```python 142 | 143 | ``` 144 | 145 | 146 | 147 | 代码运行截图 (至少包含有"Accepted") 148 | 149 | 150 | 151 | 152 | 153 | ## 2. 学习总结和收获 154 | 155 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /homework/assignmentD.md: -------------------------------------------------------------------------------- 1 | # Assignment #D: 十全十美 2 | 3 | Updated 1254 GMT+8 Dec 17, 2024 4 | 5 | 2024 fall, Complied by 同学的姓名、院系 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 1)请把每个题目解题思路(可选),源码Python, 或者C++(已经在Codeforces/Openjudge上AC),截图(包含Accepted),填写到下面作业模版中(推荐使用 typora https://typoraio.cn ,或者用word)。AC 或者没有AC,都请标上每个题目大致花费时间。 12 | 13 | 2)提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。Canvas需要有同学清晰头像、提交文件有pdf、"作业评论"区有上传的md或者doc附件。 14 | 15 | 3)如果不能在截止前提交作业,请写明原因。 16 | 17 | 18 | 19 | ## 1. 题目 20 | 21 | ### 02692: 假币问题 22 | 23 | brute force, http://cs101.openjudge.cn/practice/02692 24 | 25 | 思路: 26 | 27 | 28 | 29 | 代码: 30 | 31 | ```python 32 | 33 | ``` 34 | 35 | 36 | 37 | 代码运行截图 (至少包含有"Accepted") 38 | 39 | 40 | 41 | 42 | 43 | ### 01088: 滑雪 44 | 45 | dp, dfs similar, http://cs101.openjudge.cn/practice/01088 46 | 47 | 思路: 48 | 49 | 50 | 51 | 代码: 52 | 53 | ```python 54 | 55 | ``` 56 | 57 | 58 | 59 | 代码运行截图 ==(至少包含有"Accepted")== 60 | 61 | 62 | 63 | 64 | 65 | ### 25572: 螃蟹采蘑菇 66 | 67 | bfs, dfs, http://cs101.openjudge.cn/practice/25572/ 68 | 69 | 思路: 70 | 71 | 72 | 73 | 代码: 74 | 75 | ```python 76 | 77 | ``` 78 | 79 | 80 | 81 | 代码运行截图 (至少包含有"Accepted") 82 | 83 | 84 | 85 | 86 | 87 | ### 27373: 最大整数 88 | 89 | dp, http://cs101.openjudge.cn/practice/27373/ 90 | 91 | 思路: 92 | 93 | 94 | 95 | 代码: 96 | 97 | ```python 98 | 99 | ``` 100 | 101 | 102 | 103 | 代码运行截图 (至少包含有"Accepted") 104 | 105 | 106 | 107 | 108 | 109 | ### 02811: 熄灯问题 110 | 111 | brute force, http://cs101.openjudge.cn/practice/02811 112 | 113 | 思路: 114 | 115 | 116 | 117 | 代码: 118 | 119 | ```python 120 | 121 | ``` 122 | 123 | 124 | 125 | 代码运行截图 (至少包含有"Accepted") 126 | 127 | 128 | 129 | 130 | 131 | ### 08210: 河中跳房子 132 | 133 | binary search, greedy, http://cs101.openjudge.cn/practice/08210/ 134 | 135 | 思路: 136 | 137 | 138 | 139 | 代码: 140 | 141 | ```python 142 | 143 | ``` 144 | 145 | 146 | 147 | 代码运行截图 (至少包含有"Accepted") 148 | 149 | 150 | 151 | 152 | 153 | ## 2. 学习总结和收获 154 | 155 | 如果作业题目简单,有否额外练习题目,比如:OJ“计概2024fall每日选做”、CF、LeetCode、洛谷等网站题目。 156 | 157 | 158 | 159 | 160 | 161 | -------------------------------------------------------------------------------- /homework/assignmentP.md: -------------------------------------------------------------------------------- 1 | # Assignment #P: 课程大作业 2 | 3 | Updated 1818 GMT+8 Nov 30, 2024 4 | 5 | 2024 fall, Complied by ==同学的姓名、院系== 6 | 7 | 8 | 9 | **说明:** 10 | 11 | 关乎每位同学维护自己的 GitHub 作业,本意是让大家练习常用于计算机科学学生的代码和文档维护方法。通过计算机相关课程,我们希望引导大家进入计算机学科领域。这将帮助同学们熟悉实际的编码和文档管理流程,并培养在团队协作和版本控制方面的技能。 12 | 13 | 1)提交内容,请填写到下面作业模版中。 14 | 15 | 2)截止时间是期末出分前,因为Canvas可以多次提交,建议期末机考前提交一次,考试后加上课程总结再提交一次。 16 | 17 | 提交时候先提交pdf文件,再把md或者doc文件上传到右侧“作业评论”。 18 | 19 | 20 | 21 | 评分标准 22 | 23 | | 标准 | 等级 | 得分 | 24 | | -------------- | -------------------------------------- | ---------- | 25 | | 按时提交 | 1 得分提交,0.5 得分请假,0 得分未提交 | 1 分 | 26 | | 你的GitHub网址 | 1 得分有,0 得分无 | 1 分 | 27 | | 你的GitHub截图 | 1 得分有,0 得分无 | 1 分 | 28 | | Cheatsheet | 1 得分有,0 得分无 | 1 分 | 29 | | 课程资料和情报 | 1 得分有,0 得分无 | 1 分 | 30 | | 总得分: | | 5 ,满分 5 | 31 | 32 | 33 | 34 | 35 | 36 | ## 1. 三个示例 37 | 38 | 同学开自己的GitHub,自己学习方法、做的题目、考试时候要带的记录纸(cheat_sheet)等放在上面。方便大家关注,当你有新的更新时,我们也可以及时获得最新的内容。 39 | 40 | ### 示例:北京大学课程资料整理 41 | 42 | https://github.com/forxhunter/libpku 这样的项目可以作为一个数算课程的项目,同时也是同学们整理资料的一个好方式,可以实现一举多得的效果。 43 | 44 | 45 | 46 | ![image-20240219114316139](https://raw.githubusercontent.com/GMyhf/img/main/img/image-20240219114316139.png) 47 | 48 | 49 | 50 | ### 示例:清华计算机系课程攻略 51 | 52 | https://github.com/PKUanonym/REKCARC-TSC-UHT 53 | 54 | ![image-20240219114436829](https://raw.githubusercontent.com/GMyhf/img/main/img/image-20240219114436829.png) 55 | 56 | 57 | 58 | ### 示例:csdiy 59 | 60 | https://csdiy.wiki/#cs61a 61 | 62 | ![image-20241130180228986](https://raw.githubusercontent.com/GMyhf/img/main/img/202411301802111.png) 63 | 64 | 65 | 66 | ## 2. 提交内容 67 | 68 | 你的GitHub网址及截图。 69 | 70 | 71 | 72 | ## 3. 课程总结 73 | 74 | 如果愿意,请同学或多或少做一个本门课程的学习总结。便于之后师弟师妹跟进学习,也便于教师和助教改进教学。例如:分享自己的学习心得、笔记。 75 | 76 | 77 | 78 | ## 参考 79 | 80 | 1.科学上网 Scientific Internet 81 | 82 | 北大学长提供的Clash,请自己取用。 83 | https://189854.xyz/verify/ 84 | https://blog.189854.xyz/blog/walless/2023/11/04/clash.html 85 | 86 | 87 | 88 | 2.图床,把图片放到云上去,而不是本地的意思。如果设置图床,分享md文件,其他人也能看到图片;否则因为md嵌入的图片在本地,只有编辑者能看到;后者的情况解决方法还可以是导出包含图片的pdf文件分享。图床如果是免费的,过一阵可能会失效,之前用过非github的免费图床,导致链接失效了。github是免费的,目前比较稳定。 89 | 90 | 1)Typora + GitHub = 效率,https://mp.weixin.qq.com/s/hmkGZln-xatrWrBZrY9t-g 91 | 92 | 2)Typora+PicGo+Github解决个人博客图片上传问题 https://zhuanlan.zhihu.com/p/367529569 93 | 94 | 3)设置的图床目录是Public 95 | 96 | image-20240228102834113 97 | 98 | 99 | 100 | image-20240228102902018 101 | 102 | 103 | 104 | 105 | 106 | 3.Github图片不显示,原因是DNS污染。两种解决方法,或者直接添加1)给出的ip列表,或者2)自己找出ip添加。 107 | 108 | 1)Github图片显示不出来?两步解决! https://zhuanlan.zhihu.com/p/345258967?utm_id=0&wd=&eqid=ce16938700061ac4000000056470d782 。 109 | 110 | 2)https://www.ipaddress.com查到ip,添加到hosts后,在移动宽带网络中,可以显示md中的图片。 参考:解决raw.githubusercontent.com无法访问的问题(picgo+github配置图床图片不显示,但仓库已存储成功),https://blog.51cto.com/reliableyang/6457392. 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /other/Dilworth_theorem.md: -------------------------------------------------------------------------------- 1 | # Dilworth's theorem 2 | 3 | Updated 1936 GMT+8 Nov 10 2024 4 | 5 | 2020 fall, Complied by Hongfei Yan 6 | 7 | 8 | 9 | **Dilworth定理**,最小的链覆盖数等于最长反链长度。https://oi-wiki.org/math/order-theory/ 10 | 11 | > Dilworth定理是组合数学中的一个重要定理,主要应用于部分有序集(Partially Ordered Set, poset)的研究。该定理描述了部分有序集中最小链覆盖与最大反链的关系。具体来说,Dilworth定理指出: 12 | > 13 | > **Dilworth**定理 14 | > 15 | > 在一个部分有序集 $(P, \leq) $中,最小链覆盖的大小等于最大反链的大小。 16 | > 17 | > **定义** 18 | > 19 | > 1. **链(Chain)**: 20 | > - 一个链是指部分有序集中的一个子集,其中任意两个元素都是可比较的。换句话说,对于链中的任意两个元素 a 和 b ,要么 $a \leq b$,要么 $ b \leq a $。 21 | > 22 | > 2. **反链(Antichain)**: 23 | > - 一个反链是指部分有序集中的一个子集,其中任意两个不同的元素都是不可比较的。换句话说,对于反链中的任意两个不同的元素 a 和 b ,既不满足 $a \leq b$ ,也不满足 $ b \leq a $。 24 | > 25 | > 3. **链覆盖(Chain Cover)**: 26 | > - 一个链覆盖是指一组链,它们的并集覆盖了整个部分有序集 P 。换句话说,每个元素都至少属于一个链。 27 | > 28 | > 4. **最小链覆盖**: 29 | > - 最小链覆盖是指覆盖整个部分有序集所需的最少链的数量。 30 | > 31 | > 5. **最大反链**: 32 | > - 最大反链是指部分有序集中最大的反链的大小,即包含最多元素的反链。 33 | > 34 | > **定理陈述** 35 | > 36 | > Dilworth定理可以形式化为: 37 | > 38 | > $ \text{最小链覆盖的大小} = \text{最大反链的大小} $ 39 | > 40 | > **应用** 41 | > 42 | > Dilworth定理在许多领域都有广泛的应用,特别是在算法设计和组合优化中。以下是一些常见的应用场景: 43 | > 44 | > 1. **最长单调子序列问题**: 45 | > - 在寻找最长单调递增子序列(LIS)时,可以将问题转化为部分有序集中的链覆盖问题。具体来说,将数组中的元素视为部分有序集中的元素,定义 $ a_i \leq a_j $ 当且仅当 $ i < j $ 且 $ a_i \leq a_j $。Dilworth定理告诉我们,最长递增子序列的长度等于最小链覆盖的大小,而最小链覆盖的大小又等于最大反链的大小。 46 | > 47 | > 2. **任务调度问题**: 48 | > - 在任务调度问题中,可以将任务视为部分有序集中的元素,定义任务之间的依赖关系。Dilworth定理可以帮助我们找到最小的并行任务集,使得所有任务都能在最短时间内完成。 49 | > 50 | > **总结** 51 | > 52 | > Dilworth定理是一个强大的工具,它将部分有序集中的最小链覆盖问题与最大反链问题联系起来。通过理解和应用Dilworth定理,可以在许多组合优化问题中找到高效的解决方案。 53 | 54 | 55 | 56 | **最长不增子序列**:Longest Non-Increasing Subsequence 57 | 58 | **最长单调递减子序列**:Longest Decreasing Subsequence 59 | 60 | **最长不降子序列**:Longest Non-Decreasing Subsequence 61 | 62 | **最长单调递增子序列**:Longest Increasing Subsequence 63 | 64 | 65 | 66 | # 编程题目 67 | 68 | ## 28389: 跳高 69 | 70 | http://cs101.openjudge.cn/practice/28389 71 | 72 | Dilworth定理表明,任何一个有限偏序集的最长反链(即最长下降子序列)的长度, 73 | 等于将该偏序集划分为尽量少的链(即上升子序列)的最小数量。 74 | 75 | 因此,计算序列的最长下降子序列长度,即可得出最少需要多少台测试仪。 76 | 77 | 78 | 79 | ```python 80 | """ 81 | Dilworth定理: 82 | Dilworth定理表明,任何一个有限偏序集的最长反链(即最长下降子序列)的长度, 83 | 等于将该偏序集划分为尽量少的链(即上升子序列)的最小数量。 84 | 因此,计算序列的最长下降子序列长度,即可得出最少需要多少台测试仪。 85 | """ 86 | 87 | from bisect import bisect_left 88 | 89 | def min_testers_needed(scores): 90 | scores.reverse() # 反转序列以找到最长下降子序列的长度 91 | lis = [] # 用于存储最长上升子序列 92 | 93 | for score in scores: 94 | pos = bisect_left(lis, score) 95 | if pos < len(lis): 96 | lis[pos] = score 97 | else: 98 | lis.append(score) 99 | 100 | return len(lis) 101 | 102 | 103 | N = int(input()) 104 | scores = list(map(int, input().split())) 105 | 106 | result = min_testers_needed(scores) 107 | print(result) 108 | ``` 109 | 110 | 111 | 112 | 113 | 114 | ## 01065: Wooden Sticks 115 | 116 | http://cs101.openjudge.cn/practice/01065/ 117 | 118 | 也是Dilworth's theorem。容易发现,所需时间为上升子序列的个数,根据Dilworth定理,最少的chain个数等于最大的antichain的大小,即最少上升子序列的个数等于最长递减子序列的长度。最长严格递减子序列有经典的nlogn的算法(https://en.wikipedia.org/wiki/Longest_increasing_subsequence)。 119 | 120 | 121 | 122 | ```python 123 | #dilworth和最长单调子序列 124 | # 答案就是对l排序后求w的最长严格递减子序列(用Dilworth's theorem不难证明), 125 | # 最长严格递减子序列有经典的nlogn的算法 126 | # (https://en.wikipedia.org/wiki/Longest_increasing_subsequence)。 127 | #一般有一样的都不是大问题,因为可以把(3,5) (3,6) 直接看作(3.1, 5) (3.2, 6) 128 | 129 | import bisect 130 | 131 | def doit(): 132 | n = int(input()) 133 | data = list(map(int, input().split())) 134 | sticks = [(data[i], data[i + 1]) for i in range(0, 2 * n, 2)] 135 | sticks.sort() 136 | f = [sticks[i][1] for i in range(n)] 137 | f.reverse() 138 | stk = [] 139 | 140 | for i in range(n): 141 | t = bisect.bisect_left(stk, f[i]) 142 | if t == len(stk): 143 | stk.append(f[i]) 144 | else: 145 | stk[t] = f[i] 146 | 147 | print(len(stk)) 148 | 149 | T = int(input()) 150 | for _ in range(T): 151 | doit() 152 | ``` 153 | 154 | 155 | 156 | 157 | 158 | ## 02945: 拦截导弹 159 | 160 | dp, http://cs101.openjudge.cn/practice/02945/ 161 | 162 | 163 | 164 | bisect_right 二分查找可以高效地求出最长不降子序列的长度。 165 | 166 | 拦截导弹 求最长不升LNIS,非严格单调允许相等元素,所以用 bisect right。如果求最长上升LIS,用 bisect_left 167 | 168 | ```python 169 | from bisect import bisect_right 170 | 171 | # 求最长不上升子序列,但bisect通常用于升序排列,原序列reverse后相当于求最长不降子序列 172 | def lnis(scores): 173 | scores.reverse() 174 | lis = [] # 用于存储最长不降子序列,非严格单调,允许相等元素 175 | 176 | for score in scores: 177 | pos = bisect_right(lis, score) 178 | if pos < len(lis): 179 | lis[pos] = score 180 | else: 181 | lis.append(score) 182 | 183 | return len(lis) 184 | 185 | 186 | N = int(input()) 187 | scores = list(map(int, input().split())) 188 | 189 | result = lnis(scores) 190 | print(result) 191 | ``` 192 | 193 | 194 | 195 | 196 | 197 | ## P1020 [NOIP1999 提高组] 导弹拦截 198 | 199 | https://www.luogu.com.cn/problem/P1020 200 | 201 | 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 202 | 203 | 204 | 输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 205 | 206 | **输入格式** 207 | 208 | 一行,若干个整数,中间由空格隔开。 209 | 210 | **输出格式** 211 | 212 | 两行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 213 | 214 | 样例输入 #1 215 | 216 | ``` 217 | 389 207 155 300 299 170 158 65 218 | ``` 219 | 220 | 样例输出 #1 221 | 222 | ``` 223 | 6 224 | 2 225 | ``` 226 | 227 | 提示 228 | 229 | 对于前 $50\%$ 数据(NOIP 原题数据),满足导弹的个数不超过 $10^4$ 个。该部分数据总分共 $100$ 分。可使用$\mathcal O(n^2)$ 做法通过。 230 | 对于后 $50\%$ 的数据,满足导弹的个数不超过 $10^5$ 个。该部分数据总分也为 $100$ 分。请使用 $\mathcal O(n\log n)$ 做法通过。 231 | 232 | 对于全部数据,满足导弹的高度为正整数,且不超过 $5\times 10^4$。 233 | 234 | 235 | 此外本题开启 spj,每点两问,按问给分。 236 | 237 | NOIP1999 提高组 第一题 238 | 239 | --- 240 | 241 | $\text{upd 2022.8.24}$:新增加一组 Hack 数据。 242 | 243 | 244 | 245 | 246 | 247 | > 显然,第一问求的是最长不上升子序列。 248 | > 249 | > 于是接下来直接抛开第一问不谈,也不考虑优化,直接考虑第二问。待会就知道原因了。 250 | > 251 | > 引理:**Dilworth** 定理 252 | > 253 | > > 狄尔沃斯定理亦称偏序集分解定理,该定理断言:对于任意有限偏序集,其最大反链中元素的数目必等于最小链划分中链的数目。此定理的对偶形式亦真,它断言:对于任意有限偏序集,其最长链中元素的数目必等于其最小反链划分中反链的数目。 254 | > 255 | > 该定理在该问题上可以理解成:把序列分成不上升子序列的最少个数,等于序列的最长上升子序列长度。把序列分成不降子序列的最少个数,等于序列的最长下降子序列长度。 256 | > 257 | > 则第二问等价于最长上升子序列。 258 | 259 | 260 | 261 | 第一问,求最长链,偏序取反,bisect_right。 262 | 263 | 第二问,Dilworth 定理,偏序取反,bisect_left。 264 | 265 | ```python 266 | from bisect import bisect_left, bisect_right 267 | 268 | # 第一问求最长不上升子序列,但bisect通常用于升序排列,原序列reverse后相当于求最长不降子序列 269 | def lnis(scores): 270 | scores.reverse() 271 | lis = [] # 用于存储最长不降子序列,非严格单调,允许相等元素 272 | 273 | for score in scores: 274 | pos = bisect_right(lis, score) 275 | if pos < len(lis): 276 | lis[pos] = score 277 | else: 278 | lis.append(score) 279 | 280 | return len(lis) 281 | 282 | # 第二问等价于最长上升子序列 283 | def min_testers_needed(scores): 284 | scores.reverse() 285 | lis = [] # 用于存储最长上升子序列,严格单调 286 | 287 | for score in scores: 288 | pos = bisect_left(lis, score) 289 | if pos < len(lis): 290 | lis[pos] = score 291 | else: 292 | lis.append(score) 293 | 294 | return len(lis) 295 | 296 | 297 | #N = int(input()) 298 | scores = list(map(int, input().split())) 299 | result1 = lnis(scores) 300 | result2 = min_testers_needed(scores) 301 | print(result1) 302 | print(result2) 303 | ``` 304 | 305 | 306 | 307 | # 求最长单调子序列 308 | 309 | Dilworth定理在组合数学中非常重要,尤其是在处理部分有序集(poset)的问题时。Dilworth定理的一个经典应用是寻找最长单调子序列(LIS)。虽然二分查找可以高效地求出最长单调子序列的长度,但它并不直接提供具体的子序列。如果你还需要知道具体的子序列,可以使用动态规划(DP)方法,并在DP过程中记录路径信息。 310 | 311 | Dilworth**定理与最长单调子序列** 312 | 313 | Dilworth定理指出,在一个部分有序集中,最小链覆盖的大小等于最大反链的大小。在最长单调子序列问题中,链对应于单调递增子序列,反链对应于单调递减子序列。 314 | 315 | ## 二分查找与最长单调子序列 316 | 317 | 二分查找可以高效地求出最长单调子序列的长度,但不直接提供具体的子序列。具体步骤如下: 318 | 319 | 1. **初始化**: 320 | - 创建一个数组 `dp`,用于存储当前最长递增子序列的末尾元素。 321 | - 创建一个数组 `prev`,用于记录每个元素在最长递增子序列中的前驱元素。 322 | 323 | 2. **遍历数组**: 324 | - 对于每个元素 `nums[i]`,使用二分查找在 `dp` 中找到合适的位置 `pos`,使得 `dp[pos-1] < nums[i] <= dp[pos]`。 325 | - 更新 `dp[pos]` 为 `nums[i]`。 326 | - 更新 `prev[i]` 为 `dp[pos-1]` 的索引。 327 | 328 | 3. **构造最长单调子序列**: 329 | - 从 `dp` 数组的最后一个元素开始,通过 `prev` 数组回溯,构造最长单调子序列。 330 | 331 | 332 | 333 | ## 示例代码 334 | 335 | 以下是一个Python代码示例,展示了如何使用二分查找和动态规划来求出最长单调子序列及其具体内容: 336 | 337 | ```python 338 | # 用动态规划结合二分查找来找到最长单调递增子序列(LIS)的长度和具体序列 339 | """ 340 | 维护一个数组,用于记录当前找到的最长子序列的末尾元素,并且在此基础上再维护一个额外的数组或列表, 341 | 用来记录每个元素在最长单调子序列中的前驱信息。这样,当你完成处理之后,可以通过前驱信息追踪回去, 342 | 得到具体的子序列。 343 | 344 | """ 345 | from bisect import bisect_left 346 | 347 | 348 | def longest_increasing_subsequence(nums): 349 | if not nums: 350 | return [] 351 | 352 | # dp数组,用于存储当前找到的最长子序列的末尾元素 353 | dp = [] 354 | # 存储每个元素的前驱索引 355 | prev_indices = [-1] * len(nums) 356 | # 存储每个位置的索引 357 | indices = [] 358 | 359 | for i, num in enumerate(nums): 360 | # 使用二分查找找到插入位置 361 | pos = bisect_left(dp, num) 362 | 363 | # 如果pos等于dp的长度,说明num比dp中的所有元素都大 364 | if pos == len(dp): 365 | dp.append(num) 366 | if pos > 0: 367 | prev_indices[i] = indices[-1] # 更新前驱索引 368 | indices.append(i) 369 | else: 370 | dp[pos] = num 371 | indices[pos] = i # 更新当前pos位置的索引 372 | if pos > 0: 373 | prev_indices[i] = indices[pos - 1] # 更新前驱索引 374 | 375 | # 重建最长递增子序列 376 | lis = [] 377 | k = indices[-1] 378 | while k >= 0: 379 | lis.append(nums[k]) 380 | k = prev_indices[k] 381 | 382 | # 反转序列,得到从小到大的顺序 383 | lis.reverse() 384 | 385 | return lis 386 | 387 | 388 | # 示例 389 | #nums = [10, 9, 2, 5, 3, 7, 101, 18] 390 | nums = [1, 7, 3, 5, 2] 391 | result = longest_increasing_subsequence(nums) 392 | print("最长单调递增子序列:", result) 393 | ``` 394 | 395 | **解释** 396 | 397 | 1. **初始化**: 398 | - `dp` 用于存储当前最长递增子序列的末尾元素。 399 | - `prev` 用于记录每个元素在最长递增子序列中的前驱元素。 400 | 401 | 2. **遍历数组**: 402 | - 对于每个元素 `nums[i]`,使用 `bisect_left` 在 `dp` 中找到合适的位置 `pos`。 403 | - 更新 `dp[pos]` 为 `nums[i]`。 404 | - 更新 `prev[i]` 为 `dp[pos-1]` 的索引。 405 | 406 | 3. **构造最长单调子序列**: 407 | - 从 `dp` 数组的最后一个元素开始,通过 `prev` 数组回溯,构造最长单调子序列。 408 | - 最后将结果反转,得到从前往后的顺序。 409 | 410 | **总结** 411 | 412 | 虽然二分查找可以高效地求出最长单调子序列的长度,但为了得到具体的子序列,需要在DP过程中记录路径信息。通过这种方式,可以在保持高效的同时,获得完整的最长单调子序列。 413 | 414 | 415 | 416 | 417 | 418 | -------------------------------------------------------------------------------- /other/dijkstra_proof.md: -------------------------------------------------------------------------------- 1 | # Dijkstra正确性证明 2 | 3 | Updated 1702 GMT+8 Dec 02 2024 4 | 5 | 2024 fall, Complied by Hongfei Yan 6 | 7 | 8 | 9 | Proof of Dijkstra's Correctness 10 | 11 | 12 | 13 | # 1 详细解释 14 | 15 | Dijkstra算法的正确性证明主要基于贪心选择性质和最优子结构性质。下面是对Dijkstra算法正确性的详细解释: 16 | 17 | **贪心选择性质** 18 | 19 | Dijkstra算法在每一步中总是选择当前已知最短路径的顶点,并且更新其邻居顶点的距离。这种选择方式确保了每次添加到最终解中的顶点都是当前最优的选择。 20 | 21 | **最优子结构** 22 | 23 | 如果从起点 `s` 到某个顶点 `v` 的最短路径是通过顶点 `u`,那么从 `s` 到 `u` 的部分也必须是最短路径。这保证了局部最优解可以组合成全局最优解。 24 | 25 | 26 | 27 | **证明步骤** 28 | 29 | 1. **定义**: 30 | - 让 `S` 表示已经确定了最短路径的顶点集合。 31 | - 让 `V-S` 表示尚未确定最短路径的顶点集合。 32 | - `d[v]` 表示从起点 `s` 到顶点 `v` 的当前已知最短距离。 33 | - $\delta(s, v) $ 表示从起点 `s` 到顶点 `v` 的实际最短距离。 34 | 35 | 2. **初始状态**: 36 | 37 | - 算法开始时,$S = \{s\}$ ,即只包含起点 `s`。 38 | - 对于所有顶点 $ v \in V-S $,初始化 `d[v]` 为从 `s` 到 `v` 的直接边的权重(如果存在),否则为无穷大。 39 | 40 | 3. **不变量**: 41 | 42 | - 在每一步执行之前,对于所有 $ u \in S $,有 $ d[u] = \delta(s, u) $。 43 | - 对于所有 $ v \in V-S $,有 $ d[v] \geq \delta(s, v) $。 44 | 45 | 4. **迭代过程**: 46 | - 在每一步中,选择 `V-S` 中 `d[v]` 最小的顶点 `u` 加入 `S`。 47 | - 更新 `u` 的所有邻居 `v` 的 `d[v]` 值,如果通过 `u` 到达 `v` 的新路径更短,则更新 `d[v]`。 48 | 49 | 5. **Dijkstra正确性证明,如何理解?**: 50 | 51 | - 假设在某一步骤中,我们选择了 `u` 加入 `S` ,并且 $ u \neq s $。 52 | 53 | - 由于 `u` 是 `V-S` 中 `d` 值最小的顶点,因此 $ d[u] \leq d[v] $ 对于所有 $ v \in V-S $ 成立。 54 | 55 | - 根据不变量,$ d[u] \geq \delta(s, u) $。 56 | 57 | - 如果 $ d[u] > \delta(s, u) $,则存在一条从 `s` 到 `u` 的更短路径,但这条路径必须经过 `V-S` 中的某个顶点 `w`(因为 `u` 是第一个被加入 S 的顶点)。 58 | 59 | - 由于$ d[w] \geq \delta(s, w) $,且 $ \delta(s, w) + \text{weight}(w, u) \geq \delta(s, u) $,所以 $ d[u] $ 不可能大于 $ \delta(s, u) $。 60 | 61 | > 由于我们假设了存在一条更短的路径,即d[u] > δ(s, u),那么按照Dijkstra算法更新规则,d[u]应该被更新为d[w] + weight(w, u)或更小的值。这与d[u] > δ(s, u)相矛盾,因为这样会导致d[u]不大于δ(s, u)。 62 | 63 | - 因此,$ d[u] = \delta(s, u) $。 64 | 65 | 6. **终止条件**: 66 | - 当所有顶点都被加入 `S` 时,算法结束。 67 | - 此时,对于所有顶点 `v` ,$ d[v] = \delta(s, v) $。 68 | 69 | **结论** 70 | 71 | 通过上述证明,我们可以得出结论:Dijkstra算法能够正确地找到从单个源点到图中所有其他顶点的最短路径。该算法依赖于非负权重边的假设,如果图中存在负权重边,Dijkstra算法可能会给出错误的结果。在这种情况下,可以使用Bellman-Ford算法来处理。 72 | 73 | 74 | 75 | # 2 进一步解释 76 | 77 | Dijkstra 算法的正确性证明基于以下核心逻辑:**每次将一个顶点 `u` 加入已确定最短路径集合 `S` 时,`d[u]` 必然等于从起点 `s` 到该顶点 `u` 的真实最短路径权值 $\delta(s, u)$**。以下是如何理解这一证明步骤的关键点: 78 | 79 | ------ 80 | 81 | **1. `u` 的选择保证了它的最小性** 82 | 83 | - 在算法中,每次选择 `u` 时,其 `d[u]` 是所有 `V-S` 中 `d` 值最小的。 84 | - 换句话说,在尚未被处理的顶点中,`u` 是当前最接近起点 `s` 的顶点。 85 | 86 | 因此,$d[u] \leq d[v]$ 对于所有 $v \in V-S$。 87 | 88 | 89 | 90 | **2. 不变量:$d[u] \geq \delta(s, u)$** 91 | 92 | - 算法的初始化确保了对所有顶点 $v$,`d[v]` 是从起点 `s` 出发到达该顶点的最短路径的一个上界(初始化时,$d[s]=0$,其余顶点 $d[v]=\infty$)。 93 | - 在算法每一步中,通过松弛操作不断缩小 `d[v]` 的值,但始终保持 $d[v] \geq \delta(s, v)$。 94 | 95 | 96 | 97 | **3. 假设反证法:如果 $d[u] > \delta(s, u)$** 98 | 99 | 如果 $d[u] > \delta(s, u)$,意味着存在更短的路径从 `s` 到达 `u`。设这条路径为 $s \to w \to u$,其中 $w \in V-S$ 是路径上未处理的某个顶点。 100 | 101 | **矛盾点分析** 102 | 103 | - 根据不变量,$d[w] \geq \delta(s, w)$。 104 | 105 | - 由于 `u` 是当前 `V-S` 中 `d` 最小的顶点,因此 $d[u] \leq d[w]$。 106 | 107 | - 另一方面,路径 $s \to w \to u$ 的真实距离为 $\delta(s, w) + \text{weight}(w, u)$,而 $\delta(s, w) + \text{weight}(w, u) \geq \delta(s, u)$。 108 | 109 | > 由于我们假设了存在一条更短的路径,即 d[u] > δ(s, u),那么按照Dijkstra算法更新规则,d[u]应该被更新为d[w] + weight(w, u)或更小的值。这与d[u] > δ(s, u)相矛盾,因为这样会导致d[u]不大于δ(s, u)。 110 | 111 | - 综合以上推导可知,$d[u] \geq \delta(s, u)$。 112 | 113 | 但 $d[u] > \delta(s, u)$ 的假设与上述结论矛盾。 114 | 115 | 116 | 117 | **4. 结论:$d[u] = \delta(s, u)$** 118 | 119 | 由于不存在更短路径未被考虑,因此 `d[u]` 必等于从 `s` 到 `u` 的真实最短路径权值 $\delta(s, u)$。 120 | 121 | 122 | 123 | # 3 直观理解 124 | 125 | 可以将 Dijkstra 算法看作“逐步揭露最短路径”的过程: 126 | 127 | 1. 每次处理一个顶点 `u`,它已经是离 `s` 最近的、尚未处理的顶点。 128 | 2. 对于 `u`,我们确认其最短路径值为 $d[u] = \delta(s, u)$,并将其固定在 `S` 中。 129 | 3. 此后更新其邻接顶点的 `d` 值,使得其他顶点的潜在路径长度不断逼近真实最短路径。 130 | 131 | 这种逐步扩展的方式确保了算法的正确性。 -------------------------------------------------------------------------------- /other/possible_allocate_memory.md: -------------------------------------------------------------------------------- 1 | # 能申请到$10^{18}$内存吗? 2 | 3 | Updated 1335 GMT+8 Dec 03, 2024 4 | 5 | 2024 fall, Complied by Hongfei Yan 6 | 7 | 8 | 9 | 我的机器是macOS Sonoma 14.6.1,最大可以申请到 276.00 GB(即接近于$2^{38}$)。计算方法如下所述。 10 | 11 | 12 | 13 | ## $10^{18}$有多大 14 | 15 | 要将 $10^{18}$ 字节转换为更常见的存储单位,如GB(吉字节)或TB(太字节),我们需要了解这些单位之间的换算关系。在二进制表示中,这些单位是基于2的幂来定义的,但在十进制表示中,它们通常基于10的幂来定义。 16 | 17 | - 1 GB (Gigabyte, 吉字节) = $10^9$ 字节 18 | - 1 TB (Terabyte, 太字节) = $10^{12}$ 字节 19 | 20 | 因此,$10^{18}$ 字节可以被直接转换为: 21 | 22 | - $10^{18} \div 10^9 = 10^9$ GB 23 | - $10^{18} \div 10^{12} = 10^6$ TB 24 | 25 | 这表示 $10^{18}$ 字节等于 10亿 GB 或者 1百万 TB。 26 | 27 | 28 | 29 | ## 判断使用的Python解释器是否64位 30 | 31 | 要判断你正在使用的Python解释器是32位还是64位,可以通过几种方法来完成。这里我将展示一种简单的方法,即使用Python内置的`platform`模块或`sys`模块来获取相关信息。 32 | 33 | **方法 1: 使用 `platform` 模块** 34 | 35 | `platform` 模块提供了很多关于平台的信息,包括体系结构(architecture),可以用来区分32位和64位版本。 36 | 37 | ```python 38 | import platform 39 | 40 | print(platform.architecture()) 41 | ``` 42 | 43 | 这个函数会返回一个元组,其中第一个元素表示Python解释器的位数(例如 '32bit' 或 '64bit')。 44 | 45 | **方法 2: 使用 `sys` 模块** 46 | 47 | `sys` 模块中的 `maxsize` 属性也可以用来间接判断Python解释器的位数。对于32位Python,`sys.maxsize` 的值通常为 2^31 - 1 (即 2147483647),而对于64位Python,这个值通常为 2^63 - 1 (即 9223372036854775807)。 48 | 49 | ```python 50 | import sys 51 | 52 | if sys.maxsize > 2**32: 53 | print("64-bit Python") 54 | else: 55 | print("32-bit Python") 56 | ``` 57 | 58 | 下面我将执行一段代码来演示如何使用这两种方法之一来确定当前Python环境的位数。 59 | 60 | ```python 61 | import platform 62 | print(platform.architecture()[0]) 63 | ``` 64 | 65 | 或者使用 `sys` 模块的方法: 66 | 67 | ```python 68 | import sys 69 | if sys.maxsize > 2**32: 70 | print("64-bit Python") 71 | else: 72 | print("32-bit Python") 73 | ``` 74 | 75 | 76 | 77 | ## 测试Python程序可以申请的最大内存量 78 | 79 | 80 | 81 | **python能够申请到的最大内存** 82 | 83 | > Python程序能够申请到的最大内存量主要取决于几个因素,包括操作系统、硬件配置以及Python解释器本身的限制。下面是一些关键点: 84 | > 85 | > 1. **操作系统限制**: 86 | > - 不同的操作系统对进程可以使用的最大内存有不同的默认限制。例如,在Linux上,可以通过`ulimit -a`命令查看当前用户的资源限制,其中包括了最大虚拟内存大小(`virtual memory`)。 87 | > - 在Windows上,理论上一个32位进程最多可以访问4GB的地址空间,而64位进程则可以访问更大的地址空间。 88 | > 89 | > 2. **硬件限制**: 90 | > - 物理内存(RAM)的数量直接限制了程序可用的实际物理内存。即使操作系统允许更大的虚拟内存,实际能使用的内存仍然受限于物理内存加上交换空间(swap space)的总量。 91 | > - 交换空间可以在一定程度上扩展可用内存,但使用大量交换空间会导致性能显著下降。 92 | > 93 | > 3. **Python解释器限制**: 94 | > - Python本身并没有设置一个固定的内存上限,但它会受到上述因素的影响。 95 | > - 在32位Python版本中,由于地址空间的限制,通常最大可分配内存为2-4GB左右。 96 | > - 64位Python版本理论上可以访问更多内存,但是实际可用量依然受限于操作系统的限制和可用的物理及虚拟内存。 97 | > 98 | > 4. **Python内部机制**: 99 | > - Python对象的内存管理由Python解释器负责,它使用垃圾回收机制来自动释放不再使用的内存。 100 | > - 对于非常大的数据集,可能需要考虑使用更高效的数据结构或第三方库(如NumPy, Pandas等),这些库针对大数据处理进行了优化,并且支持在内存之外存储数据(例如,使用磁盘上的文件作为后端)。 101 | > 102 | > 5. **增加内存限制的方法**: 103 | > - 在Linux上,可以通过修改`/etc/security/limits.conf`文件或使用`ulimit`命令来提高单个进程的内存限制。 104 | > - 对于需要处理特别大数据集的情况,可以考虑使用分布式计算框架(如Apache Spark)、数据库或者其他专门设计用于处理大规模数据的技术。 105 | > 106 | > 总之,Python程序能够申请到的最大内存量不是一个固定值,而是依赖于运行环境的具体条件。 107 | 108 | 109 | 110 | > % ulimit -a 111 | > 112 | > -t: cpu time (seconds) unlimited 113 | > -f: file size (blocks) unlimited 114 | > -d: data seg size (kbytes) unlimited 115 | > -s: stack size (kbytes) 8176 116 | > -c: core file size (blocks) 0 117 | > -v: address space (kbytes) unlimited 118 | > -l: locked-in-memory size (kbytes) unlimited 119 | > -u: processes 10666 120 | > -n: file descriptors 2560 121 | 122 | 123 | 124 | **虚拟地址空间(计算机原理2/3)** 125 | 126 | > 三大计算机原理之一,@Book_my_flight_v0.3.md 127 | > 128 | > ​ 计算机的基础架构自从 20 世纪 40 年代起就已经形成规范,包括处理器、存储指令和数据的内存、输入和输出设备。它通常叫作冯·诺依曼架构,以约翰·冯·诺依曼(德語:John Von Neumann,1903 年12 月 28 日-1957 年 2 月 8 日)的名字来命名,他在 1946 年发表的论文里描述了这一架构。论文的开头句,用现在的专门术语来说就是,CPU提供算法和控制,而 RAM 和磁盘则是记忆存储,键盘、鼠标和显示器与操作人员交互。其中需要重点理解的是与存储相关的进程的虚拟地址空间。 129 | > 130 | > 虚拟存储器是一个抽象概念,它为每个进程提供了一个假象,好像每个进程都在独占地使用主存。每个进程看到的存储器都是一致的,称之为虚拟地址空间。如图1-15所示的是 Linux 进程的虚拟地址空间(其他 Unix 系统的设计与此类似)。在 Linux 中,最上面的四分之一的地址空间是预留给操作系统中的代码和数据的,这对所有进程都一样。底部的四分之三的地址空间用来存放用户进程定义的代码和数据。请注意,图中的地址是从下往上增大的。 131 | > 132 | > 133 | > 134 | > ![image-20230109195232404](https://raw.githubusercontent.com/GMyhf/img/main/img/image-20230109195232404.png) 135 | > 136 | > 图1-15 进程的虚拟地址空间(Process virtual address space)(注:图片来源为 Randal Bryant[8],2015年3月) 137 | > 138 | > 139 | > 140 | > ​ 每个进程看到的虚拟地址空间由准确定义的区(area)构成,每个区都有专门的功能。简单看下每一个区,从最低的地址开始,逐步向上研究。 141 | > 142 | > - 程序代码和数据(code and data)。代码是从同一固定地址开始,紧接着的是和全局变量相对应的数据区。代码和数据区是由可执行目标文件直接初始化的,示例中就是可执行文件hello。 143 | > 144 | > - 堆(heap)。紧随代码和数据区之后的是运行时堆(Run-time heap)。代码和数据区是在进程一旦开始运行时就被指定了大小的,与此不同,作为调用像 malloc 和 free 这样的 C 标准库函数的结果,堆可以在运行时动态地扩展和收缩。 145 | > 146 | > - 共享库(shared libraries)。在地址空间的中间附近是一块用来存放像标准库和数学库这样共享库的代码和数据的区域。共享库的概念非常强大。 147 | > 148 | > - 栈(stack)。位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。和堆一样,用户栈(User stack)在程序执行期间可以动态地扩展和收缩。特别地,每次我们调用一个函数时,栈就会增长。每次我们从函数返回时,栈就会收缩。 149 | > 150 | > - 内核虚拟存储器(kernal virtal memory)。内核是操作系统总是驻留在存储器中的部分。地址空间顶部是为内核预留的。应用程序不允许读写这个区域的内容或者直接调用内核代码定义的函数。 151 | > 152 | > ​ 虚拟存储器的运作需要硬件和操作系统软件间的精密复杂的互相合作,包括对处理器生成的每个地址的硬件翻译。基本思想是把一个进程虚拟存储器的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。 153 | 154 | 155 | 156 | 157 | 158 | 要测试Python程序可以申请的最大内存量,你可以编写一个简单的脚本,该脚本会尝试分配越来越多的内存,直到达到系统限制或Python解释器本身的限制。这个过程通常涉及到创建一个越来越大的列表(或其他数据结构),并填充它,直到内存不足。 159 | 160 | 请注意,这样的测试可能会导致你的系统变得非常慢,甚至可能崩溃,因为它会消耗大量的RAM。因此,在进行这种测试之前,请确保你了解风险,并且最好在受控环境中执行此操作,例如虚拟机或有足够空闲资源的机器上。 161 | 162 | ```python 163 | import os 164 | import sys 165 | import gc # 垃圾回收模块 166 | 167 | 168 | def allocate_memory(chunk_size=1024 * 1024 * 1024, max_attempts=1000): 169 | """ 170 | 尝试分配内存,每次增加chunk_size字节,直到无法分配更多。 171 | 172 | :param chunk_size: 每次尝试分配的内存大小(以字节为单位) 173 | :param max_attempts: 最大尝试次数 174 | """ 175 | data = [] 176 | total_allocated = 0 177 | for i in range(max_attempts): 178 | try: 179 | # 尝试分配额外的内存 180 | data.append(' ' * chunk_size) 181 | total_allocated += chunk_size 182 | print(f"Allocated {total_allocated / (1024 * 1024 * 1024):.2f} GB") 183 | except MemoryError: 184 | print("Memory allocation failed.") 185 | break 186 | finally: 187 | # 强制垃圾回收 188 | gc.collect() 189 | 190 | print(f"Total memory allocated: {total_allocated / (1024 * 1024 * 1024):.2f} GB") 191 | 192 | 193 | # 运行测试 194 | allocate_memory() 195 | ``` 196 | 197 | 198 | 199 | > 运行结果,mac机器 200 | > 201 | > Allocated 274.00 GB 202 | > Allocated 275.00 GB 203 | > Allocated 276.00 GB 204 | > 205 | > Process finished with exit code 137 (interrupted by signal 9:SIGKILL) 206 | 207 | 208 | 209 | 要找出276GB是2的多少次幂,首先需要将276GB转换为字节,因为通常在计算中使用的是二进制单位。1GB等于2^30字节(在二进制表示中)。因此,276GB可以表示为 276 * 2^30 字节。 210 | 211 | 接下来,我们需要找到一个指数x,使得 2^x 等于 276 * 2^30。这可以通过对数运算来解决: 212 | 213 | $ x = \log_2(276 \times 2^{30}) $ 214 | 215 | $ \log_2(276 \times 2^{30}) = \log_2(276) + \log_2(2^{30}) $ 216 | 217 | $ \log_2(276) + 30 \approx 8.1073 + 30 = 38.1073 $ 218 | 219 | 这意味着276GB大约等于 $2^{38.1073}$ 字节。由于幂次通常是一个整数,我们可以认为276GB最接近于 $2^{38}$ 字节,但略大于这个值。如果你需要更精确的结果,可以使用科学计算器来获得更准确的对数值。 -------------------------------------------------------------------------------- /other/wordcloud2024.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GMyhf/2024fall-cs101/dd8addcabbf5eff04dff690ec15a22905b6f80fd/other/wordcloud2024.zip -------------------------------------------------------------------------------- /question1_before_class.md: -------------------------------------------------------------------------------- 1 | # 计算概论(B) 课前问题1 2 | 3 | Updated 1752 GMT+8 Aug 23, 2024 4 | 5 | 6 | 7 | 2024 fall, Complied by Hongfei Yan 8 | 9 | Markdown(用 https://typoraio.cn 编辑)格式文件在,https://github.com/GMyhf/2024spring-cs201 10 | 11 | 12 | 13 | | 课程号和名: 04831410,计算概论(B) | 班号: 11 | 14 | | ------------------------------------------------------------ | ----------------------------------------------------------- | 15 | | 上课时间: 1-16周 每周 周二 7-9节 | 地点: 二教107 | 16 | | 上机时间: 1-15周 每周 周四 7-8节
期末机考时间: 2025.12.26 周四 7-8节
期末笔试时间: 2025年1月7日下午 | 地点:7号机房(理科1号楼三层1339房间)和8号机房(1338房间) | 17 | | 助教:熊江凯、罗熙佑、涂程颖、王嘉林 | 在课程微信群中的名字是“TA-”开始,地点:理科1号楼1220 | 18 | 19 | 20 | 21 | 在学习编程的过程中,需要敲击键盘输入代码,尤其是机考时候,当然是又快又准的敲出代码会有优势。2019年秋季我敲了一些《新概念英语》第3册和第4册的文章,并记录了时间,以此来练习盲打。 22 | 请同学练习盲打,接近我的完成时间为止。**如果方便请给出你的盲打记录,至少1篇,在课程微信群中展示**。 23 | 24 | 25 | 26 | ## 1. Fingers in position, hands ready 27 | 28 | https://www.readandspell.com/us/finger-placement-for-typing 29 | 30 | image-20230903111445819 31 | 32 |
图1 盲打指法
33 | 34 | ## 2. 盲打记录 35 | 36 | 37 | 38 | image-20230903111622511 39 | 40 | 41 |
图2 盲打《新概念英语》第3册第27篇文章的时间花费6分54秒
42 | 43 | 44 | 45 | image-20230903111916835 46 | 47 |
图3 盲打《新概念英语》第3册部分文章时间花费
48 | 49 | 50 | 51 | image-20230903112208678 52 | 53 |
图4 盲打《新概念英语》第4册部分文章时间花费
--------------------------------------------------------------------------------