├── 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 |
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 |
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 | 
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 |
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所在的文件夹路径输入,如:
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 | 
85 |
86 | 在输入框中输入chinese,下载插件。
87 |
88 | 
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文件,插件就会启动,点击右下角,**选择虚拟环境中的那个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 | 
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 | 
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 | 
10 |
11 | ## 程序框图
12 |
13 | 
14 |
15 |
16 |
17 | ## ip
18 |
19 | ABC类,掩码
20 |
21 | 
22 |
23 |
24 |
25 | 在Python中True等价于1
26 |
27 |
28 |
29 | 
30 |
31 | 
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 | 
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 | 
47 |
48 |
49 |
50 | ### 示例:清华计算机系课程攻略
51 |
52 | https://github.com/PKUanonym/REKCARC-TSC-UHT
53 |
54 | 
55 |
56 |
57 |
58 | ### 示例:csdiy
59 |
60 | https://csdiy.wiki/#cs61a
61 |
62 | 
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 |
97 |
98 |
99 |
100 |
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 | > 
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 |
31 |
32 | 图1 盲打指法
33 |
34 | ## 2. 盲打记录
35 |
36 |
37 |
38 |
39 |
40 |
41 | 图2 盲打《新概念英语》第3册第27篇文章的时间花费6分54秒
42 |
43 |
44 |
45 |
46 |
47 | 图3 盲打《新概念英语》第3册部分文章时间花费
48 |
49 |
50 |
51 |
52 |
53 | 图4 盲打《新概念英语》第4册部分文章时间花费
--------------------------------------------------------------------------------